helia 6.0.22-080e4f91 → 6.0.22-397f2d86

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,68 +1,68 @@
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 tS=Object.create;var bu=Object.defineProperty;var rS=Object.getOwnPropertyDescriptor;var nS=Object.getOwnPropertyNames;var oS=Object.getPrototypeOf,sS=Object.prototype.hasOwnProperty;var sn=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),tt=(r,e)=>{for(var t in e)bu(r,t,{get:e[t],enumerable:!0})},v6=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of nS(e))!sS.call(r,o)&&o!==t&&bu(r,o,{get:()=>e[o],enumerable:!(n=rS(e,o))||n.enumerable});return r};var Pn=(r,e,t)=>(t=r!=null?tS(oS(r)):{},v6(e||!r||!r.__esModule?bu(t,"default",{value:r,enumerable:!0}):t,r)),iS=r=>v6(bu({},"__esModule",{value:!0}),r);var T6=sn((MN,V0)=>{"use strict";var aS=Object.prototype.hasOwnProperty,qt="~";function Xa(){}Object.create&&(Xa.prototype=Object.create(null),new Xa().__proto__||(qt=!1));function cS(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function A6(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var s=new cS(t,n||r,o),i=qt?qt+e:e;return r._events[i]?r._events[i].fn?r._events[i]=[r._events[i],s]:r._events[i].push(s):(r._events[i]=s,r._eventsCount++),r}function Ru(r,e){--r._eventsCount===0?r._events=new Xa:delete r._events[e]}function Dt(){this._events=new Xa,this._eventsCount=0}Dt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)aS.call(t,n)&&e.push(qt?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Dt.prototype.listeners=function(e){var t=qt?qt+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,s=n.length,i=new Array(s);o<s;o++)i[o]=n[o].fn;return i};Dt.prototype.listenerCount=function(e){var t=qt?qt+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Dt.prototype.emit=function(e,t,n,o,s,i){var a=qt?qt+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,d,u;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,s),!0;case 6:return c.fn.call(c.context,t,n,o,s,i),!0}for(u=1,d=new Array(l-1);u<l;u++)d[u-1]=arguments[u];c.fn.apply(c.context,d)}else{var f=c.length,h;for(u=0;u<f;u++)switch(c[u].once&&this.removeListener(e,c[u].fn,void 0,!0),l){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,t);break;case 3:c[u].fn.call(c[u].context,t,n);break;case 4:c[u].fn.call(c[u].context,t,n,o);break;default:if(!d)for(h=1,d=new Array(l-1);h<l;h++)d[h-1]=arguments[h];c[u].fn.apply(c[u].context,d)}}return!0};Dt.prototype.on=function(e,t,n){return A6(this,e,t,n,!1)};Dt.prototype.once=function(e,t,n){return A6(this,e,t,n,!0)};Dt.prototype.removeListener=function(e,t,n,o){var s=qt?qt+e:e;if(!this._events[s])return this;if(!t)return Ru(this,s),this;var i=this._events[s];if(i.fn)i.fn===t&&(!o||i.once)&&(!n||i.context===n)&&Ru(this,s);else{for(var a=0,c=[],l=i.length;a<l;a++)(i[a].fn!==t||o&&!i[a].once||n&&i[a].context!==n)&&c.push(i[a]);c.length?this._events[s]=c.length===1?c[0]:c:Ru(this,s)}return this};Dt.prototype.removeAllListeners=function(e){var t;return e?(t=qt?qt+e:e,this._events[t]&&Ru(this,t)):(this._events=new Xa,this._eventsCount=0),this};Dt.prototype.off=Dt.prototype.removeListener;Dt.prototype.addListener=Dt.prototype.on;Dt.prefixed=qt;Dt.EventEmitter=Dt;typeof V0<"u"&&(V0.exports=Dt)});var Y6=sn((jO,G6)=>{G6.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(s,i){t[s]=i,e++,e>=r&&(e=0,n=t,t=Object.create(null))}return{has:function(s){return t[s]!==void 0||n[s]!==void 0},remove:function(s){t[s]!==void 0&&(t[s]=void 0),n[s]!==void 0&&(n[s]=void 0)},get:function(s){var i=t[s];if(i!==void 0)return i;if((i=n[s])!==void 0)return o(s,i),i},set:function(s,i){t[s]!==void 0?t[s]=i:o(s,i)},clear:function(){t=Object.create(null),n=Object.create(null)}}}});var o7=sn(Oc=>{(function(){var r,e,t,n,o,s,i,a;a=function(c){var l,d,u,f;return l=(c&255<<24)>>>24,d=(c&255<<16)>>>16,u=(c&65280)>>>8,f=c&255,[l,d,u,f].join(".")},i=function(c){var l,d,u,f,h,p;for(l=[],u=f=0;f<=3&&c.length!==0;u=++f){if(u>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}p=e(c),h=p[0],d=p[1],c=c.substring(d),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"),s=t("a"),o=t("A"),e=function(c){var l,d,u,f,h;for(f=0,l=10,d="9",u=0,c.length>1&&c[u]==="0"&&(c[u+1]==="x"||c[u+1]==="X"?(u+=2,l=16):"0"<=c[u+1]&&c[u+1]<="9"&&(u++,l=8,d="7")),h=u;u<c.length;){if("0"<=c[u]&&c[u]<=d)f=f*l+(t(c[u])-n)>>>0;else if(l===16)if("a"<=c[u]&&c[u]<="f")f=f*l+(10+t(c[u])-s)>>>0;else if("A"<=c[u]&&c[u]<="F")f=f*l+(10+t(c[u])-o)>>>0;else break;else break;if(f>4294967295)throw new Error("too large");u++}if(u===h)throw new Error("empty octet");return[f,u]},r=(function(){function c(l,d){var u,f,h,p;if(typeof l!="string")throw new Error("Missing `net' parameter");if(d||(p=l.split("/",2),l=p[0],d=p[1]),d||(d=32),typeof d=="string"&&d.indexOf(".")>-1){try{this.maskLong=i(d)}catch(g){throw u=g,new Error("Invalid mask: "+d)}for(f=h=32;h>=0;f=--h)if(this.maskLong===4294967295<<32-f>>>0){this.bitmask=f;break}}else if(d||d===0)this.bitmask=parseInt(d,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(i(l)&this.maskLong)>>>0}catch(g){throw u=g,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+d);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):(i(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 d,u,f;for(f=i(this.first),u=i(this.last),d=0;f<=u;)l(a(f),f,d),d++,f++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c})(),Oc.ip2long=i,Oc.long2ip=a,Oc.Netmask=r}).call(Oc)});var Jf=sn((BQ,hg)=>{var OQ=(function(){typeof hg<"u"&&(hg.exports=g);var r=86400,e=3200,t=146097*e/400,n=r*t,o=1e3*n,s=864e13,i=4294967296,a=1e6,c="000000000",l=Math.trunc||function(S){var x=S-S%1;return x==0&&(S<0||S===0&&1/S!=1/0)?-0:x},d=g.prototype,u=(g.fromDate=function(S){return new g(+S)},g.fromInt64BE=D(0,1,2,3,0,4),g.fromInt64LE=D(3,2,1,0,4,0),g.fromString=function(M){var x,L=new g,M=(M+="").replace(/^\s*[+\-]?\d+/,function(v){var v=+v,E=1970+(v-1970)%400;return L.year=v-E,E}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(R,v,E){return v<0&&(E*=-1),x=6e4*(60*+v+ +E),""}).replace(/\.\d+$/,function(R){return L.nano=+(R+c).substr(1,9),""}).split(/\D+/);if(1<M.length?M[1]--:M[1]=0,L.time=x=Date.UTC.apply(Date,M)-(x||0),isNaN(x))throw new TypeError("Invalid Date");return m(L)},g.fromTimeT=function(S){return I(S,0)},d.year=0,d.time=0,d.nano=0,d.addNano=function(S){return this.nano+=+S||0,this},d.getNano=function(){var S=m(this);return(S.time%1e3*a+ +S.nano+1e9)%1e9},d.getTimeT=function(){var x=m(this),S=Math.floor(x.time/1e3),x=x.year;return x&&(S+=x*t*r/e),S},d.getYear=function(){return this.toDate().getUTCFullYear()+this.year},d.toDate=function(){return w(m(this).time)},d.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},d.toString=function(S){var x=this,L=x.toDate(),M={H:function(){return $(L.getUTCHours())},L:function(){return z(L.getUTCMilliseconds(),3)},M:function(){return $(L.getUTCMinutes())},N:function(){return z(x.getNano(),9)},S:function(){return $(L.getUTCSeconds())},Y:function(){var R=x.getYear();return 999999<R?"+"+R:9999<R?"+"+z(R,6):0<=R?z(R,4):-999999<=R?"-"+z(-R,6):R},a:function(){return h[L.getUTCDay()]},b:function(){return f[L.getUTCMonth()]},d:function(){return $(L.getUTCDate())},e:function(){return(function(R){return(9<R?"":" ")+(0|R)})(L.getUTCDate())},m:function(){return $(L.getUTCMonth()+1)}};return(function R(v){return v.replace(/%./g,function(E){var _=E[1],b=p[_],_=M[_];return b?R(b):_?_():E})})(S||u)},d.writeInt64BE=T(0,1,2,3,0,4),d.writeInt64LE=T(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,x,L){var M=this;if(!(M instanceof g))return new g(S,x,L);M.time=+S||0,M.nano=+x||0,M.year=+L||0,m(M)}function m(S){var x,L,M,R=S.year,v=S.time,E=S.nano,b=((E<0||a<=E)&&(E-=(L=Math.floor(E/a))*a,v+=L,L=1),R%e);return(v<-s||s<v||b)&&((x=l(v/o))&&(R+=x*e,v-=x*o),(M=w(v)).setUTCFullYear(b+M.getUTCFullYear()),M=(v=+M)+(x=l((R-=b)/e))*o,x&&-s<=M&&M<=s&&(R-=x*e,v=M),L=1),L&&(S.year=R,S.time=v,S.nano=E),S}function w(S){var x=new Date(0);return x.setTime(S),x}function I(R,M){R=+R||0;var L=l((M=(M|0)*i)/n)+l(R/n),M=M%n+R%n,R=l(M/n);return R&&(L+=R,M-=R*n),new g(1e3*M,0,L*e)}function T(S,x,L,M,R,v){return function(b,_){var O=m(this);b=b||new Array(8),F(b,_|=0);var k=Math.floor(O.time/1e3),O=O.year*(t*r/e),B=l(O/i)+l(k/i),O=O%i+k%i,k=Math.floor(O/i);return k&&(B+=k,O-=k*i),E(b,_+R,B),E(b,_+v,O),b};function E(b,_,B){b[_+S]=B>>24&255,b[_+x]=B>>16&255,b[_+L]=B>>8&255,b[_+M]=255&B}}function D(S,x,L,M,R,v){return function(b,_){F(b,_|=0);var B=E(b,_+R);return I(E(b,_+v),B)};function E(b,_){return 16777216*b[_+S]+(b[_+x]<<16|b[_+L]<<8|b[_+M])}}function F(S,x){if(S=S&&S.length,S==null)throw new TypeError("Invalid Buffer");if(S<x+8)throw new RangeError("Out of range")}function $(S){return(9<S?"":"0")+(0|S)}function z(S,x){return(c+(0|S)).substr(-x)}})()});var zw=sn((Joe,Ww)=>{"use strict";function rP(r){return r>=55296&&r<=56319}function nP(r){return r>=56320&&r<=57343}Ww.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var o=t.length,s=0,i,a,c=0;c<o;c+=1){if(i=t.charCodeAt(c),a=t[c],rP(i)&&nP(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),s+=e(a),s===n)return t.slice(0,c+1);if(s>n)return t.slice(0,c-a.length+1)}return t}});var Yw=sn((ese,Gw)=>{"use strict";function oP(r){return r>=55296&&r<=56319}function sP(r){return r>=56320&&r<=57343}Gw.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,o=null,s=null,i=0;i<t;i++)o=e.charCodeAt(i),sP(o)?s!=null&&oP(s)?n+=1:n+=3:o<=127?n+=1:o>=128&&o<=2047?n+=2:o>=2048&&o<=65535&&(n+=3),s=o;return n}});var Qw=sn((tse,Xw)=>{"use strict";var iP=zw(),aP=Yw();Xw.exports=iP.bind(null,aP)});var Jw=sn((rse,Zw)=>{"use strict";var cP=Qw(),lP=/[\/\?<>\\:\*\|"]/g,uP=/[\x00-\x1f\x80-\x9f]/g,dP=/^\.+$/,fP=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i;function hP(r,e){for(var t=r.length;t>0&&(r[t-1]==="."||r[t-1]===" ");)t--;return t<r.length?r.slice(0,t)+e:r}function jw(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(lP,e).replace(uP,e).replace(dP,e).replace(fP,e);return t=hP(t,e),cP(t,255)}Zw.exports=function(r,e){var t=e&&e.replacement||"",n=jw(r,t);return t===""?n:jw(n,"")}});var eb=sn(va=>{"use strict";var mP="[object ArrayBuffer]",io=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===mP}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 s=0;s<n.length;s++)if(n[s]!==o[s])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 i of t)n+=i.byteLength;let o=new Uint8Array(n),s=0;for(let i of t){let a=this.toUint8Array(i);o.set(a,s),s+=a.length}return e[e.length-1]instanceof Function?this.toView(o,e[e.length-1]):o.buffer}},Gg="string",gP=/^[0-9a-f\s]+$/i,yP=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,wP=/^[a-zA-Z0-9-_]+$/,o1=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=io.toUint8Array(e),n="";for(let s=0;s<t.length;s++)n+=String.fromCharCode(t[s]);return decodeURIComponent(escape(n))}},Nr=class{static toString(e,t=!1){let n=io.toArrayBuffer(e),o=new DataView(n),s="";for(let i=0;i<n.byteLength;i+=2){let a=o.getUint16(i,t);s+=String.fromCharCode(a)}return s}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),o=new DataView(n);for(let s=0;s<e.length;s++)o.setUint16(s*2,e.charCodeAt(s),t);return n}},s1=class r{static isHex(e){return typeof e===Gg&&gP.test(e)}static isBase64(e){return typeof e===Gg&&yP.test(e)}static isBase64Url(e){return typeof e===Gg&&wP.test(e)}static ToString(e,t="utf8"){let n=io.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 Nr.toString(n,!0);case"utf16":case"utf16be":return Nr.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 Nr.fromString(e,!0);case"utf16":case"utf16be":return Nr.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=io.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 o1.fromString(e);case"utf16":case"utf16be":return Nr.fromString(e);case"utf16le":case"usc2":return Nr.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 o1.toString(e);case"utf16":case"utf16be":return Nr.toString(e);case"utf16le":case"usc2":return Nr.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=io.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=io.toUint8Array(e),n="",o=t.length;for(let s=0;s<o;s++){let i=t[s];i<16&&(n+="0"),n+=i.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 s=t.slice(o,o+2);n[o/2]=parseInt(s,16)}return n.buffer}static ToUtf16String(e,t=!1){return Nr.toString(e,t)}static FromUtf16String(e,t=!1){return Nr.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,"")||""}};s1.DEFAULT_UTF8_ENCODING="utf8";function bP(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let o=arguments[n];for(let s in o)t[s]=o[s]}return t}function EP(...r){let e=r.map(o=>o.byteLength).reduce((o,s)=>o+s),t=new Uint8Array(e),n=0;return r.map(o=>new Uint8Array(o)).forEach(o=>{for(let s of o)t[n++]=s}),t.buffer}function xP(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}va.BufferSourceConverter=io;va.Convert=s1;va.assign=bP;va.combine=EP;va.isEqual=xP});var gx=sn(Rn=>{"use strict";Object.defineProperty(Rn,"__esModule",{value:!0});Rn.parseCookie=px;Rn.parse=px;Rn.stringifyCookie=VL;Rn.stringifySetCookie=Mp;Rn.serialize=Mp;Rn.parseSetCookie=HL;Rn.stringifySetCookie=Mp;Rn.serialize=Mp;var fx=/^[\u0021-\u003A\u003C\u003E-\u007E]+$/,hx=/^[\u0021-\u003A\u003C-\u007E]*$/,ML=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,UL=/^[\u0020-\u003A\u003D-\u007E]*$/,FL=/^-?\d+$/,$L=Object.prototype.toString,KL=(()=>{let r=function(){};return r.prototype=Object.create(null),r})();function px(r,e){let t=new KL,n=r.length;if(n<2)return t;let o=e?.decode||mx,s=0;do{let i=V4(r,s,n);if(i===-1)break;let a=K4(r,s,n);if(i>a){s=r.lastIndexOf(";",i-1)+1;continue}let c=Yo(r,s,i);t[c]===void 0&&(t[c]=o(Yo(r,i+1,a))),s=a+1}while(s<n);return t}function VL(r,e){let t=e?.encode||encodeURIComponent,n=[];for(let o of Object.keys(r)){let s=r[o];if(s===void 0)continue;if(!fx.test(o))throw new TypeError(`cookie name is invalid: ${o}`);let i=t(s);if(!hx.test(i))throw new TypeError(`cookie val is invalid: ${s}`);n.push(`${o}=${i}`)}return n.join("; ")}function Mp(r,e,t){let n=typeof r=="object"?r:{...t,name:r,value:String(e)},s=(typeof e=="object"?e:t)?.encode||encodeURIComponent;if(!fx.test(n.name))throw new TypeError(`argument name is invalid: ${n.name}`);let i=n.value?s(n.value):"";if(!hx.test(i))throw new TypeError(`argument val is invalid: ${n.value}`);let a=n.name+"="+i;if(n.maxAge!==void 0){if(!Number.isInteger(n.maxAge))throw new TypeError(`option maxAge is invalid: ${n.maxAge}`);a+="; Max-Age="+n.maxAge}if(n.domain){if(!ML.test(n.domain))throw new TypeError(`option domain is invalid: ${n.domain}`);a+="; Domain="+n.domain}if(n.path){if(!UL.test(n.path))throw new TypeError(`option path is invalid: ${n.path}`);a+="; Path="+n.path}if(n.expires){if(!qL(n.expires)||!Number.isFinite(n.expires.valueOf()))throw new TypeError(`option expires is invalid: ${n.expires}`);a+="; Expires="+n.expires.toUTCString()}if(n.httpOnly&&(a+="; HttpOnly"),n.secure&&(a+="; Secure"),n.partitioned&&(a+="; Partitioned"),n.priority)switch(typeof n.priority=="string"?n.priority.toLowerCase():void 0){case"low":a+="; Priority=Low";break;case"medium":a+="; Priority=Medium";break;case"high":a+="; Priority=High";break;default:throw new TypeError(`option priority is invalid: ${n.priority}`)}if(n.sameSite)switch(typeof n.sameSite=="string"?n.sameSite.toLowerCase():n.sameSite){case!0:case"strict":a+="; SameSite=Strict";break;case"lax":a+="; SameSite=Lax";break;case"none":a+="; SameSite=None";break;default:throw new TypeError(`option sameSite is invalid: ${n.sameSite}`)}return a}function HL(r,e){let t=e?.decode||mx,n=r.length,o=K4(r,0,n),s=V4(r,0,o),i=s===-1?{name:"",value:t(Yo(r,0,o))}:{name:Yo(r,0,s),value:t(Yo(r,s+1,o))},a=o+1;for(;a<n;){let c=K4(r,a,n),l=V4(r,a,c),d=l===-1?Yo(r,a,c):Yo(r,a,l),u=l===-1?void 0:Yo(r,l+1,c);switch(d.toLowerCase()){case"httponly":i.httpOnly=!0;break;case"secure":i.secure=!0;break;case"partitioned":i.partitioned=!0;break;case"domain":i.domain=u;break;case"path":i.path=u;break;case"max-age":u&&FL.test(u)&&(i.maxAge=Number(u));break;case"expires":if(!u)break;let f=new Date(u);Number.isFinite(f.valueOf())&&(i.expires=f);break;case"priority":if(!u)break;let h=u.toLowerCase();(h==="low"||h==="medium"||h==="high")&&(i.priority=h);break;case"samesite":if(!u)break;let p=u.toLowerCase();(p==="lax"||p==="strict"||p==="none")&&(i.sameSite=p);break}a=c+1}return i}function K4(r,e,t){let n=r.indexOf(";",e);return n===-1?t:n}function V4(r,e,t){let n=r.indexOf("=",e);return n<t?n:-1}function Yo(r,e,t){let n=e,o=t;do{let s=r.charCodeAt(n);if(s!==32&&s!==9)break}while(++n<o);for(;o>n;){let s=r.charCodeAt(o-1);if(s!==32&&s!==9)break;o--}return r.slice(n,o)}function mx(r){if(r.indexOf("%")===-1)return r;try{return decodeURIComponent(r)}catch{return r}}function qL(r){return $L.call(r)==="[object Date]"}});var jD={};tt(jD,{DEFAULT_CID_PEER_FILTER_SIZE:()=>x3,DEFAULT_SESSION_MAX_PROVIDERS:()=>E3,DEFAULT_SESSION_MIN_PROVIDERS:()=>b3,InsufficientProvidersError:()=>tl,InvalidCodecError:()=>v3,NoRoutersAvailableError:()=>$o,UnknownCodecError:()=>nl,UnknownHashAlgorithmError:()=>rl,createHelia:()=>QD,heliaDefaults:()=>w6,libp2pDefaults:()=>K0});var S6=Symbol.for("@libp2p/connection");var Ln=Symbol.for("@libp2p/content-routing");var Ht=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},Eu=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},xu=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},A=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"}},qa=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}},Wa=class extends Error{static name="UnsupportedOperationError";constructor(e="Unsupported operation"){super(e),this.name="UnsupportedOperationError"}};var os=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},li=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},Br=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},ui=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}};var an=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},za=class extends Error{static name="StreamBufferError";constructor(e="The stream buffer was full"){super(e),this.name="StreamBufferError"}},De=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},di=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},cn=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},vu=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},yo=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},fi=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},de=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},ss=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},ln=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},Mr=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var wo=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},is=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},Ga=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},Su=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},hi=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},Ur=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var Au=class extends Event{data;constructor(e,t){super("message",t),this.data=e}},bo=class extends Event{error;local;constructor(e,t,n){super("close",n),this.error=t,this.local=e}},Tu=class extends bo{constructor(e,t){super(!0,e,t)}},Iu=class extends bo{constructor(e,t){super(!1,e,t)}};var as=Symbol.for("@libp2p/peer-discovery");var _u=Symbol.for("@libp2p/peer-id");function Lt(r){return!!r?.[_u]}var Nn=Symbol.for("@libp2p/peer-routing");var cs="keep-alive";function Cu(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function ct(...r){let e=[];for(let t of r)Cu(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 ut(...r){let e=[];for(let t of r)Cu(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 Eo=Symbol.for("@libp2p/transport");var Ya;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(Ya||(Ya={}));var ie=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:s})=>s!==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))}};var me=Symbol.for("@libp2p/service-capabilities"),ur=Symbol.for("@libp2p/service-dependencies");var H=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var ku=class extends AggregateError{static name="DNSQueryFailedError";name="DNSQueryFailedError"};var H0=Pn(T6(),1);var q0=class r extends Error{name="TimeoutError";constructor(e,t){super(e,t),Error.captureStackTrace?.(this,r)}},I6=r=>r.reason??new DOMException("This operation was aborted.","AbortError");function Qa(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:s={setTimeout,clearTimeout},signal:i}=e,a,c,d=new Promise((u,f)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(i?.aborted){f(I6(i));return}if(i&&(c=()=>{f(I6(i))},i.addEventListener("abort",c,{once:!0})),r.then(u,f),t===Number.POSITIVE_INFINITY)return;let h=new q0;a=s.setTimeout.call(void 0,()=>{if(n){try{u(n())}catch(p){f(p)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?u():o instanceof Error?f(o):(h.message=o??`Promise timed out after ${t} milliseconds`,f(h))},t)}).finally(()=>{d.clear(),c&&i&&i.removeEventListener("abort",c)});return d.clear=()=>{s.clearTimeout.call(void 0,a),a=void 0},d}function W0(r,e,t){let n=0,o=r.length;for(;o>0;){let s=Math.trunc(o/2),i=n+s;t(r[i],e)<=0?(n=++i,o-=s+1):o=s}return n}var ja=class{#e=[];enqueue(e,t){let{priority:n=0,id:o}=t??{},s={priority:n,id:o,run:e};if(this.size===0||this.#e[this.size-1].priority>=n){this.#e.push(s);return}let i=W0(this.#e,s,(a,c)=>c.priority-a.priority);this.#e.splice(i,0,s)}setPriority(e,t){let n=this.#e.findIndex(s=>s.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 ls=class extends H0.default{#e;#t;#r=0;#a;#c=!1;#m=!1;#u;#I=0;#b=0;#d;#f;#l;#i=[];#s=0;#n;#_;#o=0;#y;#h;#L=1n;#w=new Map;timeout;constructor(e){if(super(),e={carryoverIntervalCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:ja,strict:!1,...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})`);if(e.strict&&e.interval===0)throw new TypeError("The `strict` option requires a non-zero `interval`");if(e.strict&&e.intervalCap===Number.POSITIVE_INFINITY)throw new TypeError("The `strict` option requires a finite `intervalCap`");if(this.#e=e.carryoverIntervalCount??e.carryoverConcurrencyCount??!1,this.#t=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#a=e.intervalCap,this.#u=e.interval,this.#l=e.strict,this.#n=new e.queueClass,this.#_=e.queueClass,this.concurrency=e.concurrency,e.timeout!==void 0&&!(Number.isFinite(e.timeout)&&e.timeout>0))throw new TypeError(`Expected \`timeout\` to be a positive finite number, got \`${e.timeout}\` (${typeof e.timeout})`);this.timeout=e.timeout,this.#h=e.autoStart===!1,this.#$()}#E(e){for(;this.#s<this.#i.length;){let n=this.#i[this.#s];if(n!==void 0&&e-n>=this.#u)this.#s++;else break}(this.#s>100&&this.#s>this.#i.length/2||this.#s===this.#i.length)&&(this.#i=this.#i.slice(this.#s),this.#s=0)}#D(e){this.#l?this.#i.push(e):this.#r++}#N(){this.#l?this.#i.length>this.#s&&this.#i.pop():this.#r>0&&this.#r--}#x(){return this.#i.length-this.#s}get#O(){return this.#t?!0:this.#l?this.#x()<this.#a:this.#r<this.#a}get#B(){return this.#o<this.#y}#M(){this.#o--,this.#o===0&&this.emit("pendingZero"),this.#A(),this.emit("next")}#U(){this.#f=void 0,this.#R(),this.#k()}#F(e){if(this.#l){if(this.#E(e),this.#x()>=this.#a){let n=this.#i[this.#s],o=this.#u-(e-n);return this.#v(o),!0}return!1}if(this.#d===void 0){let t=this.#I-e;if(t<0){if(this.#b>0){let n=e-this.#b;if(n<this.#u)return this.#v(this.#u-n),!0}this.#r=this.#e?this.#o:0}else return this.#v(t),!0}return!1}#v(e){this.#f===void 0&&(this.#f=setTimeout(()=>{this.#U()},e))}#S(){this.#d&&(clearInterval(this.#d),this.#d=void 0)}#C(){this.#f&&(clearTimeout(this.#f),this.#f=void 0)}#A(){if(this.#n.size===0){if(this.#S(),this.emit("empty"),this.#o===0){if(this.#C(),this.#l&&this.#s>0){let t=Date.now();this.#E(t)}this.emit("idle")}return!1}let e=!1;if(!this.#h){let t=Date.now(),n=!this.#F(t);if(this.#O&&this.#B){let o=this.#n.dequeue();this.#t||(this.#D(t),this.#g()),this.emit("active"),o(),n&&this.#k(),e=!0}}return e}#k(){this.#t||this.#d!==void 0||this.#l||(this.#d=setInterval(()=>{this.#R()},this.#u),this.#I=Date.now()+this.#u)}#R(){this.#l||(this.#r===0&&this.#o===0&&this.#d&&this.#S(),this.#r=this.#e?this.#o:0),this.#T(),this.#g()}#T(){for(;this.#A(););}get concurrency(){return this.#y}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.#y=e,this.#T()}setPriority(e,t){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`Expected \`priority\` to be a finite number, got \`${t}\` (${typeof t})`);this.#n.setPriority(e,t)}async add(e,t={}){return t={timeout:this.timeout,...t,id:t.id??(this.#L++).toString()},new Promise((n,o)=>{let s=Symbol(`task-${t.id}`);this.#n.enqueue(async()=>{this.#o++,this.#w.set(s,{id:t.id,priority:t.priority??0,startTime:Date.now(),timeout:t.timeout});let i;try{try{t.signal?.throwIfAborted()}catch(l){throw this.#K(),this.#w.delete(s),l}this.#b=Date.now();let a=e({signal:t.signal});if(t.timeout&&(a=Qa(Promise.resolve(a),{milliseconds:t.timeout,message:`Task timed out after ${t.timeout}ms (queue has ${this.#o} running, ${this.#n.size} waiting)`})),t.signal){let{signal:l}=t;a=Promise.race([a,new Promise((d,u)=>{i=()=>{u(l.reason)},l.addEventListener("abort",i,{once:!0})})])}let c=await a;n(c),this.emit("completed",c)}catch(a){o(a),this.emit("error",a)}finally{i&&t.signal?.removeEventListener("abort",i),this.#w.delete(s),queueMicrotask(()=>{this.#M()})}},t),this.emit("add"),this.#A()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#h?(this.#h=!1,this.#T(),this):this}pause(){this.#h=!0}clear(){this.#n=new this.#_,this.#S(),this.#P(),this.emit("empty"),this.#o===0&&(this.#C(),this.emit("idle")),this.emit("next")}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.#o===0&&this.#n.size===0||await this.#p("idle")}async onPendingZero(){this.#o!==0&&await this.#p("pendingZero")}async onRateLimit(){this.isRateLimited||await this.#p("rateLimit")}async onRateLimitCleared(){this.isRateLimited&&await this.#p("rateLimitCleared")}onError(){return new Promise((e,t)=>{let n=o=>{this.off("error",n),t(o)};this.on("error",n)})}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.#o}get isPaused(){return this.#h}#$(){this.#t||(this.on("add",()=>{this.#n.size>0&&this.#g()}),this.on("next",()=>{this.#g()}))}#g(){this.#t||this.#m||(this.#m=!0,queueMicrotask(()=>{this.#m=!1,this.#P()}))}#K(){this.#t||(this.#N(),this.#g())}#P(){let e=this.#c;if(this.#t||this.#n.size===0){e&&(this.#c=!1,this.emit("rateLimitCleared"));return}let t;if(this.#l){let o=Date.now();this.#E(o),t=this.#x()}else t=this.#r;let n=t>=this.#a;n!==e&&(this.#c=n,this.emit(n?"rateLimit":"rateLimitCleared"))}get isRateLimited(){return this.#c}get isSaturated(){return this.#o===this.#y&&this.#n.size>0||this.isRateLimited&&this.#n.size>0}get runningTasks(){return[...this.#w.values()].map(e=>({...e}))}};function Pu(r){let e=[dr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var j0={};tt(j0,{base10:()=>mS});var XN=new Uint8Array(0);function _6(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 Fr(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 C6(r){return new TextEncoder().encode(r)}function k6(r){return new TextDecoder().decode(r)}function lS(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 s=r.charAt(o),i=s.charCodeAt(0);if(t[i]!==255)throw new TypeError(s+" is ambiguous");t[i]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),d=Math.log(256)/Math.log(a);function u(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,w=0,I=p.length;w!==I&&p[w]===0;)w++,g++;for(var T=(I-w)*d+1>>>0,D=new Uint8Array(T);w!==I;){for(var F=p[w],$=0,z=T-1;(F!==0||$<m)&&z!==-1;z--,$++)F+=256*D[z]>>>0,D[z]=F%a>>>0,F=F/a>>>0;if(F!==0)throw new Error("Non-zero carry");m=$,w++}for(var S=T-m;S!==T&&D[S]===0;)S++;for(var x=c.repeat(g);S<T;++S)x+=r.charAt(D[S]);return x}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,w=0;p[g]===c;)m++,g++;for(var I=(p.length-g)*l+1>>>0,T=new Uint8Array(I);p[g];){var D=t[p.charCodeAt(g)];if(D===255)return;for(var F=0,$=I-1;(D!==0||F<w)&&$!==-1;$--,F++)D+=a*T[$]>>>0,T[$]=D%256>>>0,D=D/256>>>0;if(D!==0)throw new Error("Non-zero carry");w=F,g++}if(p[g]!==" "){for(var z=I-w;z!==I&&T[z]===0;)z++;for(var S=new Uint8Array(m+(I-z)),x=m;z!==I;)S[x++]=T[z++];return S}}}function h(p){var g=f(p);if(g)return g;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:f,decode:h}}var uS=lS,dS=uS,R6=dS;var G0=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")}},Y0=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 P6(this,e)}},X0=class{decoders;constructor(e){this.decoders=e}or(e){return P6(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 P6(r,e){return new X0({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var Q0=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 G0(e,t,n),this.decoder=new Y0(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function pi({name:r,prefix:e,encode:t,decode:n}){return new Q0(r,e,t,n)}function xo({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=R6(t,r);return pi({prefix:e,name:r,encode:n,decode:s=>Fr(o(s))})}function fS(r,e,t,n){let o=r.length;for(;r[o-1]==="=";)--o;let s=new Uint8Array(o*t/8|0),i=0,a=0,c=0;for(let l=0;l<o;++l){let d=e[r[l]];if(d===void 0)throw new SyntaxError(`Non-${n} character`);a=a<<t|d,i+=t,i>=8&&(i-=8,s[c++]=255&a>>i)}if(i>=t||(255&a<<8-i)!==0)throw new SyntaxError("Unexpected end of data");return s}function hS(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],i+=8;i>t;)i-=t,s+=e[o&a>>i];if(i!==0&&(s+=e[o&a<<t-i]),n)for(;(s.length*t&7)!==0;)s+="=";return s}function pS(r){let e={};for(let t=0;t<r.length;++t)e[r[t]]=t;return e}function je({name:r,prefix:e,bitsPerChar:t,alphabet:n}){let o=pS(n);return pi({prefix:e,name:r,encode(s){return hS(s,n,t)},decode(s){return fS(s,o,t,r)}})}var mS=xo({prefix:"9",name:"base10",alphabet:"0123456789"});var Z0={};tt(Z0,{base16:()=>gS,base16upper:()=>yS});var gS=je({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),yS=je({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var J0={};tt(J0,{base2:()=>wS});var wS=je({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var e2={};tt(e2,{base256emoji:()=>SS});var L6=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}"),bS=L6.reduce((r,e,t)=>(r[t]=e,r),[]),ES=L6.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function xS(r){return r.reduce((e,t)=>(e+=bS[t],e),"")}function vS(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=ES[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var SS=pi({prefix:"\u{1F680}",name:"base256emoji",encode:xS,decode:vS});var t2={};tt(t2,{base32:()=>dt,base32hex:()=>_S,base32hexpad:()=>kS,base32hexpadupper:()=>RS,base32hexupper:()=>CS,base32pad:()=>TS,base32padupper:()=>IS,base32upper:()=>AS,base32z:()=>PS});var dt=je({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),AS=je({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),TS=je({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),IS=je({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),_S=je({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),CS=je({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),kS=je({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),RS=je({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),PS=je({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var r2={};tt(r2,{base36:()=>Ar,base36upper:()=>LS});var Ar=xo({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),LS=xo({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var n2={};tt(n2,{base58btc:()=>Ne,base58flickr:()=>DS});var Ne=xo({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),DS=xo({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var o2={};tt(o2,{base64:()=>nt,base64pad:()=>Za,base64url:()=>Ja,base64urlpad:()=>NS});var nt=je({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),Za=je({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),Ja=je({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),NS=je({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var s2={};tt(s2,{base8:()=>OS});var OS=je({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var i2={};tt(i2,{identity:()=>BS});var BS=pi({prefix:"\0",name:"identity",encode:r=>k6(r),decode:r=>C6(r)});var Lu={};tt(Lu,{code:()=>a2,decode:()=>KS,encode:()=>$S,name:()=>FS});var MS=new TextEncoder,US=new TextDecoder,FS="json",a2=512;function $S(r){return MS.encode(JSON.stringify(r))}function KS(r){return JSON.parse(US.decode(r))}var us={};tt(us,{code:()=>On,decode:()=>qS,encode:()=>HS,name:()=>VS});var VS="raw",On=85;function HS(r){return Fr(r)}function qS(r){return Fr(r)}var u2={};tt(u2,{identity:()=>ft});var qe={};tt(qe,{Digest:()=>ds,create:()=>Wt,decode:()=>Re,equals:()=>l2,hasCode:()=>lA});var WS=O6,D6=128,zS=127,GS=~zS,YS=Math.pow(2,31);function O6(r,e,t){e=e||[],t=t||0;for(var n=t;r>=YS;)e[t++]=r&255|D6,r/=128;for(;r&GS;)e[t++]=r&255|D6,r>>>=7;return e[t]=r|0,O6.bytes=t-n+1,e}var XS=c2,QS=128,N6=127;function c2(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw c2.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&N6)<<o:(i&N6)*Math.pow(2,o),o+=7}while(i>=QS);return c2.bytes=s-n,t}var jS=Math.pow(2,7),ZS=Math.pow(2,14),JS=Math.pow(2,21),eA=Math.pow(2,28),tA=Math.pow(2,35),rA=Math.pow(2,42),nA=Math.pow(2,49),oA=Math.pow(2,56),sA=Math.pow(2,63),iA=function(r){return r<jS?1:r<ZS?2:r<JS?3:r<eA?4:r<tA?5:r<rA?6:r<nA?7:r<oA?8:r<sA?9:10},aA={encode:WS,decode:XS,encodingLength:iA},cA=aA,ec=cA;function tc(r,e=0){return[ec.decode(r,e),ec.decode.bytes]}function mi(r,e,t=0){return ec.encode(r,e,t),e}function gi(r){return ec.encodingLength(r)}function Wt(r,e){let t=e.byteLength,n=gi(r),o=n+gi(t),s=new Uint8Array(o+t);return mi(r,s,0),mi(t,s,n),s.set(e,o),new ds(r,t,e,s)}function Re(r){let e=Fr(r),[t,n]=tc(e),[o,s]=tc(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new ds(t,o,i,e)}function l2(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&_6(r.bytes,t.bytes)}}var ds=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function lA(r,e){return r.code===e}var B6=0,uA="identity",M6=Fr;function dA(r,e){if(e?.truncate!=null&&e.truncate!==r.byteLength){if(e.truncate<0||e.truncate>r.byteLength)throw new Error(`Invalid truncate option, must be less than or equal to ${r.byteLength}`);r=r.subarray(0,e.truncate)}return Wt(B6,M6(r))}var ft={code:B6,name:uA,encode:M6,digest:dA};var f2={};tt(f2,{sha256:()=>Ge,sha512:()=>Nu});var fA=20;function rc({name:r,code:e,encode:t,minDigestLength:n,maxDigestLength:o}){return new d2(r,e,t,n,o)}var d2=class{name;code;encode;minDigestLength;maxDigestLength;constructor(e,t,n,o,s){this.name=e,this.code=t,this.encode=n,this.minDigestLength=o??fA,this.maxDigestLength=s}digest(e,t){if(t?.truncate!=null){if(t.truncate<this.minDigestLength)throw new Error(`Invalid truncate option, must be greater than or equal to ${this.minDigestLength}`);if(this.maxDigestLength!=null&&t.truncate>this.maxDigestLength)throw new Error(`Invalid truncate option, must be less than or equal to ${this.maxDigestLength}`)}if(e instanceof Uint8Array){let n=this.encode(e);return n instanceof Uint8Array?U6(n,this.code,t?.truncate):n.then(o=>U6(o,this.code,t?.truncate))}else throw Error("Unknown type, must be binary type")}};function U6(r,e,t){if(t!=null&&t!==r.byteLength){if(t>r.byteLength)throw new Error(`Invalid truncate option, must be less than or equal to ${r.byteLength}`);r=r.subarray(0,t)}return Wt(e,r)}function $6(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var Ge=rc({name:"sha2-256",code:18,encode:$6("SHA-256")}),Nu=rc({name:"sha2-512",code:19,encode:$6("SHA-512")});function K6(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return pA(t,h2(r),e??Ne.encoder);default:return mA(t,h2(r),e??dt.encoder)}}var V6=new WeakMap;function h2(r){let e=V6.get(r);if(e==null){let t=new Map;return V6.set(r,t),t}return e}var G=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!==nc)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==gA)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=Wt(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&&l2(e.multihash,n.multihash)}toString(e){return K6(this,e)}toJSON(){return{"/":K6(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:s,bytes:i}=t;return new r(n,o,s,i??H6(n,o,s.bytes))}else if(t[yA]===!0){let{version:n,multihash:o,code:s}=t,i=Re(o);return r.create(n,s,i)}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!==nc)throw new Error(`Version 0 CID must use dag-pb (code: ${nc}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=H6(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,nc,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=Fr(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let s=o.subarray(t.multihashSize-t.digestSize),i=new ds(t.multihashCode,t.digestSize,s,o);return[t.version===0?r.createV0(i):r.createV1(t.codec,i),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[u,f]=tc(e.subarray(t));return t+=f,u},o=n(),s=nc;if(o===18?(o=0,t=0):s=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=t,a=n(),c=n(),l=t+c,d=l-i;return{version:o,codec:s,multihashCode:a,digestSize:c,multihashSize:d,size:l}}static parse(e,t){let[n,o]=hA(e,t),s=r.decode(o);if(s.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return h2(s).set(n,e),s}};function hA(r,e){switch(r[0]){case"Q":{let t=e??Ne;return[Ne.prefix,t.decode(`${Ne.prefix}${r}`)]}case Ne.prefix:{let t=e??Ne;return[Ne.prefix,t.decode(r)]}case dt.prefix:{let t=e??dt;return[dt.prefix,t.decode(r)]}case Ar.prefix:{let t=e??Ar;return[Ar.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 pA(r,e,t){let{prefix:n}=t;if(n!==Ne.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let s=t.encode(r).slice(1);return e.set(n,s),s}else return o}function mA(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let s=t.encode(r);return e.set(n,s),s}else return o}var nc=112,gA=18;function H6(r,e,t){let n=gi(r),o=n+gi(e),s=new Uint8Array(o+t.byteLength);return mi(r,s,0),mi(e,s,n),s.set(t,o),s}var yA=Symbol.for("@ipld/js-cid/CID");var fs={...i2,...J0,...s2,...j0,...Z0,...t2,...r2,...n2,...o2,...e2},LO={...f2,...u2};function ae(r=0){return new Uint8Array(r)}function Ye(r=0){return new Uint8Array(r)}function W6(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var q6=W6("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),p2=W6("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=Ye(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),wA={utf8:q6,"utf-8":q6,hex:fs.base16,latin1:p2,ascii:p2,binary:p2,...fs},Ou=wA;function P(r,e="utf8"){let t=Ou[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var m2=60;function Bu(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:dr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:dr[e.type],TTL:e.TTL??e.ttl??m2,data:e.data instanceof Uint8Array?P(e.data):e.data}))}}var bA=4;function g2(r,e={}){let t=new ls({concurrency:e.queryConcurrency??bA});return async(n,o={})=>{let s=o?.logger?.forComponent("dns:dns-json-over-https"),i=new URLSearchParams;i.set("name",n),Pu(o.types).forEach(c=>{i.append("type",dr[c])}),o.onProgress?.(new H("dns:query",n)),s?.("GET %s",`${r}?${i}`);let a=await t.add(async()=>{let c=await fetch(`${r}?${i}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(s?.("GET %s %d",c.url,c.status),c.status!==200)throw new Error(`Unexpected HTTP status: ${c.status} - ${c.statusText}`);let l=Bu(await c.json());return o.onProgress?.(new H("dns:response",l)),l},{signal:o.signal});if(a==null)throw new Error("No DNS response received");return a}}function z6(){return[g2("https://cloudflare-dns.com/dns-query"),g2("https://dns.google/resolve")]}var X6=Pn(Y6(),1);var y2=class{lru;constructor(e){this.lru=(0,X6.default)(e)}get(e,t){let n=!0,o=[];for(let s of t){let i=this.getAnswers(e,s);if(i.length===0){n=!1;break}o.push(...i)}if(n)return Bu({answers:o})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,o=this.lru.get(n);if(o!=null){let s=o.filter(i=>i.expires>Date.now()).map(({expires:i,value:a})=>({...a,TTL:Math.round((i-Date.now())/1e3),type:dr[a.type]}));return s.length===0&&this.lru.remove(n),s}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,o=this.lru.get(n)??[];o.push({expires:Date.now()+(t.TTL??m2)*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 Q6(r){return new y2(r)}var EA=1e3,Mu=class{resolvers;cache;logger;constructor(e){this.resolvers={},this.cache=Q6(e.cacheSize??EA),this.logger=e.logger,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["."]=z6())}async query(e,t={}){let n=Pu(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new H("dns:cache",o)),o;let s=`${e.split(".").pop()}.`,i=(this.resolvers[s]??this.resolvers["."]).sort(()=>Math.random()>.5?-1:1),a=[];for(let c of i){if(t.signal?.aborted===!0)break;try{let l=await c(e,{...t,logger:this.logger,types:n});for(let d of l.Answer)this.cache.add(e,d);return l}catch(l){a.push(l),t.onProgress?.(new H("dns:error",l))}}throw new ku(a,`DNS lookup of ${e} ${n} failed`)}};var dr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(dr||(dr={}));function Uu(r={}){return new Mu(r)}function xA(r){return r[Symbol.asyncIterator]!=null}function vA(r){if(xA(r))return(async()=>{for await(let e of r);})();for(let e of r);}var er=vA;var oc=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},sc=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},Fu=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var j6={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new Fu("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 ot=j6;function ee(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 Be(r,e){e==null&&(e=r.reduce((o,s)=>o+s.length,0));let t=Ye(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}var J6=Symbol.for("@achingbrain/uint8arraylist");function Z6(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 yi(r){return!!r?.[J6]}var Q=class r{bufs;length;[J6]=!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(yi(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(yi(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=Z6(this.bufs,e);return t.buf[t.index]}set(e,t){let n=Z6(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(yi(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 Be(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:Be(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),s=new r;return s.length=o,s.bufs=[...n],s}_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 s=0;s<this.bufs.length;s++){let i=this.bufs[s],a=o,c=a+i.byteLength;if(o=c,e>=c)continue;let l=e>=a&&e<c,d=t>a&&t<=c;if(l&&d){if(e===a&&t===c){n.push(i);break}let u=e-a;n.push(i.subarray(u,u+(t-e)));break}if(l){if(e===0){n.push(i);continue}n.push(i.subarray(e-a));continue}if(d){if(t===c){n.push(i);break}n.push(i.subarray(0,t-a));break}n.push(i)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!yi(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 s=256,i=new Int32Array(s);for(let u=0;u<s;u++)i[u]=-1;for(let u=0;u<o;u++)i[n[u]]=u;let a=i,c=this.byteLength-n.byteLength,l=n.byteLength-1,d;for(let u=t;u<=c;u+=d){d=0;for(let f=l;f>=0;f--){let h=this.get(u+f);if(n[f]!==h){d=Math.max(1,f-a[h]);break}}if(d===0)return u}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=Ye(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=ae(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=ae(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=ae(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=Ye(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=ae(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=ae(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=ae(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=ae(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=ae(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(!ee(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,s)=>o+s.byteLength,0)),n.length=t,n}};function C(r,e="utf8"){let t=Ou[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}var AA=parseInt("11111",2),w2=parseInt("10000000",2),TA=parseInt("01111111",2),e5={0:ic,1:ic,2:IA,3:kA,4:RA,5:CA,6:_A,16:ic,22:ic,48:ic};function Tr(r,e={offset:0}){let t=r[e.offset]&AA;if(e.offset++,e5[t]!=null)return e5[t](r,e);throw new Error("No decoder for tag "+t)}function ac(r,e){let t=0;if((r[e.offset]&w2)===w2){let n=r[e.offset]&TA,o="0x";e.offset++;for(let s=0;s<n;s++,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 ic(r,e){ac(r,e);let t=[];for(;!(e.offset>=r.byteLength);){let n=Tr(r,e);if(n===null)break;t.push(n)}return t}function IA(r,e){let t=ac(r,e),n=e.offset,o=e.offset+t,s=[];for(let i=n;i<o;i++)i===n&&r[i]===0||s.push(r[i]);return e.offset+=t,Uint8Array.from(s)}function _A(r,e){let t=ac(r,e),n=e.offset+t,o=r[e.offset];e.offset++;let s=0,i=0;o<40?(s=0,i=o):o<80?(s=1,i=o-40):(s=2,i=o-80);let a=`${s}.${i}`,c=[];for(;e.offset<n;){let l=r[e.offset];if(e.offset++,c.push(l&127),l<128){c.reverse();let d=0;for(let u=0;u<c.length;u++)d+=c[u]<<u*7;a+=`.${d}`,c=[]}}return a}function CA(r,e){return e.offset++,null}function kA(r,e){let t=ac(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 RA(r,e){let t=ac(r,e),n=r.subarray(e.offset,e.offset+t);return e.offset+=t,n}function PA(r){let e=r.toString(16);e.length%2===1&&(e="0"+e);let t=new Q;for(let n=0;n<e.length;n+=2)t.append(Uint8Array.from([parseInt(`${e[n]}${e[n+1]}`,16)]));return t}function $u(r){if(r.byteLength<128)return Uint8Array.from([r.byteLength]);let e=PA(r.byteLength);return new Q(Uint8Array.from([e.byteLength|w2]),e)}function zt(r){let e=new Q,t=128;return(r.subarray()[0]&t)===t&&e.append(Uint8Array.from([0])),e.append(r),new Q(Uint8Array.from([2]),$u(e),e)}function cc(r){let e=Uint8Array.from([0]),t=new Q(e,r);return new Q(Uint8Array.from([3]),$u(t),t)}function t5(r){return new Q(Uint8Array.from([4]),$u(r),r)}function $r(r,e=48){let t=new Q;for(let n of r)t.append(n);return new Q(Uint8Array.from([e]),$u(t),t)}var r5="1.2.840.10045.3.1.7",n5="1.3.132.0.34",o5="1.3.132.0.35";async function s5(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 i5(r,e,t){let n=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["sign"]);t?.signal?.throwIfAborted();let o=await crypto.subtle.sign({name:"ECDSA",hash:{name:"SHA-256"}},n,e.subarray());return t?.signal?.throwIfAborted(),new Uint8Array(o,0,o.byteLength)}async function a5(r,e,t,n){let o=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["verify"]);n?.signal?.throwIfAborted();let s=await crypto.subtle.verify({name:"ECDSA",hash:{name:"SHA-256"}},o,e,t.subarray());return n?.signal?.throwIfAborted(),s}var LA=Uint8Array.from([6,8,42,134,72,206,61,3,1,7]),DA=Uint8Array.from([6,5,43,129,4,0,34]),NA=Uint8Array.from([6,5,43,129,4,0,35]),c5={ext:!0,kty:"EC",crv:"P-256"},l5={ext:!0,kty:"EC",crv:"P-384"},u5={ext:!0,kty:"EC",crv:"P-521"},wi=32,bi=48,Ei=66;function d5(r){let e=Tr(r);return b2(e)}function b2(r){let e=r[1],t=P(e,"base64url"),n=r[2][1][0],o=1,s,i;if(e.byteLength===wi)return s=P(n.subarray(o,o+wi),"base64url"),i=P(n.subarray(o+wi),"base64url"),new ps({...c5,key_ops:["sign"],d:t,x:s,y:i});if(e.byteLength===bi)return s=P(n.subarray(o,o+bi),"base64url"),i=P(n.subarray(o+bi),"base64url"),new ps({...l5,key_ops:["sign"],d:t,x:s,y:i});if(e.byteLength===Ei)return s=P(n.subarray(o,o+Ei),"base64url"),i=P(n.subarray(o+Ei),"base64url"),new ps({...u5,key_ops:["sign"],d:t,x:s,y:i});throw new A(`Private key length was wrong length, got ${e.byteLength}, expected 32, 48 or 66`)}function E2(r){let e=Tr(r);return f5(e)}function f5(r){let e=r[1][1][0],t=1,n,o;if(e.byteLength===wi*2+1)return n=P(e.subarray(t,t+wi),"base64url"),o=P(e.subarray(t+wi),"base64url"),new hs({...c5,key_ops:["verify"],x:n,y:o});if(e.byteLength===bi*2+1)return n=P(e.subarray(t,t+bi),"base64url"),o=P(e.subarray(t+bi),"base64url"),new hs({...l5,key_ops:["verify"],x:n,y:o});if(e.byteLength===Ei*2+1)return n=P(e.subarray(t,t+Ei),"base64url"),o=P(e.subarray(t+Ei),"base64url"),new hs({...u5,key_ops:["verify"],x:n,y:o});throw new A(`coordinates were wrong length, got ${e.byteLength}, expected 65, 97 or 133`)}function h5(r){return $r([zt(Uint8Array.from([1])),t5(C(r.d??"","base64url")),$r([m5(r.crv)],160),$r([cc(new Q(Uint8Array.from([4]),C(r.x??"","base64url"),C(r.y??"","base64url")))],161)]).subarray()}function p5(r){return $r([zt(Uint8Array.from([1])),$r([m5(r.crv)],160),$r([cc(new Q(Uint8Array.from([4]),C(r.x??"","base64url"),C(r.y??"","base64url")))],161)]).subarray()}function m5(r){if(r==="P-256")return LA;if(r==="P-384")return DA;if(r==="P-521")return NA;throw new A(`Invalid curve ${r}`)}async function g5(r="P-256"){let e=await s5(r);return new ps(e.privateKey)}var hs=class{type="ECDSA";jwk;_raw;constructor(e){this.jwk=e}get raw(){return this._raw==null&&(this._raw=p5(this.jwk)),this._raw}toMultihash(){return ft.digest(ht(this))}toCID(){return G.createV1(114,this.toMultihash())}toString(){return Ne.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}async verify(e,t,n){return a5(this.jwk,t,e,n)}},ps=class{type="ECDSA";jwk;publicKey;_raw;constructor(e){this.jwk=e,this.publicKey=new hs({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=h5(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}async sign(e,t){return i5(this.jwk,e,t)}};function ms(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function Nt(r,e=""){if(!Number.isSafeInteger(r)||r<0){let t=e&&`"${e}" `;throw new Error(`${t}expected integer >= 0, got ${r}`)}}function ce(r,e,t=""){let n=ms(r),o=r?.length,s=e!==void 0;if(!n||s&&o!==e){let i=t&&`"${t}" `,a=s?` of length ${e}`:"",c=n?`length=${o}`:`type=${typeof r}`;throw new Error(i+"expected Uint8Array"+a+", got "+c)}return r}function Mn(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash must wrapped by utils.createHasher");Nt(r.outputLen),Nt(r.blockLen)}function xi(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 w5(r,e){ce(r,void 0,"digestInto() output");let t=e.outputLen;if(r.length<t)throw new Error('"digestInto() output" expected to be of length >='+t)}function Ot(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function gs(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function Kr(r,e){return r<<32-e|r>>>e}function Ku(r,e){return r<<e|r>>>32-e>>>0}var b5=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",OA=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Un(r){if(ce(r),b5)return r.toHex();let e="";for(let t=0;t<r.length;t++)e+=OA[r[t]];return e}var Bn={_0:48,_9:57,A:65,F:70,a:97,f:102};function y5(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 Fn(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);if(b5)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,s=0;o<t;o++,s+=2){let i=y5(r.charCodeAt(s)),a=y5(r.charCodeAt(s+1));if(i===void 0||a===void 0){let c=r[s]+r[s+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+s)}n[o]=i*16+a}return n}var BA=async()=>{};async function E5(r,e,t){let n=Date.now();for(let o=0;o<r;o++){t(o);let s=Date.now()-n;s>=0&&s<e||(await BA(),n+=s)}}function MA(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}function x2(r,e=""){return typeof r=="string"?MA(r):ce(r,void 0,e)}function tr(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];ce(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let s=r[n];t.set(s,o),o+=s.length}return t}function x5(r,e){if(e!==void 0&&{}.toString.call(e)!=="[object Object]")throw new Error("options must be object or undefined");return Object.assign(r,e)}function lc(r,e={}){let t=(o,s)=>r(s).update(o).digest(),n=r(void 0);return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=o=>r(o),Object.assign(t,e),Object.freeze(t)}function un(r=32){let e=typeof globalThis=="object"?globalThis.crypto:null;if(typeof e?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");return e.getRandomValues(new Uint8Array(r))}var v2=r=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,r])});function Vu(r,e,t){return r&e^~r&t}function Hu(r,e,t){return r&e^r&t^e&t}var ys=class{blockLen;outputLen;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(e,t,n,o){this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.buffer=new Uint8Array(e),this.view=gs(this.buffer)}update(e){xi(this),ce(e);let{view:t,buffer:n,blockLen:o}=this,s=e.length;for(let i=0;i<s;){let a=Math.min(o-this.pos,s-i);if(a===o){let c=gs(e);for(;o<=s-i;i+=o)this.process(c,i);continue}n.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){xi(this),w5(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:s}=this,{pos:i}=this;t[i++]=128,Ot(this.buffer.subarray(i)),this.padOffset>o-i&&(this.process(n,0),i=0);for(let u=i;u<o;u++)t[u]=0;n.setBigUint64(o-8,BigInt(this.length*8),s),this.process(n,0);let a=gs(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen must be aligned to 32bit");let l=c/4,d=this.get();if(l>d.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<l;u++)a.setUint32(4*u,d[u],s)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||=new this.constructor,e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:s,destroyed:i,pos:a}=this;return e.destroyed=i,e.finished=s,e.length=o,e.pos=a,o%t&&e.buffer.set(n),e}clone(){return this._cloneInto()}},$n=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var Et=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var qu=BigInt(4294967295),v5=BigInt(32);function UA(r,e=!1){return e?{h:Number(r&qu),l:Number(r>>v5&qu)}:{h:Number(r>>v5&qu)|0,l:Number(r&qu)|0}}function S5(r,e=!1){let t=r.length,n=new Uint32Array(t),o=new Uint32Array(t);for(let s=0;s<t;s++){let{h:i,l:a}=UA(r[s],e);[n[s],o[s]]=[i,a]}return[n,o]}var S2=(r,e,t)=>r>>>t,A2=(r,e,t)=>r<<32-t|e>>>t,ws=(r,e,t)=>r>>>t|e<<32-t,bs=(r,e,t)=>r<<32-t|e>>>t,uc=(r,e,t)=>r<<64-t|e>>>t-32,dc=(r,e,t)=>r>>>t-32|e<<64-t;function dn(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var A5=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),T5=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,I5=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),_5=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,C5=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),k5=(r,e,t,n,o,s)=>e+t+n+o+s+(r/2**32|0)|0;var $A=Uint32Array.from([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]),vo=new Uint32Array(64),T2=class extends ys{constructor(e){super(64,e,8,!1)}get(){let{A:e,B:t,C:n,D:o,E:s,F:i,G:a,H:c}=this;return[e,t,n,o,s,i,a,c]}set(e,t,n,o,s,i,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=c|0}process(e,t){for(let u=0;u<16;u++,t+=4)vo[u]=e.getUint32(t,!1);for(let u=16;u<64;u++){let f=vo[u-15],h=vo[u-2],p=Kr(f,7)^Kr(f,18)^f>>>3,g=Kr(h,17)^Kr(h,19)^h>>>10;vo[u]=g+vo[u-7]+p+vo[u-16]|0}let{A:n,B:o,C:s,D:i,E:a,F:c,G:l,H:d}=this;for(let u=0;u<64;u++){let f=Kr(a,6)^Kr(a,11)^Kr(a,25),h=d+f+Vu(a,c,l)+$A[u]+vo[u]|0,g=(Kr(n,2)^Kr(n,13)^Kr(n,22))+Hu(n,o,s)|0;d=l,l=c,c=a,a=i+h|0,i=s,s=o,o=n,n=h+g|0}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,d=d+this.H|0,this.set(n,o,s,i,a,c,l,d)}roundClean(){Ot(vo)}destroy(){this.set(0,0,0,0,0,0,0,0),Ot(this.buffer)}},I2=class extends T2{A=$n[0]|0;B=$n[1]|0;C=$n[2]|0;D=$n[3]|0;E=$n[4]|0;F=$n[5]|0;G=$n[6]|0;H=$n[7]|0;constructor(){super(32)}};var R5=S5(["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))),KA=R5[0],VA=R5[1],So=new Uint32Array(80),Ao=new Uint32Array(80),_2=class extends ys{constructor(e){super(128,e,16,!1)}get(){let{Ah:e,Al:t,Bh:n,Bl:o,Ch:s,Cl:i,Dh:a,Dl:c,Eh:l,El:d,Fh:u,Fl:f,Gh:h,Gl:p,Hh:g,Hl:m}=this;return[e,t,n,o,s,i,a,c,l,d,u,f,h,p,g,m]}set(e,t,n,o,s,i,a,c,l,d,u,f,h,p,g,m){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=s|0,this.Cl=i|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=d|0,this.Fh=u|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 T=0;T<16;T++,t+=4)So[T]=e.getUint32(t),Ao[T]=e.getUint32(t+=4);for(let T=16;T<80;T++){let D=So[T-15]|0,F=Ao[T-15]|0,$=ws(D,F,1)^ws(D,F,8)^S2(D,F,7),z=bs(D,F,1)^bs(D,F,8)^A2(D,F,7),S=So[T-2]|0,x=Ao[T-2]|0,L=ws(S,x,19)^uc(S,x,61)^S2(S,x,6),M=bs(S,x,19)^dc(S,x,61)^A2(S,x,6),R=I5(z,M,Ao[T-7],Ao[T-16]),v=_5(R,$,L,So[T-7],So[T-16]);So[T]=v|0,Ao[T]=R|0}let{Ah:n,Al:o,Bh:s,Bl:i,Ch:a,Cl:c,Dh:l,Dl:d,Eh:u,El:f,Fh:h,Fl:p,Gh:g,Gl:m,Hh:w,Hl:I}=this;for(let T=0;T<80;T++){let D=ws(u,f,14)^ws(u,f,18)^uc(u,f,41),F=bs(u,f,14)^bs(u,f,18)^dc(u,f,41),$=u&h^~u&g,z=f&p^~f&m,S=C5(I,F,z,VA[T],Ao[T]),x=k5(S,w,D,$,KA[T],So[T]),L=S|0,M=ws(n,o,28)^uc(n,o,34)^uc(n,o,39),R=bs(n,o,28)^dc(n,o,34)^dc(n,o,39),v=n&s^n&a^s&a,E=o&i^o&c^i&c;w=g|0,I=m|0,g=h|0,m=p|0,h=u|0,p=f|0,{h:u,l:f}=dn(l|0,d|0,x|0,L|0),l=a|0,d=c|0,a=s|0,c=i|0,s=n|0,i=o|0;let b=A5(L,R,E);n=T5(b,x,M,v),o=b|0}({h:n,l:o}=dn(this.Ah|0,this.Al|0,n|0,o|0)),{h:s,l:i}=dn(this.Bh|0,this.Bl|0,s|0,i|0),{h:a,l:c}=dn(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:d}=dn(this.Dh|0,this.Dl|0,l|0,d|0),{h:u,l:f}=dn(this.Eh|0,this.El|0,u|0,f|0),{h,l:p}=dn(this.Fh|0,this.Fl|0,h|0,p|0),{h:g,l:m}=dn(this.Gh|0,this.Gl|0,g|0,m|0),{h:w,l:I}=dn(this.Hh|0,this.Hl|0,w|0,I|0),this.set(n,o,s,i,a,c,l,d,u,f,h,p,g,m,w,I)}roundClean(){Ot(So,Ao)}destroy(){Ot(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}},C2=class extends _2{Ah=Et[0]|0;Al=Et[1]|0;Bh=Et[2]|0;Bl=Et[3]|0;Ch=Et[4]|0;Cl=Et[5]|0;Dh=Et[6]|0;Dl=Et[7]|0;Eh=Et[8]|0;El=Et[9]|0;Fh=Et[10]|0;Fl=Et[11]|0;Gh=Et[12]|0;Gl=Et[13]|0;Hh=Et[14]|0;Hl=Et[15]|0;constructor(){super(64)}};var Ir=lc(()=>new I2,v2(1));var To=lc(()=>new C2,v2(3));var R2=BigInt(0),k2=BigInt(1);function Kn(r,e=""){if(typeof r!="boolean"){let t=e&&`"${e}" `;throw new Error(t+"expected boolean, got type="+typeof r)}return r}function P5(r){if(typeof r=="bigint"){if(!Wu(r))throw new Error("positive bigint expected, got "+r)}else Nt(r);return r}function fc(r){let e=P5(r).toString(16);return e.length&1?"0"+e:e}function L5(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return r===""?R2:BigInt("0x"+r)}function vi(r){return L5(Un(r))}function fn(r){return L5(Un(Es(ce(r)).reverse()))}function zu(r,e){Nt(e),r=P5(r);let t=Fn(r.toString(16).padStart(e*2,"0"));if(t.length!==e)throw new Error("number too large");return t}function hc(r,e){return zu(r,e).reverse()}function Es(r){return Uint8Array.from(r)}var Wu=r=>typeof r=="bigint"&&R2<=r;function HA(r,e,t){return Wu(r)&&Wu(e)&&Wu(t)&&e<=r&&r<t}function Io(r,e,t,n){if(!HA(e,t,n))throw new Error("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function P2(r){let e;for(e=0;r>R2;r>>=k2,e+=1);return e}var pc=r=>(k2<<BigInt(r))-k2;function D5(r,e,t){if(Nt(r,"hashLen"),Nt(e,"qByteLen"),typeof t!="function")throw new Error("hmacFn must be a function");let n=m=>new Uint8Array(m),o=Uint8Array.of(),s=Uint8Array.of(0),i=Uint8Array.of(1),a=1e3,c=n(r),l=n(r),d=0,u=()=>{c.fill(1),l.fill(0),d=0},f=(...m)=>t(l,tr(c,...m)),h=(m=o)=>{l=f(s,m),c=f(),m.length!==0&&(l=f(i,m),c=f())},p=()=>{if(d++>=a)throw new Error("drbg: tried max amount of iterations");let m=0,w=[];for(;m<e;){c=f();let I=c.slice();w.push(I),m+=c.length}return tr(...w)};return(m,w)=>{u(),h(m);let I;for(;!(I=w(p()));)h();return u(),I}}function hn(r,e={},t={}){if(!r||typeof r!="object")throw new Error("expected valid options object");function n(s,i,a){let c=r[s];if(a&&c===void 0)return;let l=typeof c;if(l!==i||c===null)throw new Error(`param "${s}" is invalid: expected ${i}, got ${l}`)}let o=(s,i)=>Object.entries(s).forEach(([a,c])=>n(a,c,i));o(e,!1),o(t,!0)}function Si(r){let e=new WeakMap;return(t,...n)=>{let o=e.get(t);if(o!==void 0)return o;let s=r(t,...n);return e.set(t,s),s}}var Gt=BigInt(0),pt=BigInt(1),xs=BigInt(2),B5=BigInt(3),M5=BigInt(4),U5=BigInt(5),qA=BigInt(7),F5=BigInt(8),WA=BigInt(9),$5=BigInt(16);function We(r,e){let t=r%e;return t>=Gt?t:e+t}function Ke(r,e,t){let n=r;for(;e-- >Gt;)n*=n,n%=t;return n}function N5(r,e){if(r===Gt)throw new Error("invert: expected non-zero number");if(e<=Gt)throw new Error("invert: expected positive modulus, got "+e);let t=We(r,e),n=e,o=Gt,s=pt,i=pt,a=Gt;for(;t!==Gt;){let l=n/t,d=n%t,u=o-i*l,f=s-a*l;n=t,t=d,o=i,s=a,i=u,a=f}if(n!==pt)throw new Error("invert: does not exist");return We(o,e)}function D2(r,e,t){if(!r.eql(r.sqr(e),t))throw new Error("Cannot find square root")}function K5(r,e){let t=(r.ORDER+pt)/M5,n=r.pow(e,t);return D2(r,n,e),n}function zA(r,e){let t=(r.ORDER-U5)/F5,n=r.mul(e,xs),o=r.pow(n,t),s=r.mul(e,o),i=r.mul(r.mul(s,xs),o),a=r.mul(s,r.sub(i,r.ONE));return D2(r,a,e),a}function GA(r){let e=Ai(r),t=V5(r),n=t(e,e.neg(e.ONE)),o=t(e,n),s=t(e,e.neg(n)),i=(r+qA)/$5;return(a,c)=>{let l=a.pow(c,i),d=a.mul(l,n),u=a.mul(l,o),f=a.mul(l,s),h=a.eql(a.sqr(d),c),p=a.eql(a.sqr(u),c);l=a.cmov(l,d,h),d=a.cmov(f,u,p);let g=a.eql(a.sqr(d),c),m=a.cmov(l,d,g);return D2(a,m,c),m}}function V5(r){if(r<B5)throw new Error("sqrt is not defined for small field");let e=r-pt,t=0;for(;e%xs===Gt;)e/=xs,t++;let n=xs,o=Ai(r);for(;O5(o,n)===1;)if(n++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(t===1)return K5;let s=o.pow(n,e),i=(e+pt)/xs;return function(c,l){if(c.is0(l))return l;if(O5(c,l)!==1)throw new Error("Cannot find square root");let d=t,u=c.mul(c.ONE,s),f=c.pow(l,e),h=c.pow(l,i);for(;!c.eql(f,c.ONE);){if(c.is0(f))return c.ZERO;let p=1,g=c.sqr(f);for(;!c.eql(g,c.ONE);)if(p++,g=c.sqr(g),p===d)throw new Error("Cannot find square root");let m=pt<<BigInt(d-p-1),w=c.pow(u,m);d=p,u=c.sqr(w),f=c.mul(f,u),h=c.mul(h,w)}return h}}function YA(r){return r%M5===B5?K5:r%F5===U5?zA:r%$5===WA?GA(r):V5(r)}var H5=(r,e)=>(We(r,e)&pt)===pt,XA=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function N2(r){let e={ORDER:"bigint",BYTES:"number",BITS:"number"},t=XA.reduce((n,o)=>(n[o]="function",n),e);return hn(r,t),r}function QA(r,e,t){if(t<Gt)throw new Error("invalid exponent, negatives unsupported");if(t===Gt)return r.ONE;if(t===pt)return e;let n=r.ONE,o=e;for(;t>Gt;)t&pt&&(n=r.mul(n,o)),o=r.sqr(o),t>>=pt;return n}function mc(r,e,t=!1){let n=new Array(e.length).fill(t?r.ZERO:void 0),o=e.reduce((i,a,c)=>r.is0(a)?i:(n[c]=i,r.mul(i,a)),r.ONE),s=r.inv(o);return e.reduceRight((i,a,c)=>r.is0(a)?i:(n[c]=r.mul(i,n[c]),r.mul(i,a)),s),n}function O5(r,e){let t=(r.ORDER-pt)/xs,n=r.pow(e,t),o=r.eql(n,r.ONE),s=r.eql(n,r.ZERO),i=r.eql(n,r.neg(r.ONE));if(!o&&!s&&!i)throw new Error("invalid Legendre symbol result");return o?1:s?0:-1}function jA(r,e){e!==void 0&&Nt(e);let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}var L2=class{ORDER;BITS;BYTES;isLE;ZERO=Gt;ONE=pt;_lengths;_sqrt;_mod;constructor(e,t={}){if(e<=Gt)throw new Error("invalid field: expected ORDER > 0, got "+e);let n;this.isLE=!1,t!=null&&typeof t=="object"&&(typeof t.BITS=="number"&&(n=t.BITS),typeof t.sqrt=="function"&&(this.sqrt=t.sqrt),typeof t.isLE=="boolean"&&(this.isLE=t.isLE),t.allowedLengths&&(this._lengths=t.allowedLengths?.slice()),typeof t.modFromBytes=="boolean"&&(this._mod=t.modFromBytes));let{nBitLength:o,nByteLength:s}=jA(e,n);if(s>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");this.ORDER=e,this.BITS=o,this.BYTES=s,this._sqrt=void 0,Object.preventExtensions(this)}create(e){return We(e,this.ORDER)}isValid(e){if(typeof e!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof e);return Gt<=e&&e<this.ORDER}is0(e){return e===Gt}isValidNot0(e){return!this.is0(e)&&this.isValid(e)}isOdd(e){return(e&pt)===pt}neg(e){return We(-e,this.ORDER)}eql(e,t){return e===t}sqr(e){return We(e*e,this.ORDER)}add(e,t){return We(e+t,this.ORDER)}sub(e,t){return We(e-t,this.ORDER)}mul(e,t){return We(e*t,this.ORDER)}pow(e,t){return QA(this,e,t)}div(e,t){return We(e*N5(t,this.ORDER),this.ORDER)}sqrN(e){return e*e}addN(e,t){return e+t}subN(e,t){return e-t}mulN(e,t){return e*t}inv(e){return N5(e,this.ORDER)}sqrt(e){return this._sqrt||(this._sqrt=YA(this.ORDER)),this._sqrt(this,e)}toBytes(e){return this.isLE?hc(e,this.BYTES):zu(e,this.BYTES)}fromBytes(e,t=!1){ce(e);let{_lengths:n,BYTES:o,isLE:s,ORDER:i,_mod:a}=this;if(n){if(!n.includes(e.length)||e.length>o)throw new Error("Field.fromBytes: expected "+n+" bytes, got "+e.length);let l=new Uint8Array(o);l.set(e,s?0:l.length-e.length),e=l}if(e.length!==o)throw new Error("Field.fromBytes: expected "+o+" bytes, got "+e.length);let c=s?fn(e):vi(e);if(a&&(c=We(c,i)),!t&&!this.isValid(c))throw new Error("invalid field element: outside of range 0..ORDER");return c}invertBatch(e){return mc(this,e)}cmov(e,t,n){return n?t:e}};function Ai(r,e={}){return new L2(r,e)}function q5(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 O2(r){let e=q5(r);return e+Math.ceil(e/2)}function B2(r,e,t=!1){ce(r);let n=r.length,o=q5(e),s=O2(e);if(n<16||n<s||n>1024)throw new Error("expected "+s+"-1024 bytes of input, got "+n);let i=t?fn(r):vi(r),a=We(i,e-pt)+pt;return t?hc(a,o):zu(a,o)}var Ti=BigInt(0),vs=BigInt(1);function gc(r,e){let t=e.negate();return r?t:e}function Ss(r,e){let t=mc(r.Fp,e.map(n=>n.Z));return e.map((n,o)=>r.fromAffine(n.toAffine(t[o])))}function Y5(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){Y5(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1),o=2**r,s=pc(r),i=BigInt(r);return{windows:t,windowSize:n,mask:s,maxNumber:o,shiftBy:i}}function W5(r,e,t){let{windowSize:n,mask:o,maxNumber:s,shiftBy:i}=t,a=Number(r&o),c=r>>i;a>n&&(a-=s,c+=vs);let l=e*n,d=l+Math.abs(a)-1,u=a===0,f=a<0,h=e%2!==0;return{nextN:c,offset:d,isZero:u,isNeg:f,isNegF:h,offsetF:l}}var U2=new WeakMap,X5=new WeakMap;function F2(r){return X5.get(r)||1}function z5(r){if(r!==Ti)throw new Error("invalid wNAF")}var Ii=class{BASE;ZERO;Fn;bits;constructor(e,t){this.BASE=e.BASE,this.ZERO=e.ZERO,this.Fn=e.Fn,this.bits=t}_unsafeLadder(e,t,n=this.ZERO){let o=e;for(;t>Ti;)t&vs&&(n=n.add(o)),o=o.double(),t>>=vs;return n}precomputeWindow(e,t){let{windows:n,windowSize:o}=M2(t,this.bits),s=[],i=e,a=i;for(let c=0;c<n;c++){a=i,s.push(a);for(let l=1;l<o;l++)a=a.add(i),s.push(a);i=a.double()}return s}wNAF(e,t,n){if(!this.Fn.isValid(n))throw new Error("invalid scalar");let o=this.ZERO,s=this.BASE,i=M2(e,this.bits);for(let a=0;a<i.windows;a++){let{nextN:c,offset:l,isZero:d,isNeg:u,isNegF:f,offsetF:h}=W5(n,a,i);n=c,d?s=s.add(gc(f,t[h])):o=o.add(gc(u,t[l]))}return z5(n),{p:o,f:s}}wNAFUnsafe(e,t,n,o=this.ZERO){let s=M2(e,this.bits);for(let i=0;i<s.windows&&n!==Ti;i++){let{nextN:a,offset:c,isZero:l,isNeg:d}=W5(n,i,s);if(n=a,!l){let u=t[c];o=o.add(d?u.negate():u)}}return z5(n),o}getPrecomputes(e,t,n){let o=U2.get(t);return o||(o=this.precomputeWindow(t,e),e!==1&&(typeof n=="function"&&(o=n(o)),U2.set(t,o))),o}cached(e,t,n){let o=F2(e);return this.wNAF(o,this.getPrecomputes(o,e,n),t)}unsafe(e,t,n,o){let s=F2(e);return s===1?this._unsafeLadder(e,t,o):this.wNAFUnsafe(s,this.getPrecomputes(s,e,n),t,o)}createCache(e,t){Y5(t,this.bits),X5.set(e,t),U2.delete(e)}hasCache(e){return F2(e)!==1}};function Q5(r,e,t,n){let o=e,s=r.ZERO,i=r.ZERO;for(;t>Ti||n>Ti;)t&vs&&(s=s.add(o)),n&vs&&(i=i.add(o)),o=o.double(),t>>=vs,n>>=vs;return{p1:s,p2:i}}function G5(r,e,t){if(e){if(e.ORDER!==r)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return N2(e),e}else return Ai(r,{isLE:t})}function Gu(r,e,t={},n){if(n===void 0&&(n=r==="edwards"),!e||typeof e!="object")throw new Error(`expected valid ${r} CURVE object`);for(let c of["p","n","h"]){let l=e[c];if(!(typeof l=="bigint"&&l>Ti))throw new Error(`CURVE.${c} must be positive bigint`)}let o=G5(e.p,t.Fp,n),s=G5(e.n,t.Fn,n),a=["Gx","Gy","a",r==="weierstrass"?"b":"d"];for(let c of a)if(!o.isValid(e[c]))throw new Error(`CURVE.${c} must be valid field element of CURVE.Fp`);return e=Object.freeze(Object.assign({},e)),{CURVE:e,Fp:o,Fn:s}}function _i(r,e){return function(n){let o=r(n);return{secretKey:o,publicKey:e(o)}}}var _o=BigInt(0),mt=BigInt(1),$2=BigInt(2),ZA=BigInt(8);function JA(r,e,t,n){let o=r.sqr(t),s=r.sqr(n),i=r.add(r.mul(e.a,o),s),a=r.add(r.ONE,r.mul(e.d,r.mul(o,s)));return r.eql(i,a)}function j5(r,e={}){let t=Gu("edwards",r,e,e.FpFnLE),{Fp:n,Fn:o}=t,s=t.CURVE,{h:i}=s;hn(e,{},{uvRatio:"function"});let a=$2<<BigInt(o.BYTES*8)-mt,c=m=>n.create(m),l=e.uvRatio||((m,w)=>{try{return{isValid:!0,value:n.sqrt(n.div(m,w))}}catch{return{isValid:!1,value:_o}}});if(!JA(n,s,s.Gx,s.Gy))throw new Error("bad curve params: generator point");function d(m,w,I=!1){let T=I?mt:_o;return Io("coordinate "+m,w,T,a),w}function u(m){if(!(m instanceof p))throw new Error("EdwardsPoint expected")}let f=Si((m,w)=>{let{X:I,Y:T,Z:D}=m,F=m.is0();w==null&&(w=F?ZA:n.inv(D));let $=c(I*w),z=c(T*w),S=n.mul(D,w);if(F)return{x:_o,y:mt};if(S!==mt)throw new Error("invZ was invalid");return{x:$,y:z}}),h=Si(m=>{let{a:w,d:I}=s;if(m.is0())throw new Error("bad point: ZERO");let{X:T,Y:D,Z:F,T:$}=m,z=c(T*T),S=c(D*D),x=c(F*F),L=c(x*x),M=c(z*w),R=c(x*c(M+S)),v=c(L+c(I*c(z*S)));if(R!==v)throw new Error("bad point: equation left != right (1)");let E=c(T*D),b=c(F*$);if(E!==b)throw new Error("bad point: equation left != right (2)");return!0});class p{static BASE=new p(s.Gx,s.Gy,mt,c(s.Gx*s.Gy));static ZERO=new p(_o,mt,mt,_o);static Fp=n;static Fn=o;X;Y;Z;T;constructor(w,I,T,D){this.X=d("x",w),this.Y=d("y",I),this.Z=d("z",T,!0),this.T=d("t",D),Object.freeze(this)}static CURVE(){return s}static fromAffine(w){if(w instanceof p)throw new Error("extended point not allowed");let{x:I,y:T}=w||{};return d("x",I),d("y",T),new p(I,T,mt,c(I*T))}static fromBytes(w,I=!1){let T=n.BYTES,{a:D,d:F}=s;w=Es(ce(w,T,"point")),Kn(I,"zip215");let $=Es(w),z=w[T-1];$[T-1]=z&-129;let S=fn($),x=I?a:n.ORDER;Io("point.y",S,_o,x);let L=c(S*S),M=c(L-mt),R=c(F*L-D),{isValid:v,value:E}=l(M,R);if(!v)throw new Error("bad point: invalid y coordinate");let b=(E&mt)===mt,_=(z&128)!==0;if(!I&&E===_o&&_)throw new Error("bad point: x=0 and x_0=1");return _!==b&&(E=c(-E)),p.fromAffine({x:E,y:S})}static fromHex(w,I=!1){return p.fromBytes(Fn(w),I)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(w=8,I=!0){return g.createCache(this,w),I||this.multiply($2),this}assertValidity(){h(this)}equals(w){u(w);let{X:I,Y:T,Z:D}=this,{X:F,Y:$,Z:z}=w,S=c(I*z),x=c(F*D),L=c(T*z),M=c($*D);return S===x&&L===M}is0(){return this.equals(p.ZERO)}negate(){return new p(c(-this.X),this.Y,this.Z,c(-this.T))}double(){let{a:w}=s,{X:I,Y:T,Z:D}=this,F=c(I*I),$=c(T*T),z=c($2*c(D*D)),S=c(w*F),x=I+T,L=c(c(x*x)-F-$),M=S+$,R=M-z,v=S-$,E=c(L*R),b=c(M*v),_=c(L*v),B=c(R*M);return new p(E,b,B,_)}add(w){u(w);let{a:I,d:T}=s,{X:D,Y:F,Z:$,T:z}=this,{X:S,Y:x,Z:L,T:M}=w,R=c(D*S),v=c(F*x),E=c(z*T*M),b=c($*L),_=c((D+F)*(S+x)-R-v),B=b-E,O=b+E,k=c(v-I*R),U=c(_*B),K=c(O*k),W=c(_*k),we=c(B*O);return new p(U,K,we,W)}subtract(w){return this.add(w.negate())}multiply(w){if(!o.isValidNot0(w))throw new Error("invalid scalar: expected 1 <= sc < curve.n");let{p:I,f:T}=g.cached(this,w,D=>Ss(p,D));return Ss(p,[I,T])[0]}multiplyUnsafe(w,I=p.ZERO){if(!o.isValid(w))throw new Error("invalid scalar: expected 0 <= sc < curve.n");return w===_o?p.ZERO:this.is0()||w===mt?this:g.unsafe(this,w,T=>Ss(p,T),I)}isSmallOrder(){return this.multiplyUnsafe(i).is0()}isTorsionFree(){return g.unsafe(this,s.n).is0()}toAffine(w){return f(this,w)}clearCofactor(){return i===mt?this:this.multiplyUnsafe(i)}toBytes(){let{x:w,y:I}=this.toAffine(),T=n.toBytes(I);return T[T.length-1]|=w&mt?128:0,T}toHex(){return Un(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let g=new Ii(p,o.BITS);return p.BASE.precompute(8),p}function Z5(r,e,t={}){if(typeof e!="function")throw new Error('"hash" function param is required');hn(t,{},{adjustScalarBytes:"function",randomBytes:"function",domain:"function",prehash:"function",mapToCurve:"function"});let{prehash:n}=t,{BASE:o,Fp:s,Fn:i}=r,a=t.randomBytes||un,c=t.adjustScalarBytes||(S=>S),l=t.domain||((S,x,L)=>{if(Kn(L,"phflag"),x.length||L)throw new Error("Contexts/pre-hash are not supported");return S});function d(S){return i.create(fn(S))}function u(S){let x=T.secretKey;ce(S,T.secretKey,"secretKey");let L=ce(e(S),2*x,"hashedSecretKey"),M=c(L.slice(0,x)),R=L.slice(x,2*x),v=d(M);return{head:M,prefix:R,scalar:v}}function f(S){let{head:x,prefix:L,scalar:M}=u(S),R=o.multiply(M),v=R.toBytes();return{head:x,prefix:L,scalar:M,point:R,pointBytes:v}}function h(S){return f(S).pointBytes}function p(S=Uint8Array.of(),...x){let L=tr(...x);return d(e(l(L,ce(S,void 0,"context"),!!n)))}function g(S,x,L={}){S=ce(S,void 0,"message"),n&&(S=n(S));let{prefix:M,scalar:R,pointBytes:v}=f(x),E=p(L.context,M,S),b=o.multiply(E).toBytes(),_=p(L.context,b,v,S),B=i.create(E+_*R);if(!i.isValid(B))throw new Error("sign failed: invalid s");let O=tr(b,i.toBytes(B));return ce(O,T.signature,"result")}let m={zip215:!0};function w(S,x,L,M=m){let{context:R,zip215:v}=M,E=T.signature;S=ce(S,E,"signature"),x=ce(x,void 0,"message"),L=ce(L,T.publicKey,"publicKey"),v!==void 0&&Kn(v,"zip215"),n&&(x=n(x));let b=E/2,_=S.subarray(0,b),B=fn(S.subarray(b,E)),O,k,U;try{O=r.fromBytes(L,v),k=r.fromBytes(_,v),U=o.multiplyUnsafe(B)}catch{return!1}if(!v&&O.isSmallOrder())return!1;let K=p(R,k.toBytes(),O.toBytes(),x);return k.add(O.multiplyUnsafe(K)).subtract(U).clearCofactor().is0()}let I=s.BYTES,T={secretKey:I,publicKey:I,signature:2*I,seed:I};function D(S=a(T.seed)){return ce(S,T.seed,"seed")}function F(S){return ms(S)&&S.length===i.BYTES}function $(S,x){try{return!!r.fromBytes(S,x)}catch{return!1}}let z={getExtendedPublicKey:f,randomSecretKey:D,isValidSecretKey:F,isValidPublicKey:$,toMontgomery(S){let{y:x}=r.fromBytes(S),L=T.publicKey,M=L===32;if(!M&&L!==57)throw new Error("only defined for 25519 and 448");let R=M?s.div(mt+x,mt-x):s.div(x-mt,x+mt);return s.toBytes(R)},toMontgomerySecret(S){let x=T.secretKey;ce(S,x);let L=e(S.subarray(0,x));return c(L).subarray(0,x)}};return Object.freeze({keygen:_i(D,h),getPublicKey:h,sign:g,verify:w,utils:z,Point:r,lengths:T})}var yc=BigInt(0),Ci=BigInt(1),Yu=BigInt(2);function eT(r){return hn(r,{adjustScalarBytes:"function",powPminus2:"function"}),Object.freeze({...r})}function J5(r){let e=eT(r),{P:t,type:n,adjustScalarBytes:o,powPminus2:s,randomBytes:i}=e,a=n==="x25519";if(!a&&n!=="x448")throw new Error("invalid type");let c=i||un,l=a?255:448,d=a?32:56,u=BigInt(a?9:5),f=BigInt(a?121665:39081),h=a?Yu**BigInt(254):Yu**BigInt(447),p=a?BigInt(8)*Yu**BigInt(251)-Ci:BigInt(4)*Yu**BigInt(445)-Ci,g=h+p+Ci,m=E=>We(E,t),w=I(u);function I(E){return hc(m(E),d)}function T(E){let b=Es(ce(E,d,"uCoordinate"));return a&&(b[31]&=127),m(fn(b))}function D(E){return fn(o(Es(ce(E,d,"scalar"))))}function F(E,b){let _=L(T(b),D(E));if(_===yc)throw new Error("invalid private or public key received");return I(_)}function $(E){return F(E,w)}let z=$,S=F;function x(E,b,_){let B=m(E*(b-_));return b=m(b-B),_=m(_+B),{x_2:b,x_3:_}}function L(E,b){Io("u",E,yc,t),Io("scalar",b,h,g);let _=b,B=E,O=Ci,k=yc,U=E,K=Ci,W=yc;for(let pe=BigInt(l-1);pe>=yc;pe--){let ue=_>>pe&Ci;W^=ue,{x_2:O,x_3:U}=x(W,O,U),{x_2:k,x_3:K}=x(W,k,K),W=ue;let be=O+k,Le=m(be*be),et=O-k,Ee=m(et*et),at=Le-Ee,ci=U+K,wu=U-K,Ha=m(wu*be),b6=m(ci*et),E6=Ha+b6,x6=Ha-b6;U=m(E6*E6),K=m(B*m(x6*x6)),O=m(Le*Ee),k=m(at*(Le+m(f*at)))}({x_2:O,x_3:U}=x(W,O,U)),{x_2:k,x_3:K}=x(W,k,K);let we=s(k);return m(O*we)}let M={secretKey:d,publicKey:d,seed:d},R=(E=c(d))=>(ce(E,M.seed,"seed"),E),v={randomSecretKey:R};return Object.freeze({keygen:_i(R,z),getSharedSecret:S,getPublicKey:z,scalarMult:F,scalarMultBase:$,utils:v,GuBytes:w.slice(),lengths:M})}var tT=BigInt(1),e8=BigInt(2),rT=BigInt(3),nT=BigInt(5),oT=BigInt(8),Xu=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),sT={p:Xu,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:oT,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function r8(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),s=Xu,a=r*r%s*r%s,c=Ke(a,e8,s)*a%s,l=Ke(c,tT,s)*r%s,d=Ke(l,nT,s)*l%s,u=Ke(d,e,s)*d%s,f=Ke(u,t,s)*u%s,h=Ke(f,n,s)*f%s,p=Ke(h,o,s)*h%s,g=Ke(p,o,s)*h%s,m=Ke(g,e,s)*d%s;return{pow_p_5_8:Ke(m,e8,s)*r%s,b2:a}}function n8(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}var t8=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function iT(r,e){let t=Xu,n=We(e*e*e,t),o=We(n*n*e,t),s=r8(r*o).pow_p_5_8,i=We(r*n*s,t),a=We(e*i*i,t),c=i,l=We(i*t8,t),d=a===r,u=a===We(-r,t),f=a===We(-r*t8,t);return d&&(i=c),(u||f)&&(i=l),H5(i,t)&&(i=We(-i,t)),{isValid:d||u,value:i}}var aT=j5(sT,{uvRatio:iT});function cT(r){return Z5(aT,To,Object.assign({adjustScalarBytes:n8},r))}var wc=cT({});var bc=(()=>{let r=Xu;return J5({P:r,type:"x25519",powPminus2:e=>{let{pow_p_5_8:t,b2:n}=r8(e);return We(Ke(t,rT,r)*n,r)},adjustScalarBytes:n8})})();var As=32,fr=64,K2=32;var ki,o8=(async()=>{try{return await ot.get().subtle.generateKey({name:"Ed25519"},!0,["sign","verify"]),!0}catch{return!1}})();function s8(){let r=wc.utils.randomSecretKey(),e=wc.getPublicKey(r);return{privateKey:hT(r,e),publicKey:e}}async function lT(r,e){let t;r.length===fr?t=r.subarray(0,32):t=r;let n={crv:"Ed25519",kty:"OKP",x:P(r.subarray(32),"base64url"),d:P(t,"base64url"),ext:!0,key_ops:["sign"]},o=await ot.get().subtle.importKey("jwk",n,{name:"Ed25519"},!0,["sign"]),s=await ot.get().subtle.sign({name:"Ed25519"},o,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(s,0,s.byteLength)}function uT(r,e){let t=r.subarray(0,K2);return wc.sign(e instanceof Uint8Array?e:e.subarray(),t)}async function i8(r,e){return ki==null&&(ki=await o8),ki?lT(r,e):uT(r,e)}async function dT(r,e,t){if(r.buffer instanceof ArrayBuffer){let n=await ot.get().subtle.importKey("raw",r.buffer,{name:"Ed25519"},!1,["verify"]);return await ot.get().subtle.verify({name:"Ed25519"},n,e,t instanceof Uint8Array?t:t.subarray())}throw new TypeError("WebCrypto does not support SharedArrayBuffer for Ed25519 keys")}function fT(r,e,t){return wc.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}async function a8(r,e,t){return ki==null&&(ki=await o8),ki?dT(r,e,t):fT(r,e,t)}function hT(r,e){let t=new Uint8Array(fr);for(let n=0;n<K2;n++)t[n]=r[n],t[K2+n]=e[n];return t}function Ri(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Ec=class{type="Ed25519";raw;constructor(e){this.raw=Li(e,As)}toMultihash(){return ft.digest(ht(this))}toCID(){return G.createV1(114,this.toMultihash())}toString(){return Ne.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}verify(e,t,n){n?.signal?.throwIfAborted();let o=a8(this.raw,t,e);return Ri(o)?o.then(s=>(n?.signal?.throwIfAborted(),s)):o}},Pi=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=Li(e,fr),this.publicKey=new Ec(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}sign(e,t){t?.signal?.throwIfAborted();let n=i8(this.raw,e);return Ri(n)?n.then(o=>(t?.signal?.throwIfAborted(),o)):(t?.signal?.throwIfAborted(),n)}};function V2(r){if(r.length>fr){r=Li(r,fr+As);let n=r.subarray(0,fr),o=r.subarray(fr,r.length);return new Pi(n,o)}r=Li(r,fr);let e=r.subarray(0,fr),t=r.subarray(As);return new Pi(e,t)}function H2(r){return r=Li(r,As),new Ec(r)}async function l8(){let{privateKey:r,publicKey:e}=s8();return new Pi(r,e)}function Li(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new A(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var pT=Math.pow(2,7),mT=Math.pow(2,14),gT=Math.pow(2,21),q2=Math.pow(2,28),W2=Math.pow(2,35),z2=Math.pow(2,42),G2=Math.pow(2,49),_e=128,Bt=127;function he(r){if(r<pT)return 1;if(r<mT)return 2;if(r<gT)return 3;if(r<q2)return 4;if(r<W2)return 5;if(r<z2)return 6;if(r<G2)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Di(r,e,t=0){switch(he(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 yT(r,e,t=0){switch(he(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 Y2(r,e){let t=r[e],n=0;if(n+=t&Bt,t<_e||(t=r[e+1],n+=(t&Bt)<<7,t<_e)||(t=r[e+2],n+=(t&Bt)<<14,t<_e)||(t=r[e+3],n+=(t&Bt)<<21,t<_e)||(t=r[e+4],n+=(t&Bt)*q2,t<_e)||(t=r[e+5],n+=(t&Bt)*W2,t<_e)||(t=r[e+6],n+=(t&Bt)*z2,t<_e)||(t=r[e+7],n+=(t&Bt)*G2,t<_e))return n;throw new RangeError("Could not decode varint")}function wT(r,e){let t=r.get(e),n=0;if(n+=t&Bt,t<_e||(t=r.get(e+1),n+=(t&Bt)<<7,t<_e)||(t=r.get(e+2),n+=(t&Bt)<<14,t<_e)||(t=r.get(e+3),n+=(t&Bt)<<21,t<_e)||(t=r.get(e+4),n+=(t&Bt)*q2,t<_e)||(t=r.get(e+5),n+=(t&Bt)*W2,t<_e)||(t=r.get(e+6),n+=(t&Bt)*z2,t<_e)||(t=r.get(e+7),n+=(t&Bt)*G2,t<_e))return n;throw new RangeError("Could not decode varint")}function Mt(r,e,t=0){return e==null&&(e=Ye(he(r))),e instanceof Uint8Array?Di(r,e,t):yT(r,e,t)}function hr(r,e=0){return r instanceof Uint8Array?Y2(r,e):wT(r,e)}var X2=new Float32Array([-0]),Co=new Uint8Array(X2.buffer);function u8(r,e,t){X2[0]=r,e[t]=Co[0],e[t+1]=Co[1],e[t+2]=Co[2],e[t+3]=Co[3]}function d8(r,e){return Co[0]=r[e],Co[1]=r[e+1],Co[2]=r[e+2],Co[3]=r[e+3],X2[0]}var Q2=new Float64Array([-0]),Ut=new Uint8Array(Q2.buffer);function f8(r,e,t){Q2[0]=r,e[t]=Ut[0],e[t+1]=Ut[1],e[t+2]=Ut[2],e[t+3]=Ut[3],e[t+4]=Ut[4],e[t+5]=Ut[5],e[t+6]=Ut[6],e[t+7]=Ut[7]}function h8(r,e){return Ut[0]=r[e],Ut[1]=r[e+1],Ut[2]=r[e+2],Ut[3]=r[e+3],Ut[4]=r[e+4],Ut[5]=r[e+5],Ut[6]=r[e+6],Ut[7]=r[e+7],Q2[0]}var bT=BigInt(Number.MAX_SAFE_INTEGER),ET=BigInt(Number.MIN_SAFE_INTEGER),pr=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 Ts;if(e<bT&&e>ET)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>p8&&(o=0n,++n>p8&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return Ts;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):Ts}},Ts=new pr(0,0);Ts.toBigInt=function(){return 0n};Ts.zzEncode=Ts.zzDecode=function(){return this};Ts.length=function(){return 1};var p8=4294967296n;function m8(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 g8(r,e,t){if(t-e<1)return"";let o,s=[],i=0,a;for(;e<t;)a=r[e++],a<128?s[i++]=a:a>191&&a<224?s[i++]=(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,s[i++]=55296+(a>>10),s[i++]=56320+(a&1023)):s[i++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,i>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,s)),i=0);return o!=null?(i>0&&o.push(String.fromCharCode.apply(String,s.slice(0,i))),o.join("")):String.fromCharCode.apply(String,s.slice(0,i))}function j2(r,e,t){let n=t,o,s;for(let i=0;i<r.length;++i)o=r.charCodeAt(i),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((s=r.charCodeAt(i+1))&64512)===56320?(o=65536+((o&1023)<<10)+(s&1023),++i,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 Vr(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Qu(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var Z2=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,Vr(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 Vr(this,4);return Qu(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Vr(this,4);return Qu(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Vr(this,4);let e=d8(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Vr(this,4);let e=h8(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 Vr(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return g8(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Vr(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Vr(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 pr(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 Vr(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 Vr(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 Vr(this,8);let e=Qu(this.buf,this.pos+=4),t=Qu(this.buf,this.pos+=4);return new pr(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=Y2(this.buf,this.pos);return this.pos+=he(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 J2(r){return new Z2(r instanceof Uint8Array?r:r.subarray())}function te(r,e,t){let n=J2(r);return e.decode(n,void 0,t)}function em(r){let e=r??8192,t=e>>>1,n,o=e;return function(i){if(i<1||i>t)return Ye(i);o+i>e&&(n=Ye(e),o=0);let a=n.subarray(o,o+=i);return(o&7)!==0&&(o=(o|7)+1),a}}var Is=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function tm(){}var nm=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},xT=em();function vT(r){return globalThis.Buffer!=null?Ye(r):xT(r)}var vc=class{len;head;tail;states;constructor(){this.len=0,this.head=new Is(tm,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new Is(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new om((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(ju,10,pr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=pr.fromBigInt(e);return this._push(ju,t.length(),t)}uint64Number(e){return this._push(Di,he(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=pr.fromBigInt(e).zzEncode();return this._push(ju,t.length(),t)}sint64Number(e){let t=pr.fromNumber(e).zzEncode();return this._push(ju,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(rm,1,e?1:0)}fixed32(e){return this._push(xc,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=pr.fromBigInt(e);return this._push(xc,4,t.lo)._push(xc,4,t.hi)}fixed64Number(e){let t=pr.fromNumber(e);return this._push(xc,4,t.lo)._push(xc,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(u8,4,e)}double(e){return this._push(f8,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(rm,1,0):this.uint32(t)._push(AT,t,e)}string(e){let t=m8(e);return t!==0?this.uint32(t)._push(j2,t,e):this._push(rm,1,0)}fork(){return this.states=new nm(this),this.head=this.tail=new Is(tm,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 Is(tm,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=vT(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function rm(r,e,t){e[t]=r&255}function ST(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var om=class extends Is{next;constructor(e,t){super(ST,e,t),this.next=void 0}};function ju(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 xc(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 AT(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(vc.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(TT,e,r),this},vc.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(IT,e,r),this});function TT(r,e,t){e.set(r,t)}function IT(r,e,t){r.length<40?j2(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(C(r),t)}function sm(){return new vc}function re(r,e){let t=sm();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Ni;(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"})(Ni||(Ni={}));function Zu(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function ze(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(s,i){let a=e(s);i.int32(a)},n=function(s){let i=s.int32();return e(i)};return Zu("enum",Ni.VARINT,t,n)}function ne(r,e){return Zu("message",Ni.LENGTH_DELIMITED,r,e)}var Oe=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},Sc=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var Ue;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1",r.ECDSA="ECDSA"})(Ue||(Ue={}));var im;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1",r[r.ECDSA=3]="ECDSA"})(im||(im={}));(function(r){r.codec=()=>ze(im)})(Ue||(Ue={}));var pn;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Ue.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.Type=Ue.codec().decode(t);break}case 2:{s.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(pn||(pn={}));var Ac;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Ue.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.Type=Ue.codec().decode(t);break}case 2:{s.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ac||(Ac={}));function Yt(r){if(isNaN(r)||r<=0)throw new A("random bytes length must be a Number bigger than 0");return un(r)}var Ic={};tt(Ic,{MAX_RSA_KEY_SIZE:()=>am,generateRSAKeyPair:()=>gm,jwkToJWKKeyPair:()=>x8,jwkToPkcs1:()=>RT,jwkToPkix:()=>dm,jwkToRSAPrivateKey:()=>mm,pkcs1MessageToJwk:()=>lm,pkcs1MessageToRSAPrivateKey:()=>Ju,pkcs1ToJwk:()=>kT,pkcs1ToRSAPrivateKey:()=>fm,pkixMessageToJwk:()=>um,pkixMessageToRSAPublicKey:()=>pm,pkixToJwk:()=>PT,pkixToRSAPublicKey:()=>hm});var Oi=class{type="RSA";jwk;_raw;_multihash;constructor(e,t){this.jwk=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=Ic.jwkToPkix(this.jwk)),this._raw}toMultihash(){return this._multihash}toCID(){return G.createV1(114,this._multihash)}toString(){return Ne.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}verify(e,t,n){return E8(this.jwk,t,e,n)}},Tc=class{type="RSA";jwk;_raw;publicKey;constructor(e,t){this.jwk=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=Ic.jwkToPkcs1(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}sign(e,t){return b8(this.jwk,e,t)}};var am=8192,cm=18,_T=1062,CT=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function kT(r){let e=Tr(r);return lm(e)}function lm(r){return{n:P(r[1],"base64url"),e:P(r[2],"base64url"),d:P(r[3],"base64url"),p:P(r[4],"base64url"),q:P(r[5],"base64url"),dp:P(r[6],"base64url"),dq:P(r[7],"base64url"),qi:P(r[8],"base64url"),kty:"RSA"}}function RT(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 A("JWK was missing components");return $r([zt(Uint8Array.from([0])),zt(C(r.n,"base64url")),zt(C(r.e,"base64url")),zt(C(r.d,"base64url")),zt(C(r.p,"base64url")),zt(C(r.q,"base64url")),zt(C(r.dp,"base64url")),zt(C(r.dq,"base64url")),zt(C(r.qi,"base64url"))]).subarray()}function PT(r){let e=Tr(r,{offset:0});return um(e)}function um(r){let e=Tr(r[1],{offset:0});return{kty:"RSA",n:P(e[0],"base64url"),e:P(e[1],"base64url")}}function dm(r){if(r.n==null||r.e==null)throw new A("JWK was missing components");return $r([CT,cc($r([zt(C(r.n,"base64url")),zt(C(r.e,"base64url"))]))]).subarray()}function fm(r){let e=Tr(r);return Ju(e)}function Ju(r){let e=lm(r);return mm(e)}function hm(r,e){if(r.byteLength>=_T)throw new Dn("Key size is too large");let t=Tr(r,{offset:0});return pm(t,r,e)}function pm(r,e,t){let n=um(r);if(t==null){let o=Ir(pn.encode({Type:Ue.RSA,Data:e}));t=Wt(cm,o)}return new Oi(n,t)}function mm(r){if(S8(r)>am)throw new A("Key size is too large");let e=x8(r),t=Ir(pn.encode({Type:Ue.RSA,Data:dm(e.publicKey)})),n=Wt(cm,t);return new Tc(e.privateKey,new Oi(e.publicKey,n))}async function gm(r){if(r>am)throw new A("Key size is too large");let e=await v8(r),t=Ir(pn.encode({Type:Ue.RSA,Data:dm(e.publicKey)})),n=Wt(cm,t);return new Tc(e.privateKey,new Oi(e.publicKey,n))}function x8(r){if(r==null)throw new A("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}async function v8(r,e){let t=await ot.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]);e?.signal?.throwIfAborted();let n=await LT(t,e);return{privateKey:n[0],publicKey:n[1]}}async function b8(r,e,t){let n=await ot.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]);t?.signal?.throwIfAborted();let o=await ot.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},n,e instanceof Uint8Array?e:e.subarray());return t?.signal?.throwIfAborted(),new Uint8Array(o,0,o.byteLength)}async function E8(r,e,t,n){let o=await ot.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);n?.signal?.throwIfAborted();let s=await ot.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},o,e,t instanceof Uint8Array?t:t.subarray());return n?.signal?.throwIfAborted(),s}async function LT(r,e){if(r.privateKey==null||r.publicKey==null)throw new A("Private and public key are required");let t=await Promise.all([ot.get().subtle.exportKey("jwk",r.privateKey),ot.get().subtle.exportKey("jwk",r.publicKey)]);return e?.signal?.throwIfAborted(),t}function S8(r){if(r.kty!=="RSA")throw new A("invalid key type");if(r.n==null)throw new A("invalid key modulus");return C(r.n,"base64url").length*8}var ed=class{oHash;iHash;blockLen;outputLen;finished=!1;destroyed=!1;constructor(e,t){if(Mn(e),ce(t,void 0,"key"),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 n=this.blockLen,o=new Uint8Array(n);o.set(t.length>n?e.create().update(t).digest():t);for(let s=0;s<o.length;s++)o[s]^=54;this.iHash.update(o),this.oHash=e.create();for(let s=0;s<o.length;s++)o[s]^=106;this.oHash.update(o),Ot(o)}update(e){return xi(this),this.iHash.update(e),this}digestInto(e){xi(this),ce(e,this.outputLen,"output"),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||=Object.create(Object.getPrototypeOf(this),{});let{oHash:t,iHash:n,finished:o,destroyed:s,blockLen:i,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=s,e.blockLen=i,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},ko=(r,e,t)=>new ed(r,e).update(t).digest();ko.create=(r,e)=>new ed(r,e);var A8=(r,e)=>(r+(r>=0?e:-e)/T8)/e;function DT(r,e,t){let[[n,o],[s,i]]=e,a=A8(i*r,t),c=A8(-o*r,t),l=r-a*n-c*s,d=-a*o-c*i,u=l<Hn,f=d<Hn;u&&(l=-l),f&&(d=-d);let h=pc(Math.ceil(P2(t)/2))+Bi;if(l<Hn||l>=h||d<Hn||d>=h)throw new Error("splitScalar (endomorphism): failed, k="+r);return{k1neg:u,k1:l,k2neg:f,k2:d}}function wm(r){if(!["compact","recovered","der"].includes(r))throw new Error('Signature format must be "compact", "recovered", or "der"');return r}function ym(r,e){let t={};for(let n of Object.keys(e))t[n]=r[n]===void 0?e[n]:r[n];return Kn(t.lowS,"lowS"),Kn(t.prehash,"prehash"),t.format!==void 0&&wm(t.format),t}var bm=class extends Error{constructor(e=""){super(e)}},Ro={Err:bm,_tlv:{encode:(r,e)=>{let{Err:t}=Ro;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=fc(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let s=n>127?fc(o.length/2|128):"";return fc(r)+s+o+e},decode(r,e){let{Err:t}=Ro,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++],s=!!(o&128),i=0;if(!s)i=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 d of l)i=i<<8|d;if(n+=c,i<128)throw new t("tlv.decode(long): not minimal encoding")}let a=e.subarray(n,n+i);if(a.length!==i)throw new t("tlv.decode: wrong value length");return{v:a,l:e.subarray(n+i)}}},_int:{encode(r){let{Err:e}=Ro;if(r<Hn)throw new e("integer: negative integers are not allowed");let t=fc(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}=Ro;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 vi(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Ro,o=ce(r,void 0,"signature"),{v:s,l:i}=n.decode(48,o);if(i.length)throw new e("invalid signature: left bytes after parsing");let{v:a,l:c}=n.decode(2,s),{v:l,l:d}=n.decode(2,c);if(d.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}=Ro,n=e.encode(2,t.encode(r.r)),o=e.encode(2,t.encode(r.s)),s=n+o;return e.encode(48,s)}},Hn=BigInt(0),Bi=BigInt(1),T8=BigInt(2),td=BigInt(3),NT=BigInt(4);function I8(r,e={}){let t=Gu("weierstrass",r,e),{Fp:n,Fn:o}=t,s=t.CURVE,{h:i,n:a}=s;hn(e,{},{allowInfinityPoint:"boolean",clearCofactor:"function",isTorsionFree:"function",fromBytes:"function",toBytes:"function",endo:"object"});let{endo:c}=e;if(c&&(!n.is0(s.a)||typeof c.beta!="bigint"||!Array.isArray(c.basises)))throw new Error('invalid endo: expected "beta": bigint and "basises": array');let l=C8(n,o);function d(){if(!n.isOdd)throw new Error("compression is not supported: Field does not have .isOdd()")}function u(R,v,E){let{x:b,y:_}=v.toAffine(),B=n.toBytes(b);if(Kn(E,"isCompressed"),E){d();let O=!n.isOdd(_);return tr(_8(O),B)}else return tr(Uint8Array.of(4),B,n.toBytes(_))}function f(R){ce(R,void 0,"Point");let{publicKey:v,publicKeyUncompressed:E}=l,b=R.length,_=R[0],B=R.subarray(1);if(b===v&&(_===2||_===3)){let O=n.fromBytes(B);if(!n.isValid(O))throw new Error("bad point: is not on curve, wrong x");let k=g(O),U;try{U=n.sqrt(k)}catch(we){let pe=we instanceof Error?": "+we.message:"";throw new Error("bad point: is not on curve, sqrt error"+pe)}d();let K=n.isOdd(U);return(_&1)===1!==K&&(U=n.neg(U)),{x:O,y:U}}else if(b===E&&_===4){let O=n.BYTES,k=n.fromBytes(B.subarray(0,O)),U=n.fromBytes(B.subarray(O,O*2));if(!m(k,U))throw new Error("bad point: is not on curve");return{x:k,y:U}}else throw new Error(`bad point: got length ${b}, expected compressed=${v} or uncompressed=${E}`)}let h=e.toBytes||u,p=e.fromBytes||f;function g(R){let v=n.sqr(R),E=n.mul(v,R);return n.add(n.add(E,n.mul(R,s.a)),s.b)}function m(R,v){let E=n.sqr(v),b=g(R);return n.eql(E,b)}if(!m(s.Gx,s.Gy))throw new Error("bad curve params: generator point");let w=n.mul(n.pow(s.a,td),NT),I=n.mul(n.sqr(s.b),BigInt(27));if(n.is0(n.add(w,I)))throw new Error("bad curve params: a or b");function T(R,v,E=!1){if(!n.isValid(v)||E&&n.is0(v))throw new Error(`bad point coordinate ${R}`);return v}function D(R){if(!(R instanceof x))throw new Error("Weierstrass Point expected")}function F(R){if(!c||!c.basises)throw new Error("no endo");return DT(R,c.basises,o.ORDER)}let $=Si((R,v)=>{let{X:E,Y:b,Z:_}=R;if(n.eql(_,n.ONE))return{x:E,y:b};let B=R.is0();v==null&&(v=B?n.ONE:n.inv(_));let O=n.mul(E,v),k=n.mul(b,v),U=n.mul(_,v);if(B)return{x:n.ZERO,y:n.ZERO};if(!n.eql(U,n.ONE))throw new Error("invZ was invalid");return{x:O,y:k}}),z=Si(R=>{if(R.is0()){if(e.allowInfinityPoint&&!n.is0(R.Y))return;throw new Error("bad point: ZERO")}let{x:v,y:E}=R.toAffine();if(!n.isValid(v)||!n.isValid(E))throw new Error("bad point: x or y not field elements");if(!m(v,E))throw new Error("bad point: equation left != right");if(!R.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});function S(R,v,E,b,_){return E=new x(n.mul(E.X,R),E.Y,E.Z),v=gc(b,v),E=gc(_,E),v.add(E)}class x{static BASE=new x(s.Gx,s.Gy,n.ONE);static ZERO=new x(n.ZERO,n.ONE,n.ZERO);static Fp=n;static Fn=o;X;Y;Z;constructor(v,E,b){this.X=T("x",v),this.Y=T("y",E,!0),this.Z=T("z",b),Object.freeze(this)}static CURVE(){return s}static fromAffine(v){let{x:E,y:b}=v||{};if(!v||!n.isValid(E)||!n.isValid(b))throw new Error("invalid affine point");if(v instanceof x)throw new Error("projective point not allowed");return n.is0(E)&&n.is0(b)?x.ZERO:new x(E,b,n.ONE)}static fromBytes(v){let E=x.fromAffine(p(ce(v,void 0,"point")));return E.assertValidity(),E}static fromHex(v){return x.fromBytes(Fn(v))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(v=8,E=!0){return M.createCache(this,v),E||this.multiply(td),this}assertValidity(){z(this)}hasEvenY(){let{y:v}=this.toAffine();if(!n.isOdd)throw new Error("Field doesn't support isOdd");return!n.isOdd(v)}equals(v){D(v);let{X:E,Y:b,Z:_}=this,{X:B,Y:O,Z:k}=v,U=n.eql(n.mul(E,k),n.mul(B,_)),K=n.eql(n.mul(b,k),n.mul(O,_));return U&&K}negate(){return new x(this.X,n.neg(this.Y),this.Z)}double(){let{a:v,b:E}=s,b=n.mul(E,td),{X:_,Y:B,Z:O}=this,k=n.ZERO,U=n.ZERO,K=n.ZERO,W=n.mul(_,_),we=n.mul(B,B),pe=n.mul(O,O),ue=n.mul(_,B);return ue=n.add(ue,ue),K=n.mul(_,O),K=n.add(K,K),k=n.mul(v,K),U=n.mul(b,pe),U=n.add(k,U),k=n.sub(we,U),U=n.add(we,U),U=n.mul(k,U),k=n.mul(ue,k),K=n.mul(b,K),pe=n.mul(v,pe),ue=n.sub(W,pe),ue=n.mul(v,ue),ue=n.add(ue,K),K=n.add(W,W),W=n.add(K,W),W=n.add(W,pe),W=n.mul(W,ue),U=n.add(U,W),pe=n.mul(B,O),pe=n.add(pe,pe),W=n.mul(pe,ue),k=n.sub(k,W),K=n.mul(pe,we),K=n.add(K,K),K=n.add(K,K),new x(k,U,K)}add(v){D(v);let{X:E,Y:b,Z:_}=this,{X:B,Y:O,Z:k}=v,U=n.ZERO,K=n.ZERO,W=n.ZERO,we=s.a,pe=n.mul(s.b,td),ue=n.mul(E,B),be=n.mul(b,O),Le=n.mul(_,k),et=n.add(E,b),Ee=n.add(B,O);et=n.mul(et,Ee),Ee=n.add(ue,be),et=n.sub(et,Ee),Ee=n.add(E,_);let at=n.add(B,k);return Ee=n.mul(Ee,at),at=n.add(ue,Le),Ee=n.sub(Ee,at),at=n.add(b,_),U=n.add(O,k),at=n.mul(at,U),U=n.add(be,Le),at=n.sub(at,U),W=n.mul(we,Ee),U=n.mul(pe,Le),W=n.add(U,W),U=n.sub(be,W),W=n.add(be,W),K=n.mul(U,W),be=n.add(ue,ue),be=n.add(be,ue),Le=n.mul(we,Le),Ee=n.mul(pe,Ee),be=n.add(be,Le),Le=n.sub(ue,Le),Le=n.mul(we,Le),Ee=n.add(Ee,Le),ue=n.mul(be,Ee),K=n.add(K,ue),ue=n.mul(at,Ee),U=n.mul(et,U),U=n.sub(U,ue),ue=n.mul(et,be),W=n.mul(at,W),W=n.add(W,ue),new x(U,K,W)}subtract(v){return this.add(v.negate())}is0(){return this.equals(x.ZERO)}multiply(v){let{endo:E}=e;if(!o.isValidNot0(v))throw new Error("invalid scalar: out of range");let b,_,B=O=>M.cached(this,O,k=>Ss(x,k));if(E){let{k1neg:O,k1:k,k2neg:U,k2:K}=F(v),{p:W,f:we}=B(k),{p:pe,f:ue}=B(K);_=we.add(ue),b=S(E.beta,W,pe,O,U)}else{let{p:O,f:k}=B(v);b=O,_=k}return Ss(x,[b,_])[0]}multiplyUnsafe(v){let{endo:E}=e,b=this;if(!o.isValid(v))throw new Error("invalid scalar: out of range");if(v===Hn||b.is0())return x.ZERO;if(v===Bi)return b;if(M.hasCache(this))return this.multiply(v);if(E){let{k1neg:_,k1:B,k2neg:O,k2:k}=F(v),{p1:U,p2:K}=Q5(x,b,B,k);return S(E.beta,U,K,_,O)}else return M.unsafe(b,v)}toAffine(v){return $(this,v)}isTorsionFree(){let{isTorsionFree:v}=e;return i===Bi?!0:v?v(x,this):M.unsafe(this,a).is0()}clearCofactor(){let{clearCofactor:v}=e;return i===Bi?this:v?v(x,this):this.multiplyUnsafe(i)}isSmallOrder(){return this.multiplyUnsafe(i).is0()}toBytes(v=!0){return Kn(v,"isCompressed"),this.assertValidity(),h(x,this,v)}toHex(v=!0){return Un(this.toBytes(v))}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let L=o.BITS,M=new Ii(x,e.endo?Math.ceil(L/2):L);return x.BASE.precompute(8),x}function _8(r){return Uint8Array.of(r?2:3)}function C8(r,e){return{secretKey:e.BYTES,publicKey:1+r.BYTES,publicKeyUncompressed:1+2*r.BYTES,publicKeyHasPrefix:!0,signature:2*e.BYTES}}function OT(r,e={}){let{Fn:t}=r,n=e.randomBytes||un,o=Object.assign(C8(r.Fp,t),{seed:O2(t.ORDER)});function s(h){try{let p=t.fromBytes(h);return t.isValidNot0(p)}catch{return!1}}function i(h,p){let{publicKey:g,publicKeyUncompressed:m}=o;try{let w=h.length;return p===!0&&w!==g||p===!1&&w!==m?!1:!!r.fromBytes(h)}catch{return!1}}function a(h=n(o.seed)){return B2(ce(h,o.seed,"seed"),t.ORDER)}function c(h,p=!0){return r.BASE.multiply(t.fromBytes(h)).toBytes(p)}function l(h){let{secretKey:p,publicKey:g,publicKeyUncompressed:m}=o;if(!ms(h)||"_lengths"in t&&t._lengths||p===g)return;let w=ce(h,void 0,"key").length;return w===g||w===m}function d(h,p,g=!0){if(l(h)===!0)throw new Error("first arg must be private key");if(l(p)===!1)throw new Error("second arg must be public key");let m=t.fromBytes(h);return r.fromBytes(p).multiply(m).toBytes(g)}let u={isValidSecretKey:s,isValidPublicKey:i,randomSecretKey:a},f=_i(a,c);return Object.freeze({getPublicKey:c,getSharedSecret:d,keygen:f,Point:r,utils:u,lengths:o})}function k8(r,e,t={}){Mn(e),hn(t,{},{hmac:"function",lowS:"boolean",randomBytes:"function",bits2int:"function",bits2int_modN:"function"}),t=Object.assign({},t);let n=t.randomBytes||un,o=t.hmac||((E,b)=>ko(e,E,b)),{Fp:s,Fn:i}=r,{ORDER:a,BITS:c}=i,{keygen:l,getPublicKey:d,getSharedSecret:u,utils:f,lengths:h}=OT(r,t),p={prehash:!0,lowS:typeof t.lowS=="boolean"?t.lowS:!0,format:"compact",extraEntropy:!1},g=a*T8<s.ORDER;function m(E){let b=a>>Bi;return E>b}function w(E,b){if(!i.isValidNot0(b))throw new Error(`invalid signature ${E}: out of range 1..Point.Fn.ORDER`);return b}function I(){if(g)throw new Error('"recovered" sig type is not supported for cofactor >2 curves')}function T(E,b){wm(b);let _=h.signature,B=b==="compact"?_:b==="recovered"?_+1:void 0;return ce(E,B)}class D{r;s;recovery;constructor(b,_,B){if(this.r=w("r",b),this.s=w("s",_),B!=null){if(I(),![0,1,2,3].includes(B))throw new Error("invalid recovery id");this.recovery=B}Object.freeze(this)}static fromBytes(b,_=p.format){T(b,_);let B;if(_==="der"){let{r:K,s:W}=Ro.toSig(ce(b));return new D(K,W)}_==="recovered"&&(B=b[0],_="compact",b=b.subarray(1));let O=h.signature/2,k=b.subarray(0,O),U=b.subarray(O,O*2);return new D(i.fromBytes(k),i.fromBytes(U),B)}static fromHex(b,_){return this.fromBytes(Fn(b),_)}assertRecovery(){let{recovery:b}=this;if(b==null)throw new Error("invalid recovery id: must be present");return b}addRecoveryBit(b){return new D(this.r,this.s,b)}recoverPublicKey(b){let{r:_,s:B}=this,O=this.assertRecovery(),k=O===2||O===3?_+a:_;if(!s.isValid(k))throw new Error("invalid recovery id: sig.r+curve.n != R.x");let U=s.toBytes(k),K=r.fromBytes(tr(_8((O&1)===0),U)),W=i.inv(k),we=$(ce(b,void 0,"msgHash")),pe=i.create(-we*W),ue=i.create(B*W),be=r.BASE.multiplyUnsafe(pe).add(K.multiplyUnsafe(ue));if(be.is0())throw new Error("invalid recovery: point at infinify");return be.assertValidity(),be}hasHighS(){return m(this.s)}toBytes(b=p.format){if(wm(b),b==="der")return Fn(Ro.hexFromSig(this));let{r:_,s:B}=this,O=i.toBytes(_),k=i.toBytes(B);return b==="recovered"?(I(),tr(Uint8Array.of(this.assertRecovery()),O,k)):tr(O,k)}toHex(b){return Un(this.toBytes(b))}}let F=t.bits2int||function(b){if(b.length>8192)throw new Error("input is too large");let _=vi(b),B=b.length*8-c;return B>0?_>>BigInt(B):_},$=t.bits2int_modN||function(b){return i.create(F(b))},z=pc(c);function S(E){return Io("num < 2^"+c,E,Hn,z),i.toBytes(E)}function x(E,b){return ce(E,void 0,"message"),b?ce(e(E),void 0,"prehashed message"):E}function L(E,b,_){let{lowS:B,prehash:O,extraEntropy:k}=ym(_,p);E=x(E,O);let U=$(E),K=i.fromBytes(b);if(!i.isValidNot0(K))throw new Error("invalid private key");let W=[S(K),S(U)];if(k!=null&&k!==!1){let be=k===!0?n(h.secretKey):k;W.push(ce(be,void 0,"extraEntropy"))}let we=tr(...W),pe=U;function ue(be){let Le=F(be);if(!i.isValidNot0(Le))return;let et=i.inv(Le),Ee=r.BASE.multiply(Le).toAffine(),at=i.create(Ee.x);if(at===Hn)return;let ci=i.create(et*i.create(pe+at*K));if(ci===Hn)return;let wu=(Ee.x===at?0:2)|Number(Ee.y&Bi),Ha=ci;return B&&m(ci)&&(Ha=i.neg(ci),wu^=1),new D(at,Ha,g?void 0:wu)}return{seed:we,k2sig:ue}}function M(E,b,_={}){let{seed:B,k2sig:O}=L(E,b,_);return D5(e.outputLen,i.BYTES,o)(B,O).toBytes(_.format)}function R(E,b,_,B={}){let{lowS:O,prehash:k,format:U}=ym(B,p);if(_=ce(_,void 0,"publicKey"),b=x(b,k),!ms(E)){let K=E instanceof D?", use sig.toBytes()":"";throw new Error("verify expects Uint8Array signature"+K)}T(E,U);try{let K=D.fromBytes(E,U),W=r.fromBytes(_);if(O&&K.hasHighS())return!1;let{r:we,s:pe}=K,ue=$(b),be=i.inv(pe),Le=i.create(ue*be),et=i.create(we*be),Ee=r.BASE.multiplyUnsafe(Le).add(W.multiplyUnsafe(et));return Ee.is0()?!1:i.create(Ee.x)===we}catch{return!1}}function v(E,b,_={}){let{prehash:B}=ym(_,p);return b=x(b,B),D.fromBytes(E,"recovered").recoverPublicKey(b).toBytes()}return Object.freeze({keygen:l,getPublicKey:d,getSharedSecret:u,utils:f,lengths:h,Point:r,sign:M,verify:R,recoverPublicKey:v,Signature:D,hash:e})}var xm={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt(1),a:BigInt(0),b:BigInt(7),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")},BT={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),basises:[[BigInt("0x3086d221a7d46bcde86c90e49284eb15"),-BigInt("0xe4437ed6010e88286f547fa90abfe4c3")],[BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),BigInt("0x3086d221a7d46bcde86c90e49284eb15")]]};var R8=BigInt(2);function MT(r){let e=xm.p,t=BigInt(3),n=BigInt(6),o=BigInt(11),s=BigInt(22),i=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,d=l*l*r%e,u=Ke(d,t,e)*d%e,f=Ke(u,t,e)*d%e,h=Ke(f,R8,e)*l%e,p=Ke(h,o,e)*h%e,g=Ke(p,s,e)*p%e,m=Ke(g,a,e)*g%e,w=Ke(m,c,e)*m%e,I=Ke(w,a,e)*g%e,T=Ke(I,t,e)*d%e,D=Ke(T,i,e)*p%e,F=Ke(D,n,e)*l%e,$=Ke(F,R8,e);if(!Em.eql(Em.sqr($),r))throw new Error("Cannot find square root");return $}var Em=Ai(xm.p,{sqrt:MT}),UT=I8(xm,{Fp:Em,endo:BT}),Hr=k8(UT,Ir);var P8=32;function L8(r,e,t){let n=Ge.digest(e instanceof Uint8Array?e:e.subarray());if(Ri(n))return n.then(({digest:o})=>(t?.signal?.throwIfAborted(),Hr.sign(o,r,{prehash:!1,format:"der"}))).catch(o=>{throw o.name==="AbortError"?o:new oc(String(o))});try{return Hr.sign(n.digest,r,{prehash:!1,format:"der"})}catch(o){throw new oc(String(o))}}function D8(r,e,t,n){let o=Ge.digest(t instanceof Uint8Array?t:t.subarray());if(Ri(o))return o.then(({digest:s})=>(n?.signal?.throwIfAborted(),Hr.verify(e,s,r,{prehash:!1,format:"der"}))).catch(s=>{throw s.name==="AbortError"?s:new sc(String(s))});try{return n?.signal?.throwIfAborted(),Hr.verify(e,o.digest,r,{prehash:!1,format:"der"})}catch(s){throw new sc(String(s))}}var _c=class{type="secp256k1";raw;_key;constructor(e){this._key=B8(e),this.raw=N8(this._key)}toMultihash(){return ft.digest(ht(this))}toCID(){return G.createV1(114,this.toMultihash())}toString(){return Ne.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}verify(e,t,n){return D8(this._key,t,e,n)}},Cc=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=O8(e),this.publicKey=new _c(t??M8(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}sign(e,t){return L8(this.raw,e,t)}};function vm(r){return new Cc(r)}function Sm(r){return new _c(r)}async function U8(){let r=FT();return new Cc(r)}function N8(r){return Hr.Point.fromBytes(r).toBytes()}function O8(r){try{return Hr.getPublicKey(r,!0),r}catch(e){throw new qa(String(e))}}function B8(r){try{return Hr.Point.fromBytes(r),r}catch(e){throw new Dn(String(e))}}function M8(r){try{return Hr.getPublicKey(r,!0)}catch(e){throw new qa(String(e))}}function FT(){return Hr.utils.randomSecretKey()}async function rd(r,e){if(r==="Ed25519")return l8();if(r==="secp256k1")return U8();if(r==="RSA")return gm($T(e));if(r==="ECDSA")return g5(KT(e));throw new Ur}function rt(r,e){let{Type:t,Data:n}=pn.decode(r),o=n??new Uint8Array;switch(t){case Ue.RSA:return hm(o,e);case Ue.Ed25519:return H2(o);case Ue.secp256k1:return Sm(o);case Ue.ECDSA:return E2(o);default:throw new Ur}}function nd(r){let{Type:e,Data:t}=pn.decode(r.digest),n=t??new Uint8Array;switch(e){case Ue.Ed25519:return H2(n);case Ue.secp256k1:return Sm(n);case Ue.ECDSA:return E2(n);default:throw new Ur}}function ht(r){return pn.encode({Type:Ue[r.type],Data:r.raw})}function F8(r){let e=Ac.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Ue.RSA:return fm(t);case Ue.Ed25519:return V2(t);case Ue.secp256k1:return vm(t);case Ue.ECDSA:return d5(t);default:throw new Ur}}function $8(r){if(r.byteLength===fr)return V2(r);if(r.byteLength===P8)return vm(r);let e=Tr(r),t=e[2]?.[0];if(t===r5||t===n5||t===o5)return b2(e);if(e.length>8)return Ju(e);throw new A("Could not extract private key from raw bytes")}function _s(r){return Ac.encode({Type:Ue[r.type],Data:r.raw})}function $T(r){return r==null?2048:parseInt(r,10)}function KT(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 A("Unsupported curve, should be P-256, P-384 or P-521")}var kc=Uint32Array.from([1732584193,4023233417,2562383102,271733878,3285377520]),Po=new Uint32Array(80),Am=class extends ys{A=kc[0]|0;B=kc[1]|0;C=kc[2]|0;D=kc[3]|0;E=kc[4]|0;constructor(){super(64,20,8,!1)}get(){let{A:e,B:t,C:n,D:o,E:s}=this;return[e,t,n,o,s]}set(e,t,n,o,s){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=s|0}process(e,t){for(let c=0;c<16;c++,t+=4)Po[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)Po[c]=Ku(Po[c-3]^Po[c-8]^Po[c-14]^Po[c-16],1);let{A:n,B:o,C:s,D:i,E:a}=this;for(let c=0;c<80;c++){let l,d;c<20?(l=Vu(o,s,i),d=1518500249):c<40?(l=o^s^i,d=1859775393):c<60?(l=Hu(o,s,i),d=2400959708):(l=o^s^i,d=3395469782);let u=Ku(n,5)+l+a+d+Po[c]|0;a=i,i=s,s=Ku(o,30),o=n,n=u}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,this.set(n,o,s,i,a)}roundClean(){Ot(Po)}destroy(){this.set(0,0,0,0,0),Ot(this.buffer)}},K8=lc(()=>new Am);function V8(r,e,t,n){Mn(r);let o=x5({dkLen:32,asyncTick:10},n),{c:s,dkLen:i,asyncTick:a}=o;if(Nt(s,"c"),Nt(i,"dkLen"),Nt(a,"asyncTick"),s<1)throw new Error("iterations (c) must be >= 1");let c=x2(e,"password"),l=x2(t,"salt"),d=new Uint8Array(i),u=ko.create(r,c),f=u._cloneInto().update(l);return{c:s,dkLen:i,asyncTick:a,DK:d,PRF:u,PRFSalt:f}}function H8(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),Ot(o),t}function q8(r,e,t,n){let{c:o,dkLen:s,DK:i,PRF:a,PRFSalt:c}=V8(r,e,t,n),l,d=new Uint8Array(4),u=gs(d),f=new Uint8Array(a.outputLen);for(let h=1,p=0;p<s;h++,p+=a.outputLen){let g=i.subarray(p,p+a.outputLen);u.setInt32(0,h,!1),(l=c._cloneInto(l)).update(d).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 w=0;w<g.length;w++)g[w]^=f[w]}}return H8(a,c,i,l,f)}async function od(r,e,t,n){let{c:o,dkLen:s,asyncTick:i,DK:a,PRF:c,PRFSalt:l}=V8(r,e,t,n),d,u=new Uint8Array(4),f=gs(u),h=new Uint8Array(c.outputLen);for(let p=1,g=0;g<s;p++,g+=c.outputLen){let m=a.subarray(g,g+c.outputLen);f.setInt32(0,p,!1),(d=l._cloneInto(d)).update(u).digestInto(h),m.set(h.subarray(0,m.length)),await E5(o-1,i,()=>{c._cloneInto(d).update(h).digestInto(h);for(let w=0;w<m.length;w++)m[w]^=h[w]})}return H8(c,l,a,d,h)}var W8={sha1:K8,"sha2-256":Ir,"sha2-512":To};function Rc(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(W8).join(" / ");throw new A(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let s=W8[o],i=q8(s,r,e,{c:t,dkLen:n});return nt.encode(i).substring(1)}var Tm={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},z8={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},G8=new globalThis.TextEncoder;function VT(r,e){let t=Tm[e],n=z8[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function HT(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=Tm[e],o=z8[e],s=r;for(;s.length>0;){let i=G8.encodeInto(s,t);s=s.slice(i.read);for(let a=0;a<i.written;a++)o^=BigInt(t[a]),o=BigInt.asUintN(e,o*n)}return o}function Im(r,{size:e=32,utf8Buffer:t}={}){if(!Tm[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 HT(r,e,t);r=G8.encode(r)}return VT(r,e)}var Pc={hash:r=>Number(Im(r,{size:32})),hashV:(r,e)=>qT(Pc.hash(r,e))};function qT(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),C(e,"base16")}var _m=64,qr=class{fp;h;seed;constructor(e,t,n,o=2){if(o>_m)throw new TypeError("Invalid Fingerprint Size");let s=t.hashV(e,n),i=ae(o);for(let a=0;a<i.length;a++)i[a]=s[a];i.length===0&&(i[0]=7),this.fp=i,this.h=t,this.seed=n}hash(){return this.h.hash(this.fp,this.seed)}equals(e){return e?.fp instanceof Uint8Array?ee(this.fp,e.fp):!1}};function Cs(r,e){return Math.floor(Math.random()*(e-r))+r}var ks=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof qr))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof qr))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 qr))throw new TypeError("Invalid Fingerprint");let t=Cs(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof qr))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var WT=500,Lc=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??Pc,this.seed=e.seed??Cs(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=C(e));let t=new qr(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 ks(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new ks(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let s=[n,o],i=s[Cs(0,s.length-1)];this.buckets[i]==null&&(this.buckets[i]=new ks(this.bucketSize));for(let a=0;a<WT;a++){let c=this.buckets[i].swap(t);if(c!=null&&(i=(i^c.hash())%this.filterSize,this.buckets[i]==null&&(this.buckets[i]=new ks(this.bucketSize)),this.buckets[i].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=C(e));let t=new qr(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 s=(n^t.hash())%this.filterSize;return this.buckets[s]?.has(t)??!1}remove(e){typeof e=="string"&&(e=C(e));let t=new qr(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 s=(n^t.hash())%this.filterSize,i=this.buckets[s]?.remove(t)??!1;return i&&this.count--,i}get reliable(){return Math.floor(100*(this.count/this.filterSize))<=90}},zT={1:.5,2:.84,4:.95,8:.98};function GT(r=.001){return r>.002?2:r>1e-5?4:8}function Y8(r,e=.001){let t=GT(e),n=zT[t],o=Math.round(r/n),s=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),_m);return{filterSize:o,bucketSize:t,fingerprintSize:s}}var sd=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??Pc,this.seed=e.seed??Cs(0,Math.pow(2,10)),this.filterSeries=[new Lc({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=C(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 Lc({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=C(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=C(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 xt(r,e=.001,t){return new sd({...Y8(r,e),...t??{}})}function oe(r){let e=r.getComponents(),t={},n=0;if(e[n]?.name==="ip6zone"&&(t.zone=`${e[n].value}`,n++),e[n].name==="ip4"||e[n].name==="ip6"||e[n].name==="dns"||e[n].name==="dns4"||e[n].name==="dns6"?(t.type=e[n].name,t.host=e[n].value,n++):e[n].name==="dnsaddr"&&(t.type=e[n].name,t.host=`_dnsaddr.${e[n].value}`,n++),(e[n]?.name==="tcp"||e[n]?.name==="udp")&&(t.protocol=e[n].name==="tcp"?"tcp":"udp",t.port=parseInt(`${e[n].value}`),n++),e[n]?.name==="ipcidr"&&(t.type==="ip4"?t.cidr=parseInt(`${e[n].value}`):t.type==="ip6"&&(t.cidr=`${e[n].value}`),n++),t.type==null||t.host==null)throw new A(`Multiaddr ${r} was not an IPv4, IPv6, DNS, DNS4, DNS6 or DNSADDR address`);return e[n]?.name==="tls"&&e[n+1]?.name==="sni"&&(t.sni=e[n+1].value,n+=2),t}var id=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 s=0,i=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*o)-1;for(;;){let d=this.readAtomically(()=>{let u=this.readChar();if(u===void 0)return;let f=Number.parseInt(u,e);if(!Number.isNaN(f))return f});if(d===void 0)break;if(s*=e,s+=d,s>l||(i+=1,t!==void 0&&i>t))return}if(i!==0)return!n&&c&&i>1?void 0:s})}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 i=this.readSeparator(":",n,()=>this.readIPv4Addr());if(i!==void 0)return t[o]=i[0],t[o+1]=i[1],t[o+2]=i[2],t[o+3]=i[3],[o+4,!0]}let s=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(s===void 0)return[o,!1];t[o]=s>>8,t[o+1]=s&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 s=new Uint8Array(14),i=16-(n+2),[a]=e(s.subarray(0,i));return t.set(s.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var X8=45,YT=15,Mi=new id;function ad(r){if(!(r.length>YT))return Mi.new(r).parseWith(()=>Mi.readIPv4Addr())}function cd(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>X8))return Mi.new(r).parseWith(()=>Mi.readIPv6Addr())}function Ui(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>X8)return;let t=Mi.new(r).parseWith(()=>Mi.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 Q8(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 j8(r,e,t,n){let o=0;for(let s of r)if(!(o<t)){if(o>n)break;if(s!==e[o])return!1;o++}return!0}function Cm(r){switch(r.length){case Rs:return r.join(".");case Ps:{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 Z8(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 J8(r){let e="0x";for(let t of r)e+=(t>>4).toString(16)+(t&15).toString(16);return e}var Rs=4,Ps=16,x$=parseInt("0xFFFF",16),XT=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function Dc(r,e){e.length===Ps&&r.length===Rs&&Q8(e,0,11)&&(e=e.slice(12)),e.length===Rs&&r.length===Ps&&j8(r,XT,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 e7(r,e){if(typeof e=="string"&&(e=Ui(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 km(r){let[e,t]=r.split("/");if(!e||!t)throw new Error("Failed to parse given CIDR: "+r);let n=Rs,o=ad(e);if(o==null&&(n=Ps,o=cd(e),o==null))throw new Error("Failed to parse given CIDR: "+r);let s=parseInt(t,10);if(Number.isNaN(s)||String(s).length!==t.length||s<0||s>n*8)throw new Error("Failed to parse given CIDR: "+r);let i=Rm(s,8*n);return{network:Dc(o,i),mask:i}}function Rm(r,e){if(e!==8*Rs&&e!==8*Ps)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 Ls=class{constructor(e,t){if(t==null)({network:this.network,mask:this.mask}=km(e));else{let n=Ui(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 s=Ui(t);if(s==null)throw new Error("Failed to parse mask");this.mask=s}else this.mask=Rm(o,8*n.length);this.network=Dc(n,this.mask)}}contains(e){return e7({network:this.network,mask:this.mask},e)}toString(){let e=Z8(this.mask),t=e!==-1?String(e):J8(this.mask);return Cm(this.network)+"/"+t}};function t7(r,e){return new Ls(r).contains(e)}function ld(r){try{let e=oe(r);switch(e.type){case"ip6":return t7("2000::/3",e.host);default:return!1}}catch{return!1}}function r7(r){try{let e=oe(r);switch(e.type){case"ip4":return e.host.startsWith("169.254.");case"ip6":return e.host.toLowerCase().startsWith("fe80");default:return!1}}catch{return!1}}function n7(r){return/^127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(r)||/^::1$/.test(r)}function Nc(r){try{let e=oe(r);switch(e.type){case"ip4":case"ip6":return n7(e.host);default:return!1}}catch{return!1}}function vt(r){try{return oe(r),!0}catch{return!1}}function Wr(r){return!!ad(r)}function ud(r){return!!cd(r)}var s7=Pn(o7(),1),QT=["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"],jT=QT.map(r=>new s7.Netmask(r));function Pm(r){for(let e of jT)if(e.contains(r))return!0;return!1}function ZT(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function JT(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 Pm(o)}function eI(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function tI(r){let e=r.split(":"),t=e[e.length-1];return Pm(t)}function rI(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 Fi(r){if(Wr(r))return Pm(r);if(ZT(r))return JT(r);if(eI(r))return tI(r);if(ud(r))return rI(r)}function Ze(r){try{let e=oe(r);switch(e.type){case"ip4":case"ip6":return Fi(e.host)??!1;default:return e.host==="localhost"}}catch{return!1}}function fe(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var dd=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}},$i=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new dd(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 dd(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 Lm=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function St(r={}){return nI(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 nI(r,e){e=e??{};let t=e.onEnd,n=new $i,o,s,i,a=fe(),c=async()=>{try{return n.isEmpty()?i?{done:!0}:await new Promise((m,w)=>{s=I=>{s=null,n.push(I);try{m(r(n))}catch(T){w(T)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=fe()})}},l=m=>s!=null?s(m):(n.push(m),o),d=m=>(n=new $i,s!=null?s({error:m}):(n.push({error:m}),o)),u=m=>{if(i)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=>i?o:(i=!0,m!=null?d(m):l({done:!0})),h=()=>(n=new $i,f(),{done:!0}),p=m=>(f(m),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:h,throw:p,push:u,end:f,get readableLength(){return n.size},onEmpty:async m=>{let w=m?.signal;if(w?.throwIfAborted(),n.isEmpty())return;let I,T;w!=null&&(I=new Promise((D,F)=>{T=()=>{F(new Lm)},w.addEventListener("abort",T)}));try{await Promise.race([a.promise,I])}finally{T!=null&&w!=null&&w?.removeEventListener("abort",T)}}},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:u,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 oI=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 sI(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!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:d}=oI(r),u=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(g){n(),i(g);return}c.push(p),t.count===c.length&&(n(),s(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)a.includes(h)||d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&s(c)});if(o.cancel=n,typeof t.timeout=="number"){let s=Qa(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function xe(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=sI(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}function qn(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 fd=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}},hd=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}},Ds=class extends Error{static name="UnexpectedEOFError";name="UnexpectedEOFError"},pd=class extends Error{static name="MaxEarlyStreamsError";name="MaxEarlyStreamsError"},md=class extends Error{static name="StreamClosedError";name="StreamClosedError"};function iI(r){return r.reason}async function Pe(r,e,t){if(e==null)return r;let n=t?.translateError??iI;if(e.aborted)return r.catch(()=>{}),Promise.reject(n(e));let o;try{return await Promise.race([r,new Promise((s,i)=>{o=()=>{i(n(e))},e.addEventListener("abort",o)})])}finally{o!=null&&e.removeEventListener("abort",o)}}var gd=class{deferred;signal;constructor(e){this.signal=e,this.deferred=fe(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new Ht)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function aI(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var yd=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=aI(),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 Ht),this.cleanup())}async join(e={}){let t=new gd(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 Pe(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 At=class extends ie{concurrency;maxSize;queue;pending;sort;paused;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,this.paused=!1,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=[],this.emitEmpty=qn(this.emitEmpty.bind(this),1),this.emitIdle=qn(this.emitIdle.bind(this),1)}emitEmpty(){this.size===0&&this.safeDispatchEvent("empty")}emitIdle(){this.running===0&&this.safeDispatchEvent("idle")}pause(){this.paused=!0}resume(){this.paused&&(this.paused=!1,this.tryToStartAnother())}tryToStartAnother(){if(this.paused)return!1;if(this.size===0)return this.emitEmpty(),this.running===0&&this.emitIdle(),!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 hd;let n=new yd(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 s=0;s<this.queue.length;s++)if(this.queue[s]===n){this.queue.splice(s,1);break}}throw 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 Ht)}),this.clear()}async onEmpty(e){this.size!==0&&await xe(this,"empty",e)}async onSizeLessThan(e,t){this.size<e||await xe(this,"next",{...t,filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await xe(this,"idle",e)}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=St({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail)},s=c=>{n(c.detail.error)},i=()=>{n()},a=()=>{n(new Ht("Queue aborted"))};this.addEventListener("completed",o),this.addEventListener("failure",s),this.addEventListener("idle",i),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("failure",s),this.removeEventListener("idle",i),e?.signal?.removeEventListener("abort",a),n()}}};var cI=Math.pow(2,20)*4,Lo=class extends ie{status;timeline;inactivityTimeout;maxReadBufferLength;maxWriteBufferLength;log;direction;maxMessageSize;readStatus;writeStatus;remoteReadStatus;remoteWriteStatus;writableNeedsDrain;readBuffer;writeBuffer;sendingData;onDrainPromise;constructor(e){super(),this.status="open",this.log=e.log,this.direction=e.direction??"outbound",this.inactivityTimeout=e.inactivityTimeout??12e4,this.maxReadBufferLength=e.maxReadBufferLength??cI,this.maxWriteBufferLength=e.maxWriteBufferLength,this.maxMessageSize=e.maxMessageSize,this.readBuffer=new Q,this.writeBuffer=new Q,this.readStatus="readable",this.remoteReadStatus="readable",this.writeStatus="writable",this.remoteWriteStatus="writable",this.sendingData=!1,this.writableNeedsDrain=!1,this.timeline={open:Date.now()},this.processSendQueue=this.processSendQueue.bind(this);let t=()=>{this.writableNeedsDrain&&(this.log.trace("drain event received, continue sending data"),this.writableNeedsDrain=!1,this.processSendQueue()),this.onDrainPromise?.resolve()};this.addEventListener("drain",t);let n=o=>{this.onDrainPromise?.reject(o.error??new md)};this.addEventListener("close",n)}get readBufferLength(){return this.readBuffer.byteLength}get writeBufferLength(){return this.writeBuffer.byteLength}async onDrain(e){return this.writableNeedsDrain!==!0?Promise.resolve():(this.onDrainPromise==null&&(this.onDrainPromise=Promise.withResolvers()),Pe(this.onDrainPromise.promise,e?.signal))}async*[Symbol.asyncIterator](){if(this.readStatus!=="readable"&&this.readStatus!=="paused")return;let e=St(),t=s=>{e.push(s.data)};this.addEventListener("message",t);let n=s=>{e.end(s.error)};this.addEventListener("close",n);let o=()=>{e.end()};this.addEventListener("remoteCloseWrite",o);try{yield*e}finally{this.removeEventListener("message",t),this.removeEventListener("close",n),this.removeEventListener("remoteCloseWrite",o)}}isReadable(){return this.status==="open"}send(e){if(this.writeStatus==="closed"||this.writeStatus==="closing")throw new an(`Cannot write to a stream that is ${this.writeStatus}`);return this.log.trace("append %d bytes to write buffer",e.byteLength),this.writeBuffer.append(e),this.processSendQueue()}abort(e){if(!(this.status==="aborted"||this.status==="reset"||this.status==="closed")){this.log.error("abort with error - %e",e),this.status="aborted",this.readBuffer.byteLength>0&&this.readBuffer.consume(this.readBuffer.byteLength),this.writeBuffer.byteLength>0&&(this.writeBuffer.consume(this.writeBuffer.byteLength),this.safeDispatchEvent("idle")),this.writeStatus="closed",this.remoteWriteStatus="closed",this.readStatus="closed",this.remoteReadStatus="closed",this.timeline.close=Date.now();try{this.sendReset(e)}catch(t){this.log("failed to send reset to remote - %e",t)}this.dispatchEvent(new Tu(e))}}pause(){if(this.readStatus==="closed"||this.readStatus==="closing")throw new an("Cannot pause a stream that is closing/closed");this.readStatus!=="paused"&&(this.readStatus="paused",this.sendPause())}resume(){if(this.readStatus==="closed"||this.readStatus==="closing")throw new an("Cannot resume a stream that is closing/closed");this.readStatus!=="readable"&&(this.readStatus="readable",this.dispatchReadBuffer(),this.sendResume())}push(e){if(this.readStatus==="closed"||this.readStatus==="closing")throw new an(`Cannot push data onto a stream that is ${this.readStatus}`);if(e.byteLength!==0){if(this.readBuffer.append(e),this.readStatus==="paused"||this.listenerCount("message")===0){this.checkReadBufferLength();return}setTimeout(()=>{this.dispatchReadBuffer()},0)}}unshift(e){if(this.readStatus==="closed"||this.readStatus==="closing")throw new an(`Cannot push data onto a stream that is ${this.readStatus}`);if(e.byteLength!==0){if(this.readBuffer.prepend(e),this.readStatus==="paused"||this.listenerCount("message")===0){this.checkReadBufferLength();return}setTimeout(()=>{this.dispatchReadBuffer()},0)}}onData(e){if(e.byteLength!==0){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("ignoring data - read status %s",this.readStatus);return}this.readBuffer.append(e),this.dispatchReadBuffer()}}addEventListener(...e){super.addEventListener.apply(this,e),e[0]==="message"&&this.readBuffer.byteLength>0&&queueMicrotask(()=>{this.dispatchReadBuffer()})}onRemoteReset(){this.log("remote reset"),this.status="reset",this.writeStatus="closed",this.remoteWriteStatus="closed",this.remoteReadStatus="closed",this.timeline.close=Date.now(),this.readBuffer.byteLength===0&&(this.readStatus="closed");let e=new ui;this.dispatchEvent(new Iu(e))}onTransportClosed(e){this.log("transport closed"),this.readStatus==="readable"&&this.readBuffer.byteLength===0&&(this.log("close readable end after transport closed and read buffer is empty"),this.readStatus="closed"),this.remoteReadStatus!=="closed"&&(this.remoteReadStatus="closed"),this.remoteWriteStatus!=="closed"&&(this.remoteWriteStatus="closed"),this.writeStatus!=="closed"&&(this.writeStatus="closed"),e!=null?this.abort(e):(this.status==="open"||this.status==="closing")&&(this.timeline.close=Date.now(),this.status="closed",this.writeStatus="closed",this.remoteWriteStatus="closed",this.remoteReadStatus="closed",this.dispatchEvent(new bo))}onRemoteCloseWrite(){this.remoteWriteStatus!=="closed"&&(this.log.trace("on remote close write"),this.remoteWriteStatus="closed",this.safeDispatchEvent("remoteCloseWrite"),this.writeStatus==="closed"&&this.onTransportClosed())}onRemoteCloseRead(){this.log.trace("on remote close read"),this.remoteReadStatus="closed",this.writeBuffer.byteLength>0&&(this.writeBuffer.consume(this.writeBuffer.byteLength),this.safeDispatchEvent("idle"))}processSendQueue(){if(this.writableNeedsDrain)return this.log.trace("not processing send queue as drain is required"),this.checkWriteBufferLength(),!1;if(this.writeBuffer.byteLength===0)return this.log.trace("not processing send queue as no bytes to send"),!0;if(this.sendingData)return this.log.trace("not processing send queue as already sending data"),!0;this.sendingData=!0,this.log.trace("processing send queue with %d queued bytes",this.writeBuffer.byteLength);try{let e=!0,t=this.writeBuffer.byteLength,n=0;for(;this.writeBuffer.byteLength>0;){let o=Math.min(this.maxMessageSize??this.writeBuffer.byteLength,this.writeBuffer.byteLength);if(o===0){e=!1;break}let s=this.writeBuffer.sublist(0,o),i=new Q(s);this.writeBuffer.consume(s.byteLength);let a=this.sendData(s);if(e=a.canSendMore,n+=a.sentBytes,a.sentBytes!==i.byteLength&&(i.consume(a.sentBytes),this.writeBuffer.prepend(i)),!e)break}return e||(this.log.trace("sent %d/%d bytes, pausing sending because underlying stream is full, %d bytes left in the write buffer",n,t,this.writeBuffer.byteLength),this.writableNeedsDrain=!0,this.checkWriteBufferLength()),this.writeBuffer.byteLength===0&&this.safeDispatchEvent("idle"),e}finally{this.sendingData=!1}}dispatchReadBuffer(){try{if(this.listenerCount("message")===0){this.log.trace("not dispatching pause buffer as there are no listeners for the message event");return}if(this.readBuffer.byteLength===0){this.log.trace("not dispatching pause buffer as there is no data to dispatch");return}if(this.readStatus==="paused"){this.log.trace("not dispatching pause buffer we are paused");return}if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("dropping %d bytes because the readable end is %s",this.readBuffer.byteLength,this.readStatus),this.readBuffer.consume(this.readBuffer.byteLength);return}let e=this.readBuffer.sublist();this.readBuffer.consume(e.byteLength),this.dispatchEvent(new Au(e))}finally{this.readBuffer.byteLength===0&&this.remoteWriteStatus==="closed"&&(this.log("close readable end after dispatching read buffer and remote writable end is closed"),this.readStatus="closed"),this.checkReadBufferLength()}}checkReadBufferLength(){this.readBuffer.byteLength>this.maxReadBufferLength&&this.abort(new za(`Read buffer length of ${this.readBuffer.byteLength} exceeded limit of ${this.maxReadBufferLength}, read status is ${this.readStatus}`))}checkWriteBufferLength(){this.maxWriteBufferLength!=null&&this.writeBuffer.byteLength>this.maxWriteBufferLength&&this.abort(new za(`Write buffer length of ${this.writeBuffer.byteLength} exceeded limit of ${this.maxWriteBufferLength}, write status is ${this.writeStatus}`))}onMuxerNeedsDrain(){this.writableNeedsDrain=!0}onMuxerDrain(){this.safeDispatchEvent("drain")}};var Do=class extends Lo{remoteAddr;metricPrefix;metrics;constructor(e){super(e),this.metricPrefix=e.metricPrefix??"",this.metrics=e.metrics,this.remoteAddr=e.remoteAddr,this.addEventListener("close",t=>{this.metrics?.increment({[`${this.metricPrefix}end`]:!0}),t.error!=null?t.local?this.metrics?.increment({[`${this.metricPrefix}abort`]:!0}):this.metrics?.increment({[`${this.metricPrefix}reset`]:!0}):t.local?this.metrics?.increment({[`${this.metricPrefix}_local_close`]:!0}):this.metrics?.increment({[`${this.metricPrefix}_remote_close`]:!0})})}async close(e){this.status==="open"&&(this.status="closing",this.writeStatus="closing",this.remoteWriteStatus="closing",this.remoteReadStatus="closing",(this.sendingData||this.writeBuffer.byteLength>0)&&(this.log("waiting for write queue to become idle before closing writable end of stream, %d unsent bytes",this.writeBuffer.byteLength),await xe(this,"idle",{...e,rejectionEvents:["close"]})),this.writableNeedsDrain&&(this.log("waiting for write queue to drain before closing writable end of stream, %d unsent bytes",this.writeBuffer.byteLength),await xe(this,"drain",{...e,rejectionEvents:["close"]})),await this.sendClose(e),this.onTransportClosed())}};function wd(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var No=class extends ie{streams;protocol;status;log;maConn;streamOptions;earlyStreams;maxEarlyStreams;metrics;constructor(e,t){super(),this.maConn=e,this.protocol=t.protocol,this.streams=[],this.earlyStreams=[],this.status="open",this.log=e.log.newScope(t.name),this.streamOptions=t.streamOptions,this.maxEarlyStreams=t.maxEarlyStreams??10,this.metrics=t.metrics;let n=i=>{try{this.onData(i.data)}catch(a){this.abort(a),this.maConn.abort(a)}};this.maConn.addEventListener("message",n);let o=()=>{this.log("underlying stream drained, signal %d streams to continue writing",this.streams.length),this.streams.forEach(i=>{i.onMuxerDrain()})};this.maConn.addEventListener("drain",o);let s=()=>{this.log("underlying stream closed with status %s and %d streams",this.status,this.streams.length),this.onTransportClosed()};this.maConn.addEventListener("close",s)}send(e){let t=this.maConn.send(e);return t===!1&&(this.log("underlying stream saturated, signal %d streams to pause writing",this.streams.length),this.streams.forEach(n=>{n.onMuxerNeedsDrain()})),t}async close(e){this.status==="closed"||this.status==="closing"||(this.status="closing",await Pe(Promise.all([...this.streams].map(async t=>{await t.close(e)})),e?.signal),this.status="closed")}abort(e){this.status!=="closed"&&(this.status="closing",[...this.streams].forEach(t=>{t.abort(e)}),this.status="closed")}onTransportClosed(e){this.status="closing";try{[...this.streams].forEach(t=>{t.onTransportClosed(e)})}catch(t){this.abort(t)}this.status="closed"}async createStream(e){if(this.status!=="open")throw new Br;let t=this.onCreateStream({...this.streamOptions,...e});return wd(t)&&(t=await t),this.streams.push(t),this.cleanUpStream(t),t}onRemoteStream(e){if(this.streams.push(e),this.cleanUpStream(e),this.listenerCount("stream")===0){this.earlyStreams.push(e),this.earlyStreams.length>this.maxEarlyStreams&&this.abort(new pd(`Too many early streams were opened - ${this.earlyStreams.length}/${this.maxEarlyStreams}`));return}this.safeDispatchEvent("stream",{detail:e})}cleanUpStream(e){let t=n=>{let o=this.streams.findIndex(s=>s===e);o!==-1&&this.streams.splice(o,1),n.error!=null?n.local?this.metrics?.increment({[`${e.direction}_stream_reset`]:!0}):this.metrics?.increment({[`${e.direction}_stream_abort`]:!0}):this.metrics?.increment({[`${e.direction}_stream_end`]:!0})};e.addEventListener("close",t),this.metrics?.increment({[`${e.direction}_stream`]:!0})}addEventListener(...e){super.addEventListener.apply(this,e),e[0]==="stream"&&this.earlyStreams.length>0&&queueMicrotask(()=>{this.earlyStreams.forEach(t=>{this.safeDispatchEvent("stream",{detail:t})}),this.earlyStreams=[]})}};var Oo=class extends Lo{id;protocol;constructor(e){super(e),this.id=e.id,this.protocol=e.protocol??""}async close(e){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.writeStatus="closing",(this.sendingData||this.writeBuffer.byteLength>0)&&(this.log("waiting for write queue to become idle before closing writable end of stream, %d unsent bytes",this.writeBuffer.byteLength),await xe(this,"idle",{...e,rejectionEvents:["close"]})),this.writableNeedsDrain&&(this.log("waiting for write queue to drain before closing writable end of stream, %d unsent bytes, sending %s",this.writeBuffer.byteLength,this.sendingData),await xe(this,"drain",{...e,rejectionEvents:["close"]}),this.log("write queue drained, closing writable end of stream, %d unsent bytes, sending %s",this.writeBuffer.byteLength,this.sendingData)),await this.sendCloseWrite(e),this.writeStatus="closed",this.log("closed writable end gracefully"),this.remoteWriteStatus==="closed"&&this.onTransportClosed())}async closeRead(e){this.readStatus==="closing"||this.readStatus==="closed"||(this.readBuffer.byteLength>0&&this.readBuffer.consume(this.readBuffer.byteLength),this.readStatus="closing",await this.sendCloseRead(e),this.readStatus="closed",this.log("closed readable end gracefully"))}};function le(r){let e=new globalThis.AbortController;function t(){let s=r.filter(i=>i?.aborted===!0).map(i=>i?.reason).pop();e.abort(s);for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}for(let s of r){if(s?.aborted===!0){t();break}s?.addEventListener!=null&&s.addEventListener("abort",t)}function n(){for(let s of r)s?.removeEventListener!=null&&s.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}var Ki=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,s=n*o;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+o*s),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*o}else this.movingAverage=e;this.previousTime=t}};var lI=1.2,uI=2,dI=5e3,fI=6e4,hI=5e3,zr=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;maxTimeout;constructor(e={}){let t=e.interval??hI;this.success=new Ki(t),this.failure=new Ki(t),this.next=new Ki(t),this.failureMultiplier=e.failureMultiplier??uI,this.timeoutMultiplier=e.timeoutMultiplier??lI,this.minTimeout=e.minTimeout??dI,this.maxTimeout=e.maxTimeout??fI,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier));t<this.minTimeout&&(t=this.minTimeout),t>this.maxTimeout&&(t=this.maxTimeout);let n=AbortSignal.timeout(t),o=le([e.signal,n]);return o.start=Date.now(),o.timeout=t,o}cleanUp(e){e.clear();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 Tt=class extends Error{static name="InvalidMultiaddrError";name="InvalidMultiaddrError"},Wn=class extends Error{static name="ValidationError";name="ValidationError"},bd=class extends Error{static name="InvalidParametersError";name="InvalidParametersError"},Ed=class extends Error{static name="UnknownProtocolError";name="UnknownProtocolError"};function Nm(r){return e=>P(e,r)}function Om(r){return e=>C(e,r)}function Vi(r){return new DataView(r.buffer).getUint16(r.byteOffset).toString()}function Ns(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,typeof r=="string"?parseInt(r):r),new Uint8Array(e)}function i7(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=C(e[0],"base32"),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=Ns(n);return Be([t,o],t.length+o.length)}function a7(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=dt.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=Ns(n);return Be([t,o],t.length+o.length)}function Bm(r){let e=r.subarray(0,r.length-2),t=r.subarray(r.length-2),n=P(e,"base32"),o=Vi(t);return`${n}:${o}`}var Mm=function(r){r=r.toString().trim();let e=new Uint8Array(4);return r.split(/\./g).forEach((t,n)=>{let o=parseInt(t,10);if(isNaN(o)||o<0||o>255)throw new Tt("Invalid byte value in IP address");e[n]=o}),e},c7=function(r){let e=0;r=r.toString().trim();let t=r.split(":",8),n;for(n=0;n<t.length;n++){let s=Wr(t[n]),i;s&&(i=Mm(t[n]),t[n]=P(i.subarray(0,2),"base16")),i!=null&&++n<8&&t.splice(n,0,P(i.subarray(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 s=[n,1];for(n=9-t.length;n>0;n--)s.push("0");t.splice.apply(t,s)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){t[n]===""&&(t[n]="0");let s=parseInt(t[n],16);if(isNaN(s)||s<0||s>65535)throw new Tt("Invalid byte value in IP address");o[e++]=s>>8&255,o[e++]=s&255}return o},l7=function(r){if(r.byteLength!==4)throw new Tt("IPv4 address was incorrect length");let e=[];for(let t=0;t<r.byteLength;t++)e.push(r[t]);return e.join(".")},u7=function(r){if(r.byteLength!==16)throw new Tt("IPv6 address was incorrect length");let e=[];for(let n=0;n<r.byteLength;n+=2){let o=r[n],s=r[n+1],i=`${o.toString(16).padStart(2,"0")}${s.toString(16).padStart(2,"0")}`;e.push(i)}let t=e.join(":");try{let n=new URL(`http://[${t}]`);return n.hostname.substring(1,n.hostname.length-1)}catch{throw new Tt(`Invalid IPv6 address "${t}"`)}};function d7(r){try{let e=new URL(`http://[${r}]`);return e.hostname.substring(1,e.hostname.length-1)}catch{throw new Tt(`Invalid IPv6 address "${r}"`)}}var Dm=Object.values(fs).map(r=>r.decoder),pI=(function(){let r=Dm[0].or(Dm[1]);return Dm.slice(2).forEach(e=>r=r.or(e)),r})();function f7(r){return pI.decode(r)}function h7(r){return e=>r.encoder.encode(e)}function mI(r){if(parseInt(r).toString()!==r)throw new Wn("Value must be an integer")}function gI(r){if(r<0)throw new Wn("Value must be a positive integer, or zero")}function yI(r){return e=>{if(e>r)throw new Wn(`Value must be smaller than or equal to ${r}`)}}function wI(...r){return e=>{for(let t of r)t(e)}}var Bc=wI(mI,gI,yI(65535));var gt=-1,Um=class{protocolsByCode=new Map;protocolsByName=new Map;getProtocol(e){let t;if(typeof e=="string"?t=this.protocolsByName.get(e):t=this.protocolsByCode.get(e),t==null)throw new Ed(`Protocol ${e} was unknown`);return t}addProtocol(e){this.protocolsByCode.set(e.code,e),this.protocolsByName.set(e.name,e),e.aliases?.forEach(t=>{this.protocolsByName.set(t,e)})}removeProtocol(e){let t=this.protocolsByCode.get(e);t!=null&&(this.protocolsByCode.delete(t.code),this.protocolsByName.delete(t.name),t.aliases?.forEach(n=>{this.protocolsByName.delete(n)}))}},Yn=new Um,DI=[{code:4,name:"ip4",size:32,valueToBytes:Mm,bytesToValue:l7,validate:r=>{if(!Wr(r))throw new Wn(`Invalid IPv4 address "${r}"`)}},{code:6,name:"tcp",size:16,valueToBytes:Ns,bytesToValue:Vi,validate:Bc},{code:273,name:"udp",size:16,valueToBytes:Ns,bytesToValue:Vi,validate:Bc},{code:33,name:"dccp",size:16,valueToBytes:Ns,bytesToValue:Vi,validate:Bc},{code:41,name:"ip6",size:128,valueToBytes:c7,bytesToValue:u7,stringToValue:d7,validate:r=>{if(!ud(r))throw new Wn(`Invalid IPv6 address "${r}"`)}},{code:42,name:"ip6zone",size:gt},{code:43,name:"ipcidr",size:8,bytesToValue:Nm("base10"),valueToBytes:Om("base10")},{code:53,name:"dns",size:gt},{code:54,name:"dns4",size:gt},{code:55,name:"dns6",size:gt},{code:56,name:"dnsaddr",size:gt},{code:132,name:"sctp",size:16,valueToBytes:Ns,bytesToValue:Vi,validate:Bc},{code:301,name:"udt"},{code:302,name:"utp"},{code:400,name:"unix",size:gt,stringToValue:r=>decodeURIComponent(r),valueToString:r=>encodeURIComponent(r)},{code:421,name:"p2p",aliases:["ipfs"],size:gt,bytesToValue:Nm("base58btc"),valueToBytes:r=>r.startsWith("Q")||r.startsWith("1")?Om("base58btc")(r):G.parse(r).multihash.bytes},{code:444,name:"onion",size:96,bytesToValue:Bm,valueToBytes:i7},{code:445,name:"onion3",size:296,bytesToValue:Bm,valueToBytes:a7},{code:446,name:"garlic64",size:gt},{code:447,name:"garlic32",size:gt},{code:448,name:"tls"},{code:449,name:"sni",size:gt},{code:454,name:"noise"},{code:460,name:"quic"},{code:461,name:"quic-v1"},{code:465,name:"webtransport"},{code:466,name:"certhash",size:gt,bytesToValue:h7(Ja),valueToBytes:f7},{code:480,name:"http"},{code:481,name:"http-path",size:gt,stringToValue:r=>`/${decodeURIComponent(r)}`,valueToString:r=>encodeURIComponent(r.substring(1))},{code:443,name:"https"},{code:477,name:"ws"},{code:478,name:"wss"},{code:479,name:"p2p-websocket-star"},{code:277,name:"p2p-stardust"},{code:275,name:"p2p-webrtc-star"},{code:276,name:"p2p-webrtc-direct"},{code:280,name:"webrtc-direct"},{code:281,name:"webrtc"},{code:290,name:"p2p-circuit"},{code:777,name:"memory",size:gt}];DI.forEach(r=>{Yn.addProtocol(r)});function p7(r){let e=[],t=0;for(;t<r.length;){let n=hr(r,t),o=Yn.getProtocol(n),s=he(n),i=NI(o,r,t+s),a=0;i>0&&o.size===gt&&(a=he(i));let c=s+a+i,l={code:n,name:o.name,bytes:r.subarray(t,t+c)};if(i>0){let d=t+s+a,u=r.subarray(d,d+i);l.value=o.bytesToValue?.(u)??P(u)}e.push(l),t+=c}return e}function m7(r){let e=0,t=[];for(let n of r){if(n.bytes==null){let o=Yn.getProtocol(n.code),s=he(n.code),i,a=0,c=0;n.value!=null&&(i=o.valueToBytes?.(n.value)??C(n.value),a=i.byteLength,o.size===gt&&(c=he(a)));let l=new Uint8Array(s+c+a),d=0;Di(n.code,l,d),d+=s,i!=null&&(o.size===gt&&(Di(a,l,d),d+=c),l.set(i,d)),n.bytes=l}t.push(n.bytes),e+=n.bytes.byteLength}return Be(t,e)}function g7(r){if(r.charAt(0)!=="/")throw new Tt('String multiaddr must start with "/"');let e=[],t="protocol",n="",o="";for(let s=1;s<r.length;s++){let i=r.charAt(s);i!=="/"&&(t==="protocol"?o+=r.charAt(s):n+=r.charAt(s));let a=s===r.length-1;if(i==="/"||a){let c=Yn.getProtocol(o);if(t==="protocol"){if(c.size==null||c.size===0){e.push({code:c.code,name:c.name}),n="",o="",t="protocol";continue}else if(a)throw new Tt(`Component ${o} was missing value`);t="value"}else if(t==="value"){let l={code:c.code,name:c.name};if(c.size!=null&&c.size!==0){if(n==="")throw new Tt(`Component ${o} was missing value`);l.value=c.stringToValue?.(n)??n}e.push(l),n="",o="",t="protocol"}}}if(o!==""&&n!=="")throw new Tt("Incomplete multiaddr");return e}function y7(r){return`/${r.flatMap(e=>{if(e.value==null)return e.name;let t=Yn.getProtocol(e.code);if(t==null)throw new Tt(`Unknown protocol code ${e.code}`);return[e.name,t.valueToString?.(e.value)??e.value]}).join("/")}`}function NI(r,e,t){return r.size==null||r.size===0?0:r.size>0?r.size/8:hr(e,t)}var OI=Symbol.for("nodejs.util.inspect.custom"),Gm=Symbol.for("@multiformats/multiaddr");function BI(r){if(r==null&&(r="/"),gn(r))return r.getComponents();if(r instanceof Uint8Array)return p7(r);if(typeof r=="string")return r=r.replace(/\/(\/)+/,"/").replace(/(\/)+$/,""),r===""&&(r="/"),g7(r);if(Array.isArray(r))return r;throw new Tt("Must be a string, Uint8Array, Component[], or another Multiaddr")}var Ad=class r{[Gm]=!0;#e;#t;#r;constructor(e="/",t={}){this.#e=BI(e),t.validate!==!1&&MI(this)}get bytes(){return this.#r==null&&(this.#r=m7(this.#e)),this.#r}toString(){return this.#t==null&&(this.#t=y7(this.#e)),this.#t}toJSON(){return this.toString()}getComponents(){return[...this.#e.map(e=>({...e}))]}encapsulate(e){let t=new r(e);return new r([...this.#e,...t.getComponents()],{validate:!1})}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new bd(`Address ${this.toString()} does not contain subaddress: ${t}`);return new r(n.slice(0,o),{validate:!1})}decapsulateCode(e){let t;for(let n=this.#e.length-1;n>-1;n--)if(this.#e[n].code===e){t=n;break}return new r(this.#e.slice(0,t),{validate:!1})}equals(e){return ee(this.bytes,e.bytes)}[OI](){return`Multiaddr(${this.toString()})`}};function MI(r){r.getComponents().forEach(e=>{let t=Yn.getProtocol(e.code);e.value!=null&&t.validate?.(e.value)})}function gn(r){return!!r?.[Gm]}function q(r){return new Ad(r)}var Ym=class{readNext;haveNext;ended;nextResult;error;constructor(){this.ended=!1,this.readNext=fe(),this.haveNext=fe()}[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=fe(),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=fe(),await Pe(this.readNext.promise,t?.signal,t)}};function w7(){return new Ym}function UI(r){return r[Symbol.asyncIterator]!=null}async function FI(r,e,t){try{await Promise.all(r.map(async n=>{for await(let o of n)await e.push(o,{signal:t}),t.throwIfAborted()})),await e.end(void 0,{signal:t})}catch(n){await e.end(n,{signal:t}).catch(()=>{})}}async function*$I(r){let e=new AbortController,t=w7();FI(r,t,e.signal).catch(()=>{});try{yield*t}finally{e.abort()}}function*KI(r){for(let e of r)yield*e}function VI(...r){let e=[];for(let t of r)UI(t)||e.push(t);return e.length===r.length?KI(e):$I(r)}var Xt=VI;function zi(r,...e){if(r==null)throw new Error("Empty pipeline");if(Xm(r)){let n=r;r=()=>n.source}else if(E7(r)||b7(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&Xm(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++)Xm(t[n])&&(t[n]=qI(t[n]));return HI(...t)}var HI=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},b7=r=>r?.[Symbol.asyncIterator]!=null,E7=r=>r?.[Symbol.iterator]!=null,Xm=r=>r==null?!1:r.sink!=null&&r.source!=null,qI=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=St({objectMode:!0});t.then(()=>{n.end()},i=>{n.end(i)});let o,s=r.source;if(b7(s))o=async function*(){yield*s,n.end()};else if(E7(s))o=function*(){yield*s,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return Xt(n,o())}return r.source};var WI=4194304,Td=class extends Error{static name="UnwrappedError";name="UnwrappedError"},Vc=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},jm=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Zm=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function zI(r){return typeof r?.closeRead=="function"}function GI(r){return typeof r?.close=="function"}function Qm(r){return zI(r)?r.remoteWriteStatus!=="writable"&&r.readBufferLength===0:GI(r)?r.status!=="open":!1}function YI(r){return r?.addEventListener!=null&&r?.removeEventListener!=null&&r?.send!=null&&r?.push!=null&&r?.log!=null}function Id(r,e){let t=e?.maxBufferSize??WI,n=new Q,o,s=!1;if(!YI(r))throw new A("Argument should be a Stream or a Multiaddr");let i=d=>{if(n.append(d.data),n.byteLength>t){let u=n.byteLength;n.consume(n.byteLength),o?.reject(new Error(`Read buffer overflow - ${u} > ${t}`))}o?.resolve()};r.addEventListener("message",i);let a=d=>{d.error!=null?o?.reject(d.error):o?.resolve()};r.addEventListener("close",a);let c=()=>{o?.resolve()};r.addEventListener("remoteCloseWrite",c);let l={readBuffer:n,async read(d){if(s===!0)throw new Td("Stream was unwrapped");if(Qm(r)){if(n.byteLength===0&&d?.bytes==null)return null;if(d?.bytes!=null&&n.byteLength<d.bytes)throw r.log.error("closed after reading %d/%d bytes",n.byteLength,d.bytes),new Ds(`Unexpected EOF - stream closed after reading ${n.byteLength}/${d.bytes} bytes`)}let u=d?.bytes??1;for(o=Promise.withResolvers();;){if(n.byteLength>=u){o.resolve();break}if(await Pe(o.promise,d?.signal),Qm(r)){if(n.byteLength===0&&d?.bytes==null)return null;break}o=Promise.withResolvers()}let f=d?.bytes??n.byteLength;if(n.byteLength<f){if(Qm(r))throw r.log.error("closed while reading %d/%d bytes",n.byteLength,f),new Ds(`Unexpected EOF - stream closed while reading ${n.byteLength}/${f} bytes`);return l.read(d)}let h=n.sublist(0,f);return n.consume(f),h},async write(d,u){if(s===!0)throw new Td("Stream was unwrapped");r.send(d)||await xe(r,"drain",{signal:u?.signal,rejectionEvents:["close"]})},unwrap(){return s||(s=!0,r.removeEventListener("message",i),r.removeEventListener("close",a),r.removeEventListener("remoteCloseWrite",c),n.byteLength>0&&(r.log("stream unwrapped with %d unread bytes",n.byteLength),r.push(n))),r}};return l}function Mo(r,e={}){let t=Id(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=he(e.maxDataLength));let n=e?.lengthDecoder??hr,o=e?.lengthEncoder??Mt;return{async read(i){let a=-1,c=new Q;for(;;){let d=await t.read({...i,bytes:1});if(d==null)break;c.append(d);try{a=n(c)}catch(u){if(u instanceof RangeError)continue;throw u}if(a<0)throw new Vc("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new Zm(`Message length length too long - ${c.byteLength} > ${e.maxLengthLength}`);if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new jm(`Message length too long - ${a} > ${e.maxDataLength}`);let l=await t.read({...i,bytes:a});if(l==null)throw r.log.error("tried to read %d bytes but the stream closed",a),new Ds(`Unexpected EOF - tried to read ${a} bytes but the stream closed`);if(l.byteLength!==a)throw r.log.error("read %d/%d bytes before the stream closed",l.byteLength,a),new Ds(`Unexpected EOF - read ${l.byteLength}/${a} bytes before the stream closed`);return l},async write(i,a){await t.write(new Q(o(i.byteLength),i),a)},async writeV(i,a){let c=new Q(...i.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap(){return t.unwrap()}}}function Fe(r,e){let t=Mo(r,e),n={read:async(o,s)=>{let i=await t.read(s);return o.decode(i)},write:async(o,s,i)=>{await t.write(s.encode(o),i)},writeV:async(o,s,i)=>{await t.writeV(o.map(a=>s.encode(a)),i)},pb:o=>({read:async s=>n.read(o,s),write:async(s,i)=>n.write(s,o,i),writeV:async(s,i)=>n.writeV(s,o,i),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var XI=1024*1024*4,QI=1024*1024*4,_d=class{buffer;maxBufferSize;lengthDecoder;maxDataLength;encodingLength;constructor(e={}){this.buffer=new Q,this.maxBufferSize=e.maxBufferSize??XI,this.maxDataLength=e.maxDataLength??QI,this.lengthDecoder=e.lengthDecoder??hr,this.encodingLength=e.encodingLength??he}*decode(e){if(this.buffer.append(e),this.buffer.byteLength>this.maxBufferSize)throw new A(`Buffer length limit exceeded - ${this.buffer.byteLength}/${this.maxBufferSize}`);for(;;){let t;try{t=this.lengthDecoder(this.buffer)}catch(s){if(s instanceof RangeError)break;throw s}if(t<0||t>this.maxDataLength)throw new Vc("Invalid message length");let n=this.encodingLength(t),o=n+t;if(this.buffer.byteLength>=o){let s=this.buffer.sublist(n,o);this.buffer.consume(o),s.byteLength>0&&(yield s)}else break}}};var jI=["Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function Jm(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(e==="string"||e==="number"||e==="bigint"||e==="symbol")return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(r instanceof Uint8Array)return"Uint8Array";if(r.constructor===Object)return"Object";let t=ZI(r);return t||"Object"}function ZI(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(jI.includes(e))return e}var y=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}static equals(e,t){return e===t||e.major===t.major&&e.name===t.name}};y.uint=new y(0,"uint",!0);y.negint=new y(1,"negint",!0);y.bytes=new y(2,"bytes",!0);y.string=new y(3,"string",!0);y.array=new y(4,"array",!1);y.map=new y(5,"map",!1);y.tag=new y(6,"tag",!1);y.float=new y(7,"float",!0);y.false=new y(7,"false",!0);y.true=new y(7,"true",!0);y.null=new y(7,"null",!0);y.undefined=new y(7,"undefined",!0);y.break=new y(7,"break",!0);var N=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 Hc=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",JI=new TextEncoder;function Cd(r){return Hc&&globalThis.Buffer.isBuffer(r)}function Bs(r){return r instanceof Uint8Array?Cd(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var e_=24,t_=200,Gi=Hc?r=>r.length>=e_?globalThis.Buffer.from(r):x7(r):r=>r.length>=t_?JI.encode(r):x7(r),yn=r=>Uint8Array.from(r),S7=Hc?(r,e,t)=>Cd(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),A7=Hc?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),Bs(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},T7=Hc?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function kd(r,e){if(Cd(r)&&Cd(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 x7(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):(o>=55296&&o<=57343&&(o=65533),e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}var v7=4096;function I7(r){let e=r.length;if(e<=v7)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=v7));return t}var r_=256,qc=class{constructor(e=r_){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=T7(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=S7(n,0,this.cursor)}else t=A7(this.chunks,this.cursor);return e&&this.reset(),t}},Rd=class{constructor(e){this.dest=e,this.cursor=0,this.chunks=[e]}reset(){this.cursor=0}push(e){if(this.cursor+e.length>this.dest.length)throw new Error("write out of bounds, destination buffer is too small");this.dest.set(e,this.cursor),this.cursor+=e.length}toBytes(e=!1){let t=this.dest.subarray(0,this.cursor);return e&&this.reset(),t}};var J="CBOR decode error:",wn="CBOR encode error:",Wc=[];Wc[23]=1;Wc[24]=2;Wc[25]=3;Wc[26]=5;Wc[27]=9;function Xn(r,e,t){if(r.length-e<t)throw new Error(`${J} not enough data for type`)}var yt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function mr(r,e,t){Xn(r,e,1);let n=r[e];if(t.strict===!0&&n<yt[0])throw new Error(`${J} integer encoded in more bytes than necessary (strict decode)`);return n}function gr(r,e,t){Xn(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<yt[1])throw new Error(`${J} integer encoded in more bytes than necessary (strict decode)`);return n}function yr(r,e,t){Xn(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<yt[2])throw new Error(`${J} integer encoded in more bytes than necessary (strict decode)`);return n}function wr(r,e,t){Xn(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],s=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&s<yt[3])throw new Error(`${J} integer encoded in more bytes than necessary (strict decode)`);if(s<=Number.MAX_SAFE_INTEGER)return Number(s);if(t.allowBigInt===!0)return s;throw new Error(`${J} integers outside of the safe integer range are not supported`)}function _7(r,e,t,n){return new N(y.uint,mr(r,e+1,n),2)}function C7(r,e,t,n){return new N(y.uint,gr(r,e+1,n),3)}function k7(r,e,t,n){return new N(y.uint,yr(r,e+1,n),5)}function R7(r,e,t,n){return new N(y.uint,wr(r,e+1,n),9)}function _r(r,e){return Ve(r,0,e.value)}function Ve(r,e,t){if(t<yt[0]){let n=Number(t);r.push([e|n])}else if(t<yt[1]){let n=Number(t);r.push([e|24,n])}else if(t<yt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<yt[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<yt[4]){let o=[e|27,0,0,0,0,0,0,0],s=Number(n&BigInt(4294967295)),i=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=s&255,s=s>>8,o[7]=s&255,s=s>>8,o[6]=s&255,s=s>>8,o[5]=s&255,o[4]=i&255,i=i>>8,o[3]=i&255,i=i>>8,o[2]=i&255,i=i>>8,o[1]=i&255,r.push(o)}else throw new Error(`${J} encountered BigInt larger than allowable range`)}}_r.encodedSize=function(e){return Ve.encodedSize(e.value)};Ve.encodedSize=function(e){return e<yt[0]?1:e<yt[1]?2:e<yt[2]?3:e<yt[3]?5:9};_r.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function P7(r,e,t,n){return new N(y.negint,-1-mr(r,e+1,n),2)}function L7(r,e,t,n){return new N(y.negint,-1-gr(r,e+1,n),3)}function D7(r,e,t,n){return new N(y.negint,-1-yr(r,e+1,n),5)}var e3=BigInt(-1),N7=BigInt(1);function O7(r,e,t,n){let o=wr(r,e+1,n);if(typeof o!="bigint"){let s=-1-o;if(s>=Number.MIN_SAFE_INTEGER)return new N(y.negint,s,9)}if(n.allowBigInt!==!0)throw new Error(`${J} integers outside of the safe integer range are not supported`);return new N(y.negint,e3-BigInt(o),9)}function Pd(r,e){let t=e.value,n=typeof t=="bigint"?t*e3-N7:t*-1-1;Ve(r,e.type.majorEncoded,n)}Pd.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*e3-N7:t*-1-1;return n<yt[0]?1:n<yt[1]?2:n<yt[2]?3:n<yt[3]?5:9};Pd.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function zc(r,e,t,n){Xn(r,e,t+n);let o=r.slice(e+t,e+t+n);return new N(y.bytes,o,t+n)}function B7(r,e,t,n){return zc(r,e,1,t)}function M7(r,e,t,n){return zc(r,e,2,mr(r,e+1,n))}function U7(r,e,t,n){return zc(r,e,3,gr(r,e+1,n))}function F7(r,e,t,n){return zc(r,e,5,yr(r,e+1,n))}function $7(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${J} 64-bit integer bytes lengths not supported`);return zc(r,e,9,o)}function Ld(r){return r.encodedBytes===void 0&&(r.encodedBytes=y.equals(r.type,y.string)?Gi(r.value):r.value),r.encodedBytes}function Yi(r,e){let t=Ld(e);Ve(r,e.type.majorEncoded,t.length),r.push(t)}Yi.encodedSize=function(e){let t=Ld(e);return Ve.encodedSize(t.length)+t.length};Yi.compareTokens=function(e,t){return o_(Ld(e),Ld(t))};function o_(r,e){return r.length<e.length?-1:r.length>e.length?1:kd(r,e)}var K7=new TextDecoder,i_=32;function a_(r,e,t){if(t-e<i_){let o="";for(let s=e;s<t;s++){let i=r[s];if(i&128)return K7.decode(r.subarray(e,t));o+=String.fromCharCode(i)}return o}return K7.decode(r.subarray(e,t))}function Gc(r,e,t,n,o){let s=t+n;Xn(r,e,s);let i=new N(y.string,a_(r,e+t,e+s),s);return o.retainStringBytes===!0&&(i.byteValue=r.slice(e+t,e+s)),i}function V7(r,e,t,n){return Gc(r,e,1,t,n)}function H7(r,e,t,n){return Gc(r,e,2,mr(r,e+1,n),n)}function q7(r,e,t,n){return Gc(r,e,3,gr(r,e+1,n),n)}function W7(r,e,t,n){return Gc(r,e,5,yr(r,e+1,n),n)}function z7(r,e,t,n){let o=wr(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 G7=Yi;function Xi(r,e,t,n){return new N(y.array,n,t)}function Y7(r,e,t,n){return Xi(r,e,1,t)}function X7(r,e,t,n){return Xi(r,e,2,mr(r,e+1,n))}function Q7(r,e,t,n){return Xi(r,e,3,gr(r,e+1,n))}function j7(r,e,t,n){return Xi(r,e,5,yr(r,e+1,n))}function Z7(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${J} 64-bit integer array lengths not supported`);return Xi(r,e,9,o)}function J7(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${J} indefinite length items not allowed`);return Xi(r,e,1,1/0)}function Dd(r,e){Ve(r,y.array.majorEncoded,e.value)}Dd.compareTokens=_r.compareTokens;Dd.encodedSize=function(e){return Ve.encodedSize(e.value)};function Qi(r,e,t,n){return new N(y.map,n,t)}function ey(r,e,t,n){return Qi(r,e,1,t)}function ty(r,e,t,n){return Qi(r,e,2,mr(r,e+1,n))}function ry(r,e,t,n){return Qi(r,e,3,gr(r,e+1,n))}function ny(r,e,t,n){return Qi(r,e,5,yr(r,e+1,n))}function oy(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${J} 64-bit integer map lengths not supported`);return Qi(r,e,9,o)}function sy(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${J} indefinite length items not allowed`);return Qi(r,e,1,1/0)}function Nd(r,e){Ve(r,y.map.majorEncoded,e.value)}Nd.compareTokens=_r.compareTokens;Nd.encodedSize=function(e){return Ve.encodedSize(e.value)};function iy(r,e,t,n){return new N(y.tag,t,1)}function ay(r,e,t,n){return new N(y.tag,mr(r,e+1,n),2)}function cy(r,e,t,n){return new N(y.tag,gr(r,e+1,n),3)}function ly(r,e,t,n){return new N(y.tag,yr(r,e+1,n),5)}function uy(r,e,t,n){return new N(y.tag,wr(r,e+1,n),9)}function Od(r,e){Ve(r,y.tag.majorEncoded,e.value)}Od.compareTokens=_r.compareTokens;Od.encodedSize=function(e){return Ve.encodedSize(e.value)};var t3=20,r3=21,n3=22,o3=23;function dy(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${J} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new N(y.null,null,1):new N(y.undefined,void 0,1)}function fy(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${J} indefinite length items not allowed`);return new N(y.break,void 0,1)}function s3(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 N(y.float,r,e)}function hy(r,e,t,n){return s3(i3(r,e+1),3,n)}function py(r,e,t,n){return s3(a3(r,e+1),5,n)}function my(r,e,t,n){return s3(by(r,e+1),9,n)}function Yc(r,e,t){let n=e.value;if(n===!1)r.push([y.float.majorEncoded|t3]);else if(n===!0)r.push([y.float.majorEncoded|r3]);else if(n===null)r.push([y.float.majorEncoded|n3]);else if(n===void 0)r.push([y.float.majorEncoded|o3]);else{let o,s=!1;(!t||t.float64!==!0)&&(yy(n),o=i3(Yr,1),n===o||Number.isNaN(n)?(Yr[0]=249,r.push(Yr.slice(0,3)),s=!0):(wy(n),o=a3(Yr,1),n===o&&(Yr[0]=250,r.push(Yr.slice(0,5)),s=!0))),s||(f_(n),o=by(Yr,1),Yr[0]=251,r.push(Yr.slice(0,9)))}}Yc.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){yy(n);let o=i3(Yr,1);if(n===o||Number.isNaN(n))return 3;if(wy(n),o=a3(Yr,1),n===o)return 5}return 9};var gy=new ArrayBuffer(9),Cr=new DataView(gy,1),Yr=new Uint8Array(gy,0);function yy(r){if(r===1/0)Cr.setUint16(0,31744,!1);else if(r===-1/0)Cr.setUint16(0,64512,!1);else if(Number.isNaN(r))Cr.setUint16(0,32256,!1);else{Cr.setFloat32(0,r);let e=Cr.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)Cr.setUint16(0,31744,!1);else if(t===0)Cr.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?Cr.setUint16(0,0):o<-14?Cr.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):Cr.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function i3(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,s;return n===0?s=o*2**-24:n!==31?s=(o+1024)*2**(n-25):s=o===0?1/0:NaN,t&32768?-s:s}function wy(r){Cr.setFloat32(0,r,!1)}function a3(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 f_(r){Cr.setFloat64(0,r,!1)}function by(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)}Yc.compareTokens=_r.compareTokens;function ve(r,e,t){throw new Error(`${J} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function Bd(r){return()=>{throw new Error(`${J} ${r}`)}}var V=[];for(let r=0;r<=23;r++)V[r]=ve;V[24]=_7;V[25]=C7;V[26]=k7;V[27]=R7;V[28]=ve;V[29]=ve;V[30]=ve;V[31]=ve;for(let r=32;r<=55;r++)V[r]=ve;V[56]=P7;V[57]=L7;V[58]=D7;V[59]=O7;V[60]=ve;V[61]=ve;V[62]=ve;V[63]=ve;for(let r=64;r<=87;r++)V[r]=B7;V[88]=M7;V[89]=U7;V[90]=F7;V[91]=$7;V[92]=ve;V[93]=ve;V[94]=ve;V[95]=Bd("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)V[r]=V7;V[120]=H7;V[121]=q7;V[122]=W7;V[123]=z7;V[124]=ve;V[125]=ve;V[126]=ve;V[127]=Bd("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)V[r]=Y7;V[152]=X7;V[153]=Q7;V[154]=j7;V[155]=Z7;V[156]=ve;V[157]=ve;V[158]=ve;V[159]=J7;for(let r=160;r<=183;r++)V[r]=ey;V[184]=ty;V[185]=ry;V[186]=ny;V[187]=oy;V[188]=ve;V[189]=ve;V[190]=ve;V[191]=sy;for(let r=192;r<=215;r++)V[r]=iy;V[216]=ay;V[217]=cy;V[218]=ly;V[219]=uy;V[220]=ve;V[221]=ve;V[222]=ve;V[223]=ve;for(let r=224;r<=243;r++)V[r]=Bd("simple values are not supported");V[244]=ve;V[245]=ve;V[246]=ve;V[247]=dy;V[248]=Bd("simple values are not supported");V[249]=hy;V[250]=py;V[251]=my;V[252]=ve;V[253]=ve;V[254]=ve;V[255]=fy;var Xr=[];for(let r=0;r<24;r++)Xr[r]=new N(y.uint,r,1);for(let r=-1;r>=-24;r--)Xr[31-r]=new N(y.negint,r,1);Xr[64]=new N(y.bytes,new Uint8Array(0),1);Xr[96]=new N(y.string,"",1);Xr[128]=new N(y.array,0,1);Xr[160]=new N(y.map,0,1);Xr[244]=new N(y.false,!1,1);Xr[245]=new N(y.true,!0,1);Xr[246]=new N(y.null,null,1);function c3(r){switch(r.type){case y.false:return yn([244]);case y.true:return yn([245]);case y.null:return yn([246]);case y.bytes:return r.value.length?void 0:yn([64]);case y.string:return r.value===""?yn([96]):void 0;case y.array:return r.value===0?yn([128]):void 0;case y.map:return r.value===0?yn([160]):void 0;case y.uint:return r.value<24?yn([Number(r.value)]):void 0;case y.negint:if(r.value>=-24)return yn([31-Number(r.value)])}}var p_={float64:!1,mapSorter:y_,quickEncodeToken:c3},Ay=Object.freeze({float64:!0,mapSorter:w_,quickEncodeToken:c3});function m_(){let r=[];return r[y.uint.major]=_r,r[y.negint.major]=Pd,r[y.bytes.major]=Yi,r[y.string.major]=G7,r[y.array.major]=Dd,r[y.map.major]=Nd,r[y.tag.major]=Od,r[y.float.major]=Yc,r}var ji=m_(),Md=new qc,Qc=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(`${wn} object contains circular references`);return new r(t,e)}},Uo={null:new N(y.null,null),undefined:new N(y.undefined,void 0),true:new N(y.true,!0),false:new N(y.false,!1),emptyArray:new N(y.array,0),emptyMap:new N(y.map,0)},bn={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new N(y.float,r):r>=0?new N(y.uint,r):new N(y.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new N(y.uint,r):new N(y.negint,r)},Uint8Array(r,e,t,n){return new N(y.bytes,r)},string(r,e,t,n){return new N(y.string,r)},boolean(r,e,t,n){return r?Uo.true:Uo.false},null(r,e,t,n){return Uo.null},undefined(r,e,t,n){return Uo.undefined},ArrayBuffer(r,e,t,n){return new N(y.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new N(y.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[Uo.emptyArray,new N(y.break)]:Uo.emptyArray;n=Qc.createCheck(n,r);let o=[],s=0;for(let i of r)o[s++]=Ud(i,t,n);return t.addBreakTokens?[new N(y.array,r.length),o,new N(y.break)]:[new N(y.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",s=o?r.keys():Object.keys(r),i=o?r.size:s.length,a;if(i){a=new Array(i),n=Qc.createCheck(n,r);let c=!o&&t.ignoreUndefinedProperties,l=0;for(let d of s){let u=o?r.get(d):r[d];c&&u===void 0||(a[l++]=[Ud(d,t,n),Ud(u,t,n)])}l<i&&(a.length=l)}return a?.length?(g_(a,t),t.addBreakTokens?[new N(y.map,a.length),a,new N(y.break)]:[new N(y.map,a.length),a]):t.addBreakTokens===!0?[Uo.emptyMap,new N(y.break)]:Uo.emptyMap}};bn.Map=bn.Object;bn.Buffer=bn.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))bn[`${r}Array`]=bn.DataView;function Ud(r,e={},t){let n=Jm(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||bn[n];if(typeof o=="function"){let i=o(r,n,e,t);if(i!=null)return i}let s=bn[n];if(!s)throw new Error(`${wn} unsupported type: ${n}`);return s(r,n,e,t)}function g_(r,e){e.mapSorter&&r.sort(e.mapSorter)}function y_(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,s=ji[o].compareTokens(t,n);return s===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),s}function w_(r,e){if(r[0]instanceof N&&e[0]instanceof N){let t=r[0],n=e[0];return t._keyBytes||(t._keyBytes=Ey(t.value)),n._keyBytes||(n._keyBytes=Ey(n.value)),kd(t._keyBytes,n._keyBytes)}throw new Error("rfc8949MapSorter: complex key types are not supported yet")}function Ey(r){return Fd(r,ji,Ay)}function Xc(r,e,t,n){if(Array.isArray(e))for(let o of e)Xc(r,o,t,n);else t[e.type.major](r,e,n)}var xy=y.uint.majorEncoded,vy=y.negint.majorEncoded,b_=y.bytes.majorEncoded,E_=y.string.majorEncoded,Sy=y.array.majorEncoded,x_=y.float.majorEncoded|t3,v_=y.float.majorEncoded|r3,S_=y.float.majorEncoded|n3,A_=y.float.majorEncoded|o3,T_=BigInt(-1),I_=BigInt(1);function __(r){return r.addBreakTokens!==!0}function Ty(r,e,t,n){let o=Jm(e),s=t.typeEncoders&&t.typeEncoders[o];if(s){let i=s(e,o,t,n);if(i!=null){Xc(r,i,ji,t);return}}switch(o){case"null":r.push([S_]);return;case"undefined":r.push([A_]);return;case"boolean":r.push([e?v_:x_]);return;case"number":!Number.isInteger(e)||!Number.isSafeInteger(e)?Yc(r,new N(y.float,e),t):e>=0?Ve(r,xy,e):Ve(r,vy,e*-1-1);return;case"bigint":e>=BigInt(0)?Ve(r,xy,e):Ve(r,vy,e*T_-I_);return;case"string":{let i=Gi(e);Ve(r,E_,i.length),r.push(i);return}case"Uint8Array":Ve(r,b_,e.length),r.push(e);return;case"Array":if(!e.length){r.push([Sy]);return}n=Qc.createCheck(n,e),Ve(r,Sy,e.length);for(let i of e)Ty(r,i,t,n);return;case"Object":case"Map":{let i=bn.Object(e,o,t,n);Xc(r,i,ji,t)}return;default:{let i=bn[o];if(!i)throw new Error(`${wn} unsupported type: ${o}`);let a=i(e,o,t,n);Xc(r,a,ji,t)}}}function Fd(r,e,t,n){let o=n instanceof Uint8Array,s=o?new Rd(n):Md,i=Ud(r,t);if(!Array.isArray(i)&&t.quickEncodeToken){let a=t.quickEncodeToken(i);if(a)return o?(s.push(a),s.toBytes()):a;let c=e[i.type.major];if(c.encodedSize){let l=c.encodedSize(i,t);if(o||(s=new qc(l)),c(s,i,t),s.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${i} was wrong`);return o?s.toBytes():Bs(s.chunks[0])}}return s.reset(),Xc(s,i,e,t),s.toBytes(!0)}function Fo(r,e){return e=Object.assign({},p_,e),__(e)?(Md.reset(),Ty(Md,r,e,void 0),Md.toBytes(!0)):Fd(r,ji,e)}var C_={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},$d=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=Xr[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}},jc=Symbol.for("DONE"),Kd=Symbol.for("BREAK");function k_(r,e,t){let n=[];for(let o=0;o<r.value;o++){let s=Zi(e,t);if(s===Kd){if(r.value===1/0)break;throw new Error(`${J} got unexpected break to lengthed array`)}if(s===jc)throw new Error(`${J} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=s}return n}function R_(r,e,t){let n=t.useMaps===!0,o=t.rejectDuplicateMapKeys===!0,s=n?void 0:{},i=n?new Map:void 0;for(let a=0;a<r.value;a++){let c=Zi(e,t);if(c===Kd){if(r.value===1/0)break;throw new Error(`${J} got unexpected break to lengthed map`)}if(c===jc)throw new Error(`${J} found map but not enough entries (got ${a} [no key], expected ${r.value})`);if(!n&&typeof c!="string")throw new Error(`${J} non-string keys not supported (got ${typeof c})`);if(o&&(n&&i.has(c)||!n&&Object.hasOwn(s,c)))throw new Error(`${J} found repeat map key "${c}"`);let l=Zi(e,t);if(l===jc)throw new Error(`${J} found map but not enough entries (got ${a} [no value], expected ${r.value})`);n?i.set(c,l):s[c]=l}return n?i:s}function Zi(r,e){if(r.done())return jc;let t=r.next();if(y.equals(t.type,y.break))return Kd;if(t.type.terminal)return t.value;if(y.equals(t.type,y.array))return k_(t,r,e);if(y.equals(t.type,y.map))return R_(t,r,e);if(y.equals(t.type,y.tag)){if(e.tags&&typeof e.tags[t.value]=="function"){let n=Zi(r,e);return e.tags[t.value](n)}throw new Error(`${J} tag not supported (${t.value})`)}throw new Error("unsupported")}function l3(r,e){if(!(r instanceof Uint8Array))throw new Error(`${J} data to decode must be a Uint8Array`);e=Object.assign({},C_,e);let t=Bs(r),n=e.tokenizer||new $d(t,e),o=Zi(n,e);if(o===jc)throw new Error(`${J} did not find any content to decode`);if(o===Kd)throw new Error(`${J} got unexpected break`);return[o,r.subarray(n.pos())]}function br(r,e){let[t,n]=l3(r,e);if(n.length>0)throw new Error(`${J} too many terminals, data makes no sense`);return t}var Vd=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Ji=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Hd=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},Zc=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function qd(r){return r[Symbol.asyncIterator]!=null}function Iy(r,e){if(r.byteLength>e)throw new Ji("Message length too long")}var zd=r=>{let e=he(r),t=Ye(e);return Mt(r,t),zd.bytes=e,t};zd.bytes=0;function Qn(r,e){e=e??{};let t=e.lengthEncoder??zd,n=e?.maxDataLength??4194304;function*o(s){Iy(s,n);let i=t(s.byteLength);i instanceof Uint8Array?yield i:yield*i,s instanceof Uint8Array?yield s:yield*s}return qd(r)?(async function*(){for await(let s of r)yield*o(s)})():(function*(){for(let s of r)yield*o(s)})()}Qn.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??zd,n=e?.maxDataLength??4194304;return Iy(r,n),new Q(t(r.byteLength),r)};var Us;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(Us||(Us={}));var d3=r=>{let e=hr(r);return d3.bytes=he(e),e};d3.bytes=0;function Fs(r,e){let t=new Q,n=Us.LENGTH,o=-1,s=e?.lengthDecoder??d3,i=e?.maxLengthLength??8,a=e?.maxDataLength??4194304;function*c(){for(;t.byteLength>0;){if(n===Us.LENGTH)try{if(o=s(t),o<0)throw new Vd("Invalid message length");if(o>a)throw new Ji("Message length too long");let l=s.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=Us.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>i)throw new Hd("Message length length too long");break}throw l}if(n===Us.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=Us.LENGTH}}}return qd(r)?(async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Zc("Unexpected end of input")})():(function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Zc("Unexpected end of input")})()}Fs.fromReader=(r,e)=>{let t=1,n=(async function*(){for(;;)try{let{done:s,value:i}=await r.next(t);if(s===!0)return;i!=null&&(yield i)}catch(s){if(s.code==="ERR_UNDER_READ")return{done:!0,value:null};throw s}finally{t=1}})();return Fs(n,{...e??{},onLength:s=>{t=s}})};function L_(r,e){if(typeof r=="string")return D_(r);if(typeof r=="number")return B_(r,e);throw Error(`Value provided to ms() must be a string or number. value=${JSON.stringify(r)}`)}var Gd=L_;function D_(r){if(typeof r!="string"||r.length===0||r.length>100)throw Error(`Value provided to ms.parse() must be a string with length between 1 and 99. value=${JSON.stringify(r)}`);let e=/^(?<value>-?\d*\.?\d+) *(?<unit>milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|months?|mo|years?|yrs?|y)?$/i.exec(r);if(!e?.groups)return NaN;let{value:t,unit:n="ms"}=e.groups,o=parseFloat(t),s=n.toLowerCase();switch(s){case"years":case"year":case"yrs":case"yr":case"y":return o*315576e5;case"months":case"month":case"mo":return o*26298e5;case"weeks":case"week":case"w":return o*6048e5;case"days":case"day":case"d":return o*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return o*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return o*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return o*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return o;default:throw Error(`Unknown unit "${s}" provided to ms.parse(). value=${JSON.stringify(r)}`)}}function N_(r){let e=Math.abs(r);return e>=315576e5?`${Math.round(r/315576e5)}y`:e>=26298e5?`${Math.round(r/26298e5)}mo`:e>=6048e5?`${Math.round(r/6048e5)}w`: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 O_(r){let e=Math.abs(r);return e>=315576e5?$s(r,e,315576e5,"year"):e>=26298e5?$s(r,e,26298e5,"month"):e>=6048e5?$s(r,e,6048e5,"week"):e>=864e5?$s(r,e,864e5,"day"):e>=36e5?$s(r,e,36e5,"hour"):e>=6e4?$s(r,e,6e4,"minute"):e>=1e3?$s(r,e,1e3,"second"):`${r} ms`}function B_(r,e){if(typeof r!="number"||!Number.isFinite(r))throw Error("Value provided to ms.format() must be of type number.");return e?.long?O_(r):N_(r)}function $s(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function f3(r){t.debug=t,t.default=t,t.coerce=c,t.disable=s,t.enable=o,t.enabled=i,t.humanize=Gd,t.destroy=l,Object.keys(r).forEach(d=>{t[d]=r[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let u=0;for(let f=0;f<d.length;f++)u=(u<<5)-u+d.charCodeAt(f),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(d,u){let f,h=null,p,g;function m(...w){if(!m.enabled)return;let I=m,T=Number(new Date),D=T-(f||T);I.diff=D,I.prev=f,I.curr=T,f=T,w[0]=t.coerce(w[0]),typeof w[0]!="string"&&w.unshift("%O");let F=0;w[0]=w[0].replace(/%([a-zA-Z%])/g,(z,S)=>{if(z==="%%")return"%";F++;let x=t.formatters[S];if(typeof x=="function"){let L=w[F];z=x.call(I,L),w.splice(F,1),F--}return z}),t.formatArgs.call(I,w),u?.onLog!=null&&u.onLog(...w),(I.log||t.log).apply(I,w)}return m.namespace=d,m.useColors=t.useColors(),m.color=t.selectColor(d),m.extend=n,m.destroy=t.destroy,Object.defineProperty(m,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(p!==t.namespaces&&(p=t.namespaces,g=t.enabled(d)),g),set:w=>{h=w}}),typeof t.init=="function"&&t.init(m),m}function n(d,u){let f=t(this.namespace+(typeof u>"u"?":":u)+d);return f.log=this.log,f}function o(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let u,f=(typeof d=="string"?d:"").split(/[\s,]+/),h=f.length;for(u=0;u<h;u++)f[u]&&(d=f[u].replace(/\*/g,".*?"),d[0]==="-"?t.skips.push(new RegExp("^"+d.substr(1)+"$")):t.names.push(new RegExp("^"+d+"$")))}function s(){let d=[...t.names.map(a),...t.skips.map(a).map(u=>"-"+u)].join(",");return t.enable(""),d}function i(d){if(d[d.length-1]==="*")return!0;let u,f;for(u=0,f=t.skips.length;u<f;u++)if(t.skips[u].test(d))return!1;for(u=0,f=t.names.length;u<f;u++)if(t.names[u].test(d))return!0;return!1}function a(d){return d.toString().substring(2,d.toString().length-2).replace(/\.\*\?$/,"*")}function c(d){return d instanceof Error?d.stack??d.message:d}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 Yd=H_(),M_=["#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 U_(){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 F_(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+Gd(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 $_=console.debug??console.log??(()=>{});function K_(r){try{r?Yd?.setItem("debug",r):Yd?.removeItem("debug")}catch{}}function V_(){let r;try{r=Yd?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function H_(){try{return localStorage}catch{}}function q_(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var Cy=f3({formatArgs:F_,save:K_,load:V_,useColors:U_,setupFormatters:q_,colors:M_,storage:Yd,log:$_});var rr=Cy;rr.formatters.b=r=>r==null?"undefined":Ne.baseEncode(r);rr.formatters.t=r=>r==null?"undefined":dt.baseEncode(r);rr.formatters.m=r=>r==null?"undefined":nt.baseEncode(r);rr.formatters.p=r=>r==null?"undefined":r.toString();rr.formatters.c=r=>r==null?"undefined":r.toString();rr.formatters.k=r=>r==null?"undefined":r.toString();rr.formatters.a=r=>r==null?"undefined":r.toString();function ky(r,e=""){let t=Ry(r.message),n=Ry(r.stack);return t!=null&&n!=null?n.includes(t)?`${n.split(`
2
+ "use strict";var Helia=(()=>{var Zk=Object.create;var pf=Object.defineProperty;var Jk=Object.getOwnPropertyDescriptor;var eC=Object.getOwnPropertyNames;var tC=Object.getPrototypeOf,rC=Object.prototype.hasOwnProperty;var Zr=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ht=(r,e)=>{for(var t in e)pf(r,t,{get:e[t],enumerable:!0})},qy=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of eC(e))!rC.call(r,o)&&o!==t&&pf(r,o,{get:()=>e[o],enumerable:!(n=Jk(e,o))||n.enumerable});return r};var wo=(r,e,t)=>(t=r!=null?Zk(tC(r)):{},qy(e||!r||!r.__esModule?pf(t,"default",{value:r,enumerable:!0}):t,r)),nC=r=>qy(pf({},"__esModule",{value:!0}),r);var Gy=Zr((mK,fg)=>{"use strict";var oC=Object.prototype.hasOwnProperty,ar="~";function gl(){}Object.create&&(gl.prototype=Object.create(null),new gl().__proto__||(ar=!1));function iC(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function Wy(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new iC(t,n||r,o),s=ar?ar+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 Tf(r,e){--r._eventsCount===0?r._events=new gl:delete r._events[e]}function jt(){this._events=new gl,this._eventsCount=0}jt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)oC.call(t,n)&&e.push(ar?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};jt.prototype.listeners=function(e){var t=ar?ar+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};jt.prototype.listenerCount=function(e){var t=ar?ar+e:e,n=this._events[t];return n?n.fn?1:n.length:0};jt.prototype.emit=function(e,t,n,o,i,s){var a=ar?ar+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};jt.prototype.on=function(e,t,n){return Wy(this,e,t,n,!1)};jt.prototype.once=function(e,t,n){return Wy(this,e,t,n,!0)};jt.prototype.removeListener=function(e,t,n,o){var i=ar?ar+e:e;if(!this._events[i])return this;if(!t)return Tf(this,i),this;var s=this._events[i];if(s.fn)s.fn===t&&(!o||s.once)&&(!n||s.context===n)&&Tf(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:Tf(this,i)}return this};jt.prototype.removeAllListeners=function(e){var t;return e?(t=ar?ar+e:e,this._events[t]&&Tf(this,t)):(this._events=new gl,this._eventsCount=0),this};jt.prototype.off=jt.prototype.removeListener;jt.prototype.addListener=jt.prototype.on;jt.prefixed=ar;jt.EventEmitter=jt;typeof fg<"u"&&(fg.exports=jt)});var g7=Zr((CH,m7)=>{m7.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 e4=Zr(Za=>{"use strict";Object.defineProperty(Za,"__esModule",{value:!0});Za.Netmask4Impl=void 0;Za.ip2long=Qa;Za.long2ip=Zn;function Zn(r){let e=(r&-16777216)>>>24,t=(r&255<<16)>>>16,n=(r&65280)>>>8,o=r&255;return[e,t,n,o].join(".")}var GP=48,jP=97,YP=65;function XP(r){let e=0,t=10,n="9",o=0;r.length>1&&r[o]==="0"&&(r[o+1]==="x"||r[o+1]==="X"?(o+=2,t=16):"0"<=r[o+1]&&r[o+1]<="9"&&(o++,t=8,n="7"));let i=o;for(;o<r.length;){if("0"<=r[o]&&r[o]<=n)e=e*t+(r.charCodeAt(o)-GP)>>>0;else if(t===16)if("a"<=r[o]&&r[o]<="f")e=e*t+(10+r.charCodeAt(o)-jP)>>>0;else if("A"<=r[o]&&r[o]<="F")e=e*t+(10+r.charCodeAt(o)-YP)>>>0;else break;else break;if(e>4294967295)throw new Error("too large");o++}if(o===i)throw new Error("empty octet");return[e,o]}function Qa(r){let e=[];for(let t=0;t<=3&&r.length!==0;t++){if(t>0){if(r[0]!==".")throw new Error("Invalid IP");r=r.substring(1)}let[n,o]=XP(r);r=r.substring(o),e.push(n)}if(r.length!==0)throw new Error("Invalid IP");switch(e.length){case 1:if(e[0]>4294967295)throw new Error("Invalid IP");return e[0]>>>0;case 2:if(e[0]>255||e[1]>16777215)throw new Error("Invalid IP");return(e[0]<<24|e[1])>>>0;case 3:if(e[0]>255||e[1]>255||e[2]>65535)throw new Error("Invalid IP");return(e[0]<<24|e[1]<<16|e[2])>>>0;case 4:if(e[0]>255||e[1]>255||e[2]>255||e[3]>255)throw new Error("Invalid IP");return(e[0]<<24|e[1]<<16|e[2]<<8|e[3])>>>0;default:throw new Error("Invalid IP")}}var J3=class r{constructor(e,t){if(typeof e!="string")throw new Error("Missing `net' parameter");let n=t;if(!n){let o=e.split("/",2);e=o[0],n=o[1]}if(n||(n=32),typeof n=="string"&&n.indexOf(".")>-1){try{this.maskLong=Qa(n)}catch{throw new Error("Invalid mask: "+n)}this.bitmask=NaN;for(let o=32;o>=0;o--)if(this.maskLong===4294967295<<32-o>>>0){this.bitmask=o;break}}else if(n||n===0)this.bitmask=parseInt(n,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(Qa(e)&this.maskLong)>>>0}catch{throw new Error("Invalid net address: "+e)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+n);this.size=Math.pow(2,32-this.bitmask),this.base=Zn(this.netLong),this.mask=Zn(this.maskLong),this.hostmask=Zn(~this.maskLong),this.first=this.bitmask<=30?Zn(this.netLong+1):this.base,this.last=this.bitmask<=30?Zn(this.netLong+this.size-2):Zn(this.netLong+this.size-1),this.broadcast=this.bitmask<=30?Zn(this.netLong+this.size-1):void 0}contains(e){return typeof e=="string"&&(e.indexOf("/")>0||e.split(".").length!==4)&&(e=new r(e)),e instanceof r?this.contains(e.base)&&this.contains(e.broadcast||e.last):(Qa(e)&this.maskLong)>>>0===(this.netLong&this.maskLong)>>>0}next(e=1){return new r(Zn(this.netLong+this.size*e),this.mask)}forEach(e){let t=Qa(this.first),n=Qa(this.last),o=0;for(;t<=n;)e(Zn(t),t,o),o++,t++}toString(){return this.base+"/"+this.bitmask}};Za.Netmask4Impl=J3});var Iw=Zr(Ja=>{"use strict";Object.defineProperty(Ja,"__esModule",{value:!0});Ja.Netmask6Impl=void 0;Ja.ip6bigint=r4;Ja.bigint2ip6=Os;var QP=e4(),t4=(1n<<128n)-1n;function r4(r){let e=r.indexOf("%");e!==-1&&(r=r.substring(0,e));let t=r.lastIndexOf(":");if(t!==-1&&r.indexOf(".",t)!==-1){let n=r.substring(t+1),o=(0,QP.ip2long)(n),i=r.substring(0,t+1)+"0:0";return _w(i)&~0xffffffffn|BigInt(o)}return _w(r)}function _w(r){let e=r.indexOf("::"),t;if(e!==-1){let o=r.substring(0,e),i=r.substring(e+2),s=o===""?[]:o.split(":"),a=i===""?[]:i.split(":"),c=8-s.length-a.length;if(c<0)throw new Error("Invalid IPv6: too many groups");t=[...s,...Array(c).fill("0"),...a]}else t=r.split(":");if(t.length!==8)throw new Error("Invalid IPv6: expected 8 groups, got "+t.length);let n=0n;for(let o=0;o<8;o++){let i=t[o];if(i.length===0||i.length>4)throw new Error('Invalid IPv6: bad group "'+i+'"');let s=parseInt(i,16);if(isNaN(s)||s<0||s>65535)throw new Error('Invalid IPv6: bad group "'+i+'"');n=n<<16n|BigInt(s)}return n}function Os(r){if(r<0n||r>t4)throw new Error("Invalid IPv6 address value");let e=[];for(let s=0;s<8;s++)e.unshift(Number(r&0xffffn)),r>>=16n;let t=-1,n=0,o=-1,i=0;for(let s=0;s<8;s++)e[s]===0?o===-1?(o=s,i=1):i++:(i>n&&i>=2&&(t=o,n=i),o=-1,i=0);if(i>n&&i>=2&&(t=o,n=i),t!==-1&&t+n===8&&t>0)return e.slice(0,t).map(a=>a.toString(16)).join(":")+"::";if(t===0)return"::"+e.slice(n).map(a=>a.toString(16)).join(":");if(t>0){let s=e.slice(0,t).map(c=>c.toString(16)),a=e.slice(t+n).map(c=>c.toString(16));return s.join(":")+"::"+a.join(":")}else return e.map(s=>s.toString(16)).join(":")}var n4=class r{constructor(e,t){if(typeof e!="string")throw new Error("Missing `net' parameter");let n=t;if(n==null){let o=e.indexOf("/");o!==-1?(n=parseInt(e.substring(o+1),10),e=e.substring(0,o)):n=128}if(isNaN(n)||n<0||n>128)throw new Error("Invalid mask for IPv6: "+n);this.bitmask=n,this.bitmask===0?this.maskBigint=0n:this.maskBigint=t4>>BigInt(128-this.bitmask)<<BigInt(128-this.bitmask);try{this.netBigint=r4(e)&this.maskBigint}catch{throw new Error("Invalid IPv6 net address: "+e)}this.size=Number(1n<<BigInt(128-this.bitmask)),this.base=Os(this.netBigint),this.mask=Os(this.maskBigint),this.hostmask=Os(~this.maskBigint&t4),this.first=this.base,this.last=Os(this.netBigint+(1n<<BigInt(128-this.bitmask))-1n),this.broadcast=void 0}contains(e){return typeof e=="string"&&e.indexOf("/")>0&&(e=new r(e)),e instanceof r?this.contains(e.base)&&this.contains(e.last):(r4(e)&this.maskBigint)===this.netBigint}next(e=1){let t=1n<<BigInt(128-this.bitmask);return new r(Os(this.netBigint+t*BigInt(e)),this.bitmask)}forEach(e){let t=this.netBigint,n=1n<<BigInt(128-this.bitmask),o=this.netBigint+n-1n,i=0;for(;t<=o;)e(Os(t),Number(t),i),i++,t++}toString(){return this.base+"/"+this.bitmask}};Ja.Netmask6Impl=n4});var kw=Zr(ah=>{"use strict";Object.defineProperty(ah,"__esModule",{value:!0});ah.Netmask=void 0;var ZP=e4(),JP=Iw(),o4=class r{constructor(e,t){if(typeof e!="string")throw new Error("Missing `net' parameter");(e.indexOf("/")!==-1?e.substring(0,e.indexOf("/")):e).indexOf(":")!==-1?this._impl=new JP.Netmask6Impl(e,t):this._impl=new ZP.Netmask4Impl(e,t),this.base=this._impl.base,this.mask=this._impl.mask,this.hostmask=this._impl.hostmask,this.bitmask=this._impl.bitmask,this.size=this._impl.size,this.first=this._impl.first,this.last=this._impl.last,this.broadcast=this._impl.broadcast}contains(e){return typeof e=="string"&&(e.indexOf("/")>0?e=new r(e):e.indexOf(":")===-1&&e.split(".").length!==4&&(e=new r(e))),e instanceof r?this.contains(e.base)&&this.contains(e.broadcast||e.last):this._impl.contains(e)}next(e=1){let t=this._impl.next(e);return new r(t.base,t.bitmask)}forEach(e){this._impl.forEach(e)}toString(){return this._impl.toString()}};ah.Netmask=o4});var vp=Zr((sae,m8)=>{var iae=(function(){typeof m8<"u"&&(m8.exports=y);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(T){var S=T-T%1;return S==0&&(T<0||T===0&&1/T!=1/0)?-0:S},u=y.prototype,d=(y.fromDate=function(T){return new y(+T)},y.fromInt64BE=L(0,1,2,3,0,4),y.fromInt64LE=L(3,2,1,0,4,0),y.fromString=function($){var S,B=new y,$=($+="").replace(/^\s*[+\-]?\d+/,function(A){var A=+A,E=1970+(A-1970)%400;return B.year=A-E,E}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(D,A,E){return A<0&&(E*=-1),S=6e4*(60*+A+ +E),""}).replace(/\.\d+$/,function(D){return B.nano=+(D+c).substr(1,9),""}).split(/\D+/);if(1<$.length?$[1]--:$[1]=0,B.time=S=Date.UTC.apply(Date,$)-(S||0),isNaN(S))throw new TypeError("Invalid Date");return g(B)},y.fromTimeT=function(T){return b(T,0)},u.year=0,u.time=0,u.nano=0,u.addNano=function(T){return this.nano+=+T||0,this},u.getNano=function(){var T=g(this);return(T.time%1e3*a+ +T.nano+1e9)%1e9},u.getTimeT=function(){var S=g(this),T=Math.floor(S.time/1e3),S=S.year;return S&&(T+=S*t*r/e),T},u.getYear=function(){return this.toDate().getUTCFullYear()+this.year},u.toDate=function(){return m(g(this).time)},u.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},u.toString=function(T){var S=this,B=S.toDate(),$={H:function(){return V(B.getUTCHours())},L:function(){return Y(B.getUTCMilliseconds(),3)},M:function(){return V(B.getUTCMinutes())},N:function(){return Y(S.getNano(),9)},S:function(){return V(B.getUTCSeconds())},Y:function(){var D=S.getYear();return 999999<D?"+"+D:9999<D?"+"+Y(D,6):0<=D?Y(D,4):-999999<=D?"-"+Y(-D,6):D},a:function(){return h[B.getUTCDay()]},b:function(){return f[B.getUTCMonth()]},d:function(){return V(B.getUTCDate())},e:function(){return(function(D){return(9<D?"":" ")+(0|D)})(B.getUTCDate())},m:function(){return V(B.getUTCMonth()+1)}};return(function D(A){return A.replace(/%./g,function(E){var R=E[1],x=p[R],R=$[R];return x?D(x):R?R():E})})(T||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"),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 y;function y(T,S,B){var $=this;if(!($ instanceof y))return new y(T,S,B);$.time=+T||0,$.nano=+S||0,$.year=+B||0,g($)}function g(T){var S,B,$,D=T.year,A=T.time,E=T.nano,x=((E<0||a<=E)&&(E-=(B=Math.floor(E/a))*a,A+=B,B=1),D%e);return(A<-i||i<A||x)&&((S=l(A/o))&&(D+=S*e,A-=S*o),($=m(A)).setUTCFullYear(x+$.getUTCFullYear()),$=(A=+$)+(S=l((D-=x)/e))*o,S&&-i<=$&&$<=i&&(D-=S*e,A=$),B=1),B&&(T.year=D,T.time=A,T.nano=E),T}function m(T){var S=new Date(0);return S.setTime(T),S}function b(D,$){D=+D||0;var B=l(($=($|0)*s)/n)+l(D/n),$=$%n+D%n,D=l($/n);return D&&(B+=D,$-=D*n),new y(1e3*$,0,B*e)}function v(T,S,B,$,D,A){return function(x,R){var M=g(this);x=x||new Array(8),K(x,R|=0);var P=Math.floor(M.time/1e3),M=M.year*(t*r/e),U=l(M/s)+l(P/s),M=M%s+P%s,P=Math.floor(M/s);return P&&(U+=P,M-=P*s),E(x,R+D,U),E(x,R+A,M),x};function E(x,R,U){x[R+T]=U>>24&255,x[R+S]=U>>16&255,x[R+B]=U>>8&255,x[R+$]=255&U}}function L(T,S,B,$,D,A){return function(x,R){K(x,R|=0);var U=E(x,R+D);return b(E(x,R+A),U)};function E(x,R){return 16777216*x[R+T]+(x[R+S]<<16|x[R+B]<<8|x[R+$])}}function K(T,S){if(T=T&&T.length,T==null)throw new TypeError("Invalid Buffer");if(T<S+8)throw new RangeError("Out of range")}function V(T){return(9<T?"":"0")+(0|T)}function Y(T,S){return(c+(0|T)).substr(-S)}})()});var OA=Zr((Upe,NA)=>{"use strict";function _U(r){return r>=55296&&r<=56319}function IU(r){return r>=56320&&r<=57343}NA.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],_U(s)&&IU(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 MA=Zr((Fpe,BA)=>{"use strict";function kU(r){return r>=55296&&r<=56319}function CU(r){return r>=56320&&r<=57343}BA.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),CU(o)?i!=null&&kU(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 FA=Zr(($pe,UA)=>{"use strict";var RU=OA(),PU=MA();UA.exports=RU.bind(null,PU)});var KA=Zr((Vpe,VA)=>{"use strict";var LU=FA(),DU=/[\/\?<>\\:\*\|"]/g,NU=/[\x00-\x1f\x80-\x9f]/g,OU=/^\.+$/,BU=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i;function MU(r,e){for(var t=r.length;t>0&&(r[t-1]==="."||r[t-1]===" ");)t--;return t<r.length?r.slice(0,t)+e:r}function $A(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(DU,e).replace(NU,e).replace(OU,e).replace(BU,e);return t=MU(t,e),LU(t,255)}VA.exports=function(r,e){var t=e&&e.replacement||"",n=$A(r,t);return t===""?n:$A(n,"")}});var HA=Zr(Gc=>{"use strict";var FU="[object ArrayBuffer]",Qo=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===FU}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}},n5="string",$U=/^[0-9a-f\s]+$/i,VU=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,KU=/^[a-zA-Z0-9-_]+$/,_0=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=Qo.toUint8Array(e),n="";for(let i=0;i<t.length;i++)n+=String.fromCharCode(t[i]);return decodeURIComponent(escape(n))}},hn=class{static toString(e,t=!1){let n=Qo.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}},I0=class r{static isHex(e){return typeof e===n5&&$U.test(e)}static isBase64(e){return typeof e===n5&&VU.test(e)}static isBase64Url(e){return typeof e===n5&&KU.test(e)}static ToString(e,t="utf8"){let n=Qo.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 hn.toString(n,!0);case"utf16":case"utf16be":return hn.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 hn.fromString(e,!0);case"utf16":case"utf16be":return hn.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=Qo.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 _0.fromString(e);case"utf16":case"utf16be":return hn.fromString(e);case"utf16le":case"usc2":return hn.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 _0.toString(e);case"utf16":case"utf16be":return hn.toString(e);case"utf16le":case"usc2":return hn.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=Qo.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=Qo.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 hn.toString(e,t)}static FromUtf16String(e,t=!1){return hn.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,"")||""}};I0.DEFAULT_UTF8_ENCODING="utf8";function HU(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 qU(...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 zU(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}Gc.BufferSourceConverter=Qo;Gc.Convert=I0;Gc.assign=HU;Gc.combine=qU;Gc.isEqual=zU});var hI=Zr(yo=>{"use strict";Object.defineProperty(yo,"__esModule",{value:!0});yo.parseCookie=dI;yo.parse=dI;yo.stringifyCookie=x$;yo.stringifySetCookie=a2;yo.serialize=a2;yo.parseSetCookie=E$;yo.stringifySetCookie=a2;yo.serialize=a2;var lI=/^[\u0021-\u003A\u003C\u003E-\u007E]+$/,uI=/^[\u0021-\u003A\u003C-\u007E]*$/,m$=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,g$=/^[\u0020-\u003A\u003D-\u007E]*$/,y$=/^-?\d+$/,w$=Object.prototype.toString,b$=(()=>{let r=function(){};return r.prototype=Object.create(null),r})();function dI(r,e){let t=new b$,n=r.length;if(n<2)return t;let o=e?.decode||fI,i=0;do{let s=uy(r,i,n);if(s===-1)break;let a=ly(r,i,n);if(s>a){i=r.lastIndexOf(";",s-1)+1;continue}let c=ji(r,i,s);t[c]===void 0&&(t[c]=o(ji(r,s+1,a))),i=a+1}while(i<n);return t}function x$(r,e){let t=e?.encode||encodeURIComponent,n=[];for(let o of Object.keys(r)){let i=r[o];if(i===void 0)continue;if(!lI.test(o))throw new TypeError(`cookie name is invalid: ${o}`);let s=t(i);if(!uI.test(s))throw new TypeError(`cookie val is invalid: ${i}`);n.push(`${o}=${s}`)}return n.join("; ")}function a2(r,e,t){let n=typeof r=="object"?r:{...t,name:r,value:String(e)},i=(typeof e=="object"?e:t)?.encode||encodeURIComponent;if(!lI.test(n.name))throw new TypeError(`argument name is invalid: ${n.name}`);let s=n.value?i(n.value):"";if(!uI.test(s))throw new TypeError(`argument val is invalid: ${n.value}`);let a=n.name+"="+s;if(n.maxAge!==void 0){if(!Number.isInteger(n.maxAge))throw new TypeError(`option maxAge is invalid: ${n.maxAge}`);a+="; Max-Age="+n.maxAge}if(n.domain){if(!m$.test(n.domain))throw new TypeError(`option domain is invalid: ${n.domain}`);a+="; Domain="+n.domain}if(n.path){if(!g$.test(n.path))throw new TypeError(`option path is invalid: ${n.path}`);a+="; Path="+n.path}if(n.expires){if(!v$(n.expires)||!Number.isFinite(n.expires.valueOf()))throw new TypeError(`option expires is invalid: ${n.expires}`);a+="; Expires="+n.expires.toUTCString()}if(n.httpOnly&&(a+="; HttpOnly"),n.secure&&(a+="; Secure"),n.partitioned&&(a+="; Partitioned"),n.priority)switch(typeof n.priority=="string"?n.priority.toLowerCase():void 0){case"low":a+="; Priority=Low";break;case"medium":a+="; Priority=Medium";break;case"high":a+="; Priority=High";break;default:throw new TypeError(`option priority is invalid: ${n.priority}`)}if(n.sameSite)switch(typeof n.sameSite=="string"?n.sameSite.toLowerCase():n.sameSite){case!0:case"strict":a+="; SameSite=Strict";break;case"lax":a+="; SameSite=Lax";break;case"none":a+="; SameSite=None";break;default:throw new TypeError(`option sameSite is invalid: ${n.sameSite}`)}return a}function E$(r,e){let t=e?.decode||fI,n=r.length,o=ly(r,0,n),i=uy(r,0,o),s=i===-1?{name:"",value:t(ji(r,0,o))}:{name:ji(r,0,i),value:t(ji(r,i+1,o))},a=o+1;for(;a<n;){let c=ly(r,a,n),l=uy(r,a,c),u=l===-1?ji(r,a,c):ji(r,a,l),d=l===-1?void 0:ji(r,l+1,c);switch(u.toLowerCase()){case"httponly":s.httpOnly=!0;break;case"secure":s.secure=!0;break;case"partitioned":s.partitioned=!0;break;case"domain":s.domain=d;break;case"path":s.path=d;break;case"max-age":d&&y$.test(d)&&(s.maxAge=Number(d));break;case"expires":if(!d)break;let f=new Date(d);Number.isFinite(f.valueOf())&&(s.expires=f);break;case"priority":if(!d)break;let h=d.toLowerCase();(h==="low"||h==="medium"||h==="high")&&(s.priority=h);break;case"samesite":if(!d)break;let p=d.toLowerCase();(p==="lax"||p==="strict"||p==="none")&&(s.sameSite=p);break}a=c+1}return s}function ly(r,e,t){let n=r.indexOf(";",e);return n===-1?t:n}function uy(r,e,t){let n=r.indexOf("=",e);return n<t?n:-1}function ji(r,e,t){let n=e,o=t;do{let i=r.charCodeAt(n);if(i!==32&&i!==9)break}while(++n<o);for(;o>n;){let i=r.charCodeAt(o-1);if(i!==32&&i!==9)break;o--}return r.slice(n,o)}function fI(r){if(r.indexOf("%")===-1)return r;try{return decodeURIComponent(r)}catch{return r}}function v$(r){return w$.call(r)==="[object Date]"}});var CV={};ht(CV,{DEFAULT_CID_PEER_FILTER_SIZE:()=>G4,DEFAULT_SESSION_MAX_PROVIDERS:()=>W4,DEFAULT_SESSION_MIN_PROVIDERS:()=>z4,InsufficientProvidersError:()=>vu,InvalidCodecError:()=>j4,NoRoutersAvailableError:()=>Ci,UnknownCodecError:()=>Au,UnknownHashAlgorithmError:()=>Su,createHelia:()=>kV,heliaDefaults:()=>$y,libp2pDefaults:()=>dg});var zy=Symbol.for("@libp2p/connection");var bo=Symbol.for("@libp2p/content-routing");var sr=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},mf=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},gf=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},_=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},xo=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},dl=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}},fl=class extends Error{static name="UnsupportedOperationError";constructor(e="Unsupported operation"){super(e),this.name="UnsupportedOperationError"}};var is=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},va=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},mn=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},Sa=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}};var Hn=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},hl=class extends Error{static name="StreamBufferError";constructor(e="The stream buffer was full"){super(e),this.name="StreamBufferError"}},We=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},Aa=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},qn=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},yf=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},ai=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},Ta=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},ve=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},ss=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},zn=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},gn=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var ci=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},as=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},pl=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},wf=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},_a=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},yn=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var bf=class extends Event{data;constructor(e,t){super("message",t),this.data=e}},li=class extends Event{error;local;constructor(e,t,n){super("close",n),this.error=t,this.local=e}},xf=class extends li{constructor(e,t){super(!0,e,t)}},Ef=class extends li{constructor(e,t){super(!1,e,t)}};var cs=Symbol.for("@libp2p/peer-discovery");var vf=Symbol.for("@libp2p/peer-id");function At(r){return!!r?.[vf]}var Eo=Symbol.for("@libp2p/peer-routing");var ls="keep-alive";function Sf(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function Et(...r){let e=[];for(let t of r)Sf(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 Tt(...r){let e=[];for(let t of r)Sf(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 ui=Symbol.for("@libp2p/transport");var ml;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(ml||(ml={}));var ue=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))}};var Te=Symbol.for("@libp2p/service-capabilities"),Ir=Symbol.for("@libp2p/service-dependencies");var O=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var Af=class extends AggregateError{static name="DNSQueryFailedError";name="DNSQueryFailedError"};var hg=wo(Gy(),1);var pg=class r extends Error{name="TimeoutError";constructor(e,t){super(e,t),Error.captureStackTrace?.(this,r)}},jy=r=>r.reason??new DOMException("This operation was aborted.","AbortError");function yl(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout},signal:s}=e,a,c,u=new Promise((d,f)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(s?.aborted){f(jy(s));return}if(s&&(c=()=>{f(jy(s))},s.addEventListener("abort",c,{once:!0})),r.then(d,f),t===Number.POSITIVE_INFINITY)return;let h=new pg;a=i.setTimeout.call(void 0,()=>{if(n){try{d(n())}catch(p){f(p)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?d():o instanceof Error?f(o):(h.message=o??`Promise timed out after ${t} milliseconds`,f(h))},t)}).finally(()=>{u.clear(),c&&s&&s.removeEventListener("abort",c)});return u.clear=()=>{i.clearTimeout.call(void 0,a),a=void 0},u}function mg(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 Ia=class{#e=[];enqueue(e,t){let{priority:n=0,id:o}=t??{},i={priority:n,id:o,run:e};if(this.size===0||this.#e[this.size-1].priority>=n){this.#e.push(i);return}let s=mg(this.#e,i,(a,c)=>c.priority-a.priority);this.#e.splice(s,0,i)}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})}remove(e){let t=this.#e.findIndex(n=>typeof e=="string"?n.id===e:n.run===e);t!==-1&&this.#e.splice(t,1)}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 us=class extends hg.default{#e;#t;#r=0;#a;#c=!1;#m=!1;#u;#I=0;#x=0;#d;#f;#l;#s=[];#i=0;#n;#k;#o=0;#y;#h;#D=1n;#w=new Map;#E=new Set;timeout;constructor(e){if(super(),e={carryoverIntervalCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:Ia,strict:!1,...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})`);if(e.strict&&e.interval===0)throw new TypeError("The `strict` option requires a non-zero `interval`");if(e.strict&&e.intervalCap===Number.POSITIVE_INFINITY)throw new TypeError("The `strict` option requires a finite `intervalCap`");if(this.#e=e.carryoverIntervalCount??e.carryoverConcurrencyCount??!1,this.#t=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#a=e.intervalCap,this.#u=e.interval,this.#l=e.strict,this.#n=new e.queueClass,this.#k=e.queueClass,this.concurrency=e.concurrency,e.timeout!==void 0&&!(Number.isFinite(e.timeout)&&e.timeout>0))throw new TypeError(`Expected \`timeout\` to be a positive finite number, got \`${e.timeout}\` (${typeof e.timeout})`);this.timeout=e.timeout,this.#h=e.autoStart===!1,this.#V()}#v(e){for(;this.#i<this.#s.length;){let n=this.#s[this.#i];if(n!==void 0&&e-n>=this.#u)this.#i++;else break}(this.#i>100&&this.#i>this.#s.length/2||this.#i===this.#s.length)&&(this.#s=this.#s.slice(this.#i),this.#i=0)}#N(e){this.#l?this.#s.push(e):this.#r++}#O(){this.#l?this.#s.length>this.#i&&this.#s.pop():this.#r>0&&this.#r--}#S(){return this.#s.length-this.#i}get#B(){return this.#t?!0:this.#l?this.#S()<this.#a:this.#r<this.#a}get#M(){return this.#o<this.#y}#U(){this.#o--,this.#o===0&&this.emit("pendingZero"),this.#b(),this.emit("next")}#F(){this.#f=void 0,this.#P(),this.#R()}#$(e){if(this.#l){if(this.#v(e),this.#S()>=this.#a){let n=this.#s[this.#i],o=this.#u-(e-n);return this.#A(o),!0}return!1}if(this.#d===void 0){let t=this.#I-e;if(t<0){if(this.#x>0){let n=e-this.#x;if(n<this.#u)return this.#A(this.#u-n),!0}this.#r=this.#e?this.#o:0}else return this.#A(t),!0}return!1}#A(e){this.#f===void 0&&(this.#f=setTimeout(()=>{this.#F()},e))}#T(){this.#d&&(clearInterval(this.#d),this.#d=void 0)}#C(){this.#f&&(clearTimeout(this.#f),this.#f=void 0)}#b(){if(this.#n.size===0){if(this.#T(),this.emit("empty"),this.#o===0){if(this.#C(),this.#l&&this.#i>0){let t=Date.now();this.#v(t)}this.emit("idle")}return!1}let e=!1;if(!this.#h){let t=Date.now(),n=!this.#$(t);if(this.#B&&this.#M){let o=this.#n.dequeue();this.#t||(this.#N(t),this.#g()),this.emit("active"),o(),n&&this.#R(),e=!0}}return e}#R(){this.#t||this.#d!==void 0||this.#l||(this.#d=setInterval(()=>{this.#P()},this.#u),this.#I=Date.now()+this.#u)}#P(){this.#l||(this.#r===0&&this.#o===0&&this.#d&&this.#T(),this.#r=this.#e?this.#o:0),this.#_(),this.#g()}#_(){for(;this.#b(););}get concurrency(){return this.#y}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.#y=e,this.#_()}setPriority(e,t){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`Expected \`priority\` to be a finite number, got \`${t}\` (${typeof t})`);this.#n.setPriority(e,t)}async add(e,t={}){return t={timeout:this.timeout,...t,id:t.id??(this.#D++).toString()},new Promise((n,o)=>{let i=Symbol(`task-${t.id}`),s=()=>{},a=async()=>{s(),this.#o++,this.#w.set(i,{id:t.id,priority:t.priority??0,startTime:Date.now(),timeout:t.timeout});let l;try{try{t.signal?.throwIfAborted()}catch(f){throw this.#K(),this.#w.delete(i),f}this.#x=Date.now();let u=e({signal:t.signal});if(t.timeout&&(u=yl(Promise.resolve(u),{milliseconds:t.timeout,message:`Task timed out after ${t.timeout}ms (queue has ${this.#o} running, ${this.#n.size} waiting)`})),t.signal){let{signal:f}=t;u=Promise.race([u,new Promise((h,p)=>{l=()=>{p(f.reason)},f.addEventListener("abort",l,{once:!0})})])}let d=await u;n(d),this.emit("completed",d)}catch(u){o(u),this.emit("error",u)}finally{l&&t.signal?.removeEventListener("abort",l),this.#w.delete(i),queueMicrotask(()=>{this.#U()})}};this.#n.enqueue(a,t);let c=()=>{if(this.#n instanceof Ia){this.#n.remove(a);return}this.#n.remove?.(t.id)};if(t.signal){let{signal:l}=t,u=()=>{s(),c(),o(l.reason),this.#b(),this.emit("next")};if(s=()=>{l.removeEventListener("abort",u),this.#E.delete(s)},l.aborted){u();return}l.addEventListener("abort",u,{once:!0}),this.#E.add(s)}this.emit("add"),this.#b()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#h?(this.#h=!1,this.#_(),this):this}pause(){this.#h=!0}clear(){for(let e of this.#E)e();this.#n=new this.#k,this.#T(),this.#L(),this.emit("empty"),this.#o===0&&(this.#C(),this.emit("idle")),this.emit("next")}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.#o===0&&this.#n.size===0||await this.#p("idle")}async onPendingZero(){this.#o!==0&&await this.#p("pendingZero")}async onRateLimit(){this.isRateLimited||await this.#p("rateLimit")}async onRateLimitCleared(){this.isRateLimited&&await this.#p("rateLimitCleared")}onError(){return new Promise((e,t)=>{let n=o=>{this.off("error",n),t(o)};this.on("error",n)})}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.#o}get isPaused(){return this.#h}#V(){this.#t||(this.on("add",()=>{this.#n.size>0&&this.#g()}),this.on("next",()=>{this.#g()}))}#g(){this.#t||this.#m||(this.#m=!0,queueMicrotask(()=>{this.#m=!1,this.#L()}))}#K(){this.#t||(this.#O(),this.#g())}#L(){let e=this.#c;if(this.#t||this.#n.size===0){e&&(this.#c=!1,this.emit("rateLimitCleared"));return}let t;if(this.#l){let o=Date.now();this.#v(o),t=this.#S()}else t=this.#r;let n=t>=this.#a;n!==e&&(this.#c=n,this.emit(n?"rateLimit":"rateLimitCleared"))}get isRateLimited(){return this.#c}get isSaturated(){return this.#o===this.#y&&this.#n.size>0||this.isRateLimited&&this.#n.size>0}get runningTasks(){return[...this.#w.values()].map(e=>({...e}))}};function _f(r){let e=[kr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var Eg={};ht(Eg,{base10:()=>fC});var IK=new Uint8Array(0);function Yy(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 wn(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 Xy(r){return new TextEncoder().encode(r)}function Qy(r){return new TextDecoder().decode(r)}function sC(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 y=0,g=0,m=0,b=p.length;m!==b&&p[m]===0;)m++,y++;for(var v=(b-m)*u+1>>>0,L=new Uint8Array(v);m!==b;){for(var K=p[m],V=0,Y=v-1;(K!==0||V<g)&&Y!==-1;Y--,V++)K+=256*L[Y]>>>0,L[Y]=K%a>>>0,K=K/a>>>0;if(K!==0)throw new Error("Non-zero carry");g=V,m++}for(var T=v-g;T!==v&&L[T]===0;)T++;for(var S=c.repeat(y);T<v;++T)S+=r.charAt(L[T]);return S}function f(p){if(typeof p!="string")throw new TypeError("Expected String");if(p.length===0)return new Uint8Array;var y=0;if(p[y]!==" "){for(var g=0,m=0;p[y]===c;)g++,y++;for(var b=(p.length-y)*l+1>>>0,v=new Uint8Array(b);p[y];){var L=t[p.charCodeAt(y)];if(L===255)return;for(var K=0,V=b-1;(L!==0||K<m)&&V!==-1;V--,K++)L+=a*v[V]>>>0,v[V]=L%256>>>0,L=L/256>>>0;if(L!==0)throw new Error("Non-zero carry");m=K,y++}if(p[y]!==" "){for(var Y=b-m;Y!==b&&v[Y]===0;)Y++;for(var T=new Uint8Array(g+(b-Y)),S=g;Y!==b;)T[S++]=v[Y++];return T}}}function h(p){var y=f(p);if(y)return y;throw new Error(`Non-${e} character`)}return{encode:d,decodeUnsafe:f,decode:h}}var aC=sC,cC=aC,Zy=cC;var yg=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")}},wg=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 Jy(this,e)}},bg=class{decoders;constructor(e){this.decoders=e}or(e){return Jy(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 Jy(r,e){return new bg({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var xg=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 yg(e,t,n),this.decoder=new wg(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function ka({name:r,prefix:e,encode:t,decode:n}){return new xg(r,e,t,n)}function di({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=Zy(t,r);return ka({prefix:e,name:r,encode:n,decode:i=>wn(o(i))})}function lC(r,e,t,n){let o=r.length;for(;r[o-1]==="=";)--o;let i=new Uint8Array(o*t/8|0),s=0,a=0,c=0;for(let l=0;l<o;++l){let u=e[r[l]];if(u===void 0)throw new SyntaxError(`Non-${n} character`);a=a<<t|u,s+=t,s>=8&&(s-=8,i[c++]=255&a>>s)}if(s>=t||(255&a<<8-s)!==0)throw new SyntaxError("Unexpected end of data");return i}function uC(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 dC(r){let e={};for(let t=0;t<r.length;++t)e[r[t]]=t;return e}function ct({name:r,prefix:e,bitsPerChar:t,alphabet:n}){let o=dC(n);return ka({prefix:e,name:r,encode(i){return uC(i,n,t)},decode(i){return lC(i,o,t,r)}})}var fC=di({prefix:"9",name:"base10",alphabet:"0123456789"});var vg={};ht(vg,{base16:()=>hC,base16upper:()=>pC});var hC=ct({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),pC=ct({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var Sg={};ht(Sg,{base2:()=>mC});var mC=ct({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var Ag={};ht(Ag,{base256emoji:()=>xC});var e7=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}"),gC=e7.reduce((r,e,t)=>(r[t]=e,r),[]),yC=e7.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function wC(r){return r.reduce((e,t)=>(e+=gC[t],e),"")}function bC(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=yC[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var xC=ka({prefix:"\u{1F680}",name:"base256emoji",encode:wC,decode:bC});var Tg={};ht(Tg,{base32:()=>_t,base32hex:()=>AC,base32hexpad:()=>_C,base32hexpadupper:()=>IC,base32hexupper:()=>TC,base32pad:()=>vC,base32padupper:()=>SC,base32upper:()=>EC,base32z:()=>kC});var _t=ct({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),EC=ct({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),vC=ct({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),SC=ct({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),AC=ct({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),TC=ct({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),_C=ct({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),IC=ct({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),kC=ct({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var _g={};ht(_g,{base36:()=>Jr,base36upper:()=>CC});var Jr=di({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),CC=di({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var Ig={};ht(Ig,{base58btc:()=>Ge,base58flickr:()=>RC});var Ge=di({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),RC=di({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var kg={};ht(kg,{base64:()=>mt,base64pad:()=>wl,base64url:()=>bl,base64urlpad:()=>PC});var mt=ct({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),wl=ct({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),bl=ct({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),PC=ct({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var Cg={};ht(Cg,{base8:()=>LC});var LC=ct({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var Rg={};ht(Rg,{identity:()=>DC});var DC=ka({prefix:"\0",name:"identity",encode:r=>Qy(r),decode:r=>Xy(r)});var If={};ht(If,{code:()=>Pg,decode:()=>UC,encode:()=>MC,name:()=>BC});var NC=new TextEncoder,OC=new TextDecoder,BC="json",Pg=512;function MC(r){return NC.encode(JSON.stringify(r))}function UC(r){return JSON.parse(OC.decode(r))}var ds={};ht(ds,{code:()=>vo,decode:()=>VC,encode:()=>$C,name:()=>FC});var FC="raw",vo=85;function $C(r){return wn(r)}function VC(r){return wn(r)}var Ng={};ht(Ng,{identity:()=>gt});var nt={};ht(nt,{Digest:()=>fs,create:()=>cr,decode:()=>He,equals:()=>Dg,hasCode:()=>sR});var KC=n7,t7=128,HC=127,qC=~HC,zC=Math.pow(2,31);function n7(r,e,t){e=e||[],t=t||0;for(var n=t;r>=zC;)e[t++]=r&255|t7,r/=128;for(;r&qC;)e[t++]=r&255|t7,r>>>=7;return e[t]=r|0,n7.bytes=t-n+1,e}var WC=Lg,GC=128,r7=127;function Lg(r,n){var t=0,n=n||0,o=0,i=n,s,a=r.length;do{if(i>=a)throw Lg.bytes=0,new RangeError("Could not decode varint");s=r[i++],t+=o<28?(s&r7)<<o:(s&r7)*Math.pow(2,o),o+=7}while(s>=GC);return Lg.bytes=i-n,t}var jC=Math.pow(2,7),YC=Math.pow(2,14),XC=Math.pow(2,21),QC=Math.pow(2,28),ZC=Math.pow(2,35),JC=Math.pow(2,42),eR=Math.pow(2,49),tR=Math.pow(2,56),rR=Math.pow(2,63),nR=function(r){return r<jC?1:r<YC?2:r<XC?3:r<QC?4:r<ZC?5:r<JC?6:r<eR?7:r<tR?8:r<rR?9:10},oR={encode:KC,decode:WC,encodingLength:nR},iR=oR,xl=iR;function El(r,e=0){return[xl.decode(r,e),xl.decode.bytes]}function Ca(r,e,t=0){return xl.encode(r,e,t),e}function Ra(r){return xl.encodingLength(r)}function cr(r,e){let t=e.byteLength,n=Ra(r),o=n+Ra(t),i=new Uint8Array(o+t);return Ca(r,i,0),Ca(t,i,n),i.set(e,o),new fs(r,t,e,i)}function He(r){let e=wn(r),[t,n]=El(e),[o,i]=El(e.subarray(n)),s=e.subarray(n+i);if(s.byteLength!==o)throw new Error("Incorrect length");return new fs(t,o,s,e)}function Dg(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&Yy(r.bytes,t.bytes)}}var fs=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function sR(r,e){return r.code===e}var o7=0,aR="identity",i7=wn;function cR(r,e){if(e?.truncate!=null&&e.truncate!==r.byteLength){if(e.truncate<0||e.truncate>r.byteLength)throw new Error(`Invalid truncate option, must be less than or equal to ${r.byteLength}`);r=r.subarray(0,e.truncate)}return cr(o7,i7(r))}var gt={code:o7,name:aR,encode:i7,digest:cR};var Bg={};ht(Bg,{sha256:()=>st,sha512:()=>Cf});var lR=20;function vl({name:r,code:e,encode:t,minDigestLength:n,maxDigestLength:o}){return new Og(r,e,t,n,o)}var Og=class{name;code;encode;minDigestLength;maxDigestLength;constructor(e,t,n,o,i){this.name=e,this.code=t,this.encode=n,this.minDigestLength=o??lR,this.maxDigestLength=i}digest(e,t){if(t?.truncate!=null){if(t.truncate<this.minDigestLength)throw new Error(`Invalid truncate option, must be greater than or equal to ${this.minDigestLength}`);if(this.maxDigestLength!=null&&t.truncate>this.maxDigestLength)throw new Error(`Invalid truncate option, must be less than or equal to ${this.maxDigestLength}`)}if(e instanceof Uint8Array){let n=this.encode(e);return n instanceof Uint8Array?s7(n,this.code,t?.truncate):n.then(o=>s7(o,this.code,t?.truncate))}else throw Error("Unknown type, must be binary type")}};function s7(r,e,t){if(t!=null&&t!==r.byteLength){if(t>r.byteLength)throw new Error(`Invalid truncate option, must be less than or equal to ${r.byteLength}`);r=r.subarray(0,t)}return cr(e,r)}function c7(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var st=vl({name:"sha2-256",code:18,encode:c7("SHA-256")}),Cf=vl({name:"sha2-512",code:19,encode:c7("SHA-512")});function l7(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return dR(t,Mg(r),e??Ge.encoder);default:return fR(t,Mg(r),e??_t.encoder)}}var u7=new WeakMap;function Mg(r){let e=u7.get(r);if(e==null){let t=new Map;return u7.set(r,t),t}return e}var Z=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!==Sl)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==hR)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=cr(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&&Dg(e.multihash,n.multihash)}toString(e){return l7(this,e)}toJSON(){return{"/":l7(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??d7(n,o,i.bytes))}else if(t[pR]===!0){let{version:n,multihash:o,code:i}=t,s=He(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!==Sl)throw new Error(`Version 0 CID must use dag-pb (code: ${Sl}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=d7(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,Sl,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=wn(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 fs(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]=El(e.subarray(t));return t+=f,d},o=n(),i=Sl;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]=uR(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 Mg(i).set(n,e),i}};function uR(r,e){switch(r[0]){case"Q":{let t=e??Ge;return[Ge.prefix,t.decode(`${Ge.prefix}${r}`)]}case Ge.prefix:{let t=e??Ge;return[Ge.prefix,t.decode(r)]}case _t.prefix:{let t=e??_t;return[_t.prefix,t.decode(r)]}case Jr.prefix:{let t=e??Jr;return[Jr.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 dR(r,e,t){let{prefix:n}=t;if(n!==Ge.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 fR(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 Sl=112,hR=18;function d7(r,e,t){let n=Ra(r),o=n+Ra(e),i=new Uint8Array(o+t.byteLength);return Ca(r,i,0),Ca(e,i,n),i.set(t,o),i}var pR=Symbol.for("@ipld/js-cid/CID");var hs={...Rg,...Sg,...Cg,...Eg,...vg,...Tg,..._g,...Ig,...kg,...Ag},uH={...Bg,...Ng};function de(r=0){return new Uint8Array(r)}function Re(r=0){return new Uint8Array(r)}function h7(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var f7=h7("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),Ug=h7("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=Re(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),mR={utf8:f7,"utf-8":f7,hex:hs.base16,latin1:Ug,ascii:Ug,binary:Ug,...hs},Rf=mR;function N(r,e="utf8"){let t=Rf[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var Fg=60;function Pf(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:kr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:kr[e.type],TTL:e.TTL??e.ttl??Fg,data:e.data instanceof Uint8Array?N(e.data):e.data}))}}var gR=4;function $g(r,e={}){let t=new us({concurrency:e.queryConcurrency??gR});return async(n,o={})=>{let i=o?.logger?.forComponent("dns:dns-json-over-https"),s=new URLSearchParams;s.set("name",n),_f(o.types).forEach(c=>{s.append("type",kr[c])}),o.onProgress?.(new O("dns:query",n)),i?.("GET %s",`${r}?${s}`);let a=await t.add(async()=>{let c=await fetch(`${r}?${s}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(i?.("GET %s %d",c.url,c.status),c.status!==200)throw new Error(`Unexpected HTTP status: ${c.status} - ${c.statusText}`);let l=Pf(await c.json());return o.onProgress?.(new O("dns:response",l)),l},{signal:o.signal});if(a==null)throw new Error("No DNS response received");return a}}function p7(){return[$g("https://cloudflare-dns.com/dns-query"),$g("https://dns.google/resolve")]}var y7=wo(g7(),1);var Vg=class{lru;constructor(e){this.lru=(0,y7.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 Pf({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:kr[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??Fg)*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 w7(r){return new Vg(r)}var yR=1e3,Lf=class{resolvers;cache;logger;constructor(e){this.resolvers={},this.cache=w7(e.cacheSize??yR),this.logger=e.logger,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["."]=p7())}async query(e,t={}){let n=_f(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new O("dns:cache",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,logger:this.logger,types:n});for(let u of l.Answer)this.cache.add(e,u);return l}catch(l){a.push(l),t.onProgress?.(new O("dns:error",l))}}throw new Af(a,`DNS lookup of ${e} ${n} failed`)}};var kr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(kr||(kr={}));function Df(r={}){return new Lf(r)}function wR(r){return r[Symbol.asyncIterator]!=null}function bR(r){if(wR(r))return(async()=>{for await(let e of r);})();for(let e of r);}var yr=bR;var Al=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},Tl=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},Nf=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var b7={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new Nf("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 yt=b7;function se(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 Ye(r,e){e==null&&(e=r.reduce((o,i)=>o+i.length,0));let t=Re(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}var E7=Symbol.for("@achingbrain/uint8arraylist");function x7(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 Pa(r){return!!r?.[E7]}var ne=class r{bufs;length;[E7]=!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(Pa(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(Pa(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=x7(this.bufs,e);return t.buf[t.index]}set(e,t){let n=x7(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(Pa(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 Ye(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:Ye(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(!Pa(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=Re(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=de(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=de(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=de(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=Re(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=de(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=de(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=de(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=de(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=de(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(!se(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 C(r,e="utf8"){let t=Rf[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}var ER=parseInt("11111",2),Kg=parseInt("10000000",2),vR=parseInt("01111111",2),v7={0:_l,1:_l,2:SR,3:_R,4:IR,5:TR,6:AR,16:_l,22:_l,48:_l};function en(r,e={offset:0}){let t=r[e.offset]&ER;if(e.offset++,v7[t]!=null)return v7[t](r,e);throw new Error("No decoder for tag "+t)}function Il(r,e){let t=0;if((r[e.offset]&Kg)===Kg){let n=r[e.offset]&vR,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 _l(r,e){Il(r,e);let t=[];for(;!(e.offset>=r.byteLength);){let n=en(r,e);if(n===null)break;t.push(n)}return t}function SR(r,e){let t=Il(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 AR(r,e){let t=Il(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 TR(r,e){return e.offset++,null}function _R(r,e){let t=Il(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 IR(r,e){let t=Il(r,e),n=r.subarray(e.offset,e.offset+t);return e.offset+=t,n}function kR(r){let e=r.toString(16);e.length%2===1&&(e="0"+e);let t=new ne;for(let n=0;n<e.length;n+=2)t.append(Uint8Array.from([parseInt(`${e[n]}${e[n+1]}`,16)]));return t}function Of(r){if(r.byteLength<128)return Uint8Array.from([r.byteLength]);let e=kR(r.byteLength);return new ne(Uint8Array.from([e.byteLength|Kg]),e)}function lr(r){let e=new ne,t=128;return(r.subarray()[0]&t)===t&&e.append(Uint8Array.from([0])),e.append(r),new ne(Uint8Array.from([2]),Of(e),e)}function kl(r){let e=Uint8Array.from([0]),t=new ne(e,r);return new ne(Uint8Array.from([3]),Of(t),t)}function S7(r){return new ne(Uint8Array.from([4]),Of(r),r)}function bn(r,e=48){let t=new ne;for(let n of r)t.append(n);return new ne(Uint8Array.from([e]),Of(t),t)}var A7="1.2.840.10045.3.1.7",T7="1.3.132.0.34",_7="1.3.132.0.35";async function I7(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 k7(r,e,t){let n=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["sign"]);t?.signal?.throwIfAborted();let o=await crypto.subtle.sign({name:"ECDSA",hash:{name:"SHA-256"}},n,e.subarray());return t?.signal?.throwIfAborted(),new Uint8Array(o,0,o.byteLength)}async function C7(r,e,t,n){let o=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["verify"]);n?.signal?.throwIfAborted();let i=await crypto.subtle.verify({name:"ECDSA",hash:{name:"SHA-256"}},o,e,t.subarray());return n?.signal?.throwIfAborted(),i}var CR=Uint8Array.from([6,8,42,134,72,206,61,3,1,7]),RR=Uint8Array.from([6,5,43,129,4,0,34]),PR=Uint8Array.from([6,5,43,129,4,0,35]),R7={ext:!0,kty:"EC",crv:"P-256"},P7={ext:!0,kty:"EC",crv:"P-384"},L7={ext:!0,kty:"EC",crv:"P-521"},La=32,Da=48,Na=66;function D7(r){let e=en(r);return Hg(e)}function Hg(r){let e=r[1],t=N(e,"base64url"),n=r[2][1][0],o=1,i,s;if(e.byteLength===La)return i=N(n.subarray(o,o+La),"base64url"),s=N(n.subarray(o+La),"base64url"),new ms({...R7,key_ops:["sign"],d:t,x:i,y:s});if(e.byteLength===Da)return i=N(n.subarray(o,o+Da),"base64url"),s=N(n.subarray(o+Da),"base64url"),new ms({...P7,key_ops:["sign"],d:t,x:i,y:s});if(e.byteLength===Na)return i=N(n.subarray(o,o+Na),"base64url"),s=N(n.subarray(o+Na),"base64url"),new ms({...L7,key_ops:["sign"],d:t,x:i,y:s});throw new _(`Private key length was wrong length, got ${e.byteLength}, expected 32, 48 or 66`)}function qg(r){let e=en(r);return N7(e)}function N7(r){let e=r[1][1][0],t=1,n,o;if(e.byteLength===La*2+1)return n=N(e.subarray(t,t+La),"base64url"),o=N(e.subarray(t+La),"base64url"),new ps({...R7,key_ops:["verify"],x:n,y:o});if(e.byteLength===Da*2+1)return n=N(e.subarray(t,t+Da),"base64url"),o=N(e.subarray(t+Da),"base64url"),new ps({...P7,key_ops:["verify"],x:n,y:o});if(e.byteLength===Na*2+1)return n=N(e.subarray(t,t+Na),"base64url"),o=N(e.subarray(t+Na),"base64url"),new ps({...L7,key_ops:["verify"],x:n,y:o});throw new _(`coordinates were wrong length, got ${e.byteLength}, expected 65, 97 or 133`)}function O7(r){return bn([lr(Uint8Array.from([1])),S7(C(r.d??"","base64url")),bn([M7(r.crv)],160),bn([kl(new ne(Uint8Array.from([4]),C(r.x??"","base64url"),C(r.y??"","base64url")))],161)]).subarray()}function B7(r){return bn([lr(Uint8Array.from([1])),bn([M7(r.crv)],160),bn([kl(new ne(Uint8Array.from([4]),C(r.x??"","base64url"),C(r.y??"","base64url")))],161)]).subarray()}function M7(r){if(r==="P-256")return CR;if(r==="P-384")return RR;if(r==="P-521")return PR;throw new _(`Invalid curve ${r}`)}async function U7(r="P-256"){let e=await I7(r);return new ms(e.privateKey)}var ps=class{type="ECDSA";jwk;_raw;constructor(e){this.jwk=e}get raw(){return this._raw==null&&(this._raw=B7(this.jwk)),this._raw}toMultihash(){return gt.digest(It(this))}toCID(){return Z.createV1(114,this.toMultihash())}toString(){return Ge.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:se(this.raw,e.raw)}async verify(e,t,n){return C7(this.jwk,t,e,n)}},ms=class{type="ECDSA";jwk;publicKey;_raw;constructor(e){this.jwk=e,this.publicKey=new ps({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=O7(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:se(this.raw,e.raw)}async sign(e,t){return k7(this.jwk,e,t)}};function gs(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function Yt(r,e=""){if(!Number.isSafeInteger(r)||r<0){let t=e&&`"${e}" `;throw new Error(`${t}expected integer >= 0, got ${r}`)}}function ge(r,e,t=""){let n=gs(r),o=r?.length,i=e!==void 0;if(!n||i&&o!==e){let s=t&&`"${t}" `,a=i?` of length ${e}`:"",c=n?`length=${o}`:`type=${typeof r}`;throw new Error(s+"expected Uint8Array"+a+", got "+c)}return r}function Ao(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash must wrapped by utils.createHasher");Yt(r.outputLen),Yt(r.blockLen)}function Oa(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 $7(r,e){ge(r,void 0,"digestInto() output");let t=e.outputLen;if(r.length<t)throw new Error('"digestInto() output" expected to be of length >='+t)}function Xt(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function ys(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function xn(r,e){return r<<32-e|r>>>e}function Bf(r,e){return r<<e|r>>>32-e>>>0}var V7=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",LR=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function To(r){if(ge(r),V7)return r.toHex();let e="";for(let t=0;t<r.length;t++)e+=LR[r[t]];return e}var So={_0:48,_9:57,A:65,F:70,a:97,f:102};function F7(r){if(r>=So._0&&r<=So._9)return r-So._0;if(r>=So.A&&r<=So.F)return r-(So.A-10);if(r>=So.a&&r<=So.f)return r-(So.a-10)}function _o(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);if(V7)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=F7(r.charCodeAt(i)),a=F7(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}var DR=async()=>{};async function K7(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 DR(),n+=i)}}function NR(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}function zg(r,e=""){return typeof r=="string"?NR(r):ge(r,void 0,e)}function wr(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];ge(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 H7(r,e){if(e!==void 0&&{}.toString.call(e)!=="[object Object]")throw new Error("options must be object or undefined");return Object.assign(r,e)}function Cl(r,e={}){let t=(o,i)=>r(i).update(o).digest(),n=r(void 0);return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=o=>r(o),Object.assign(t,e),Object.freeze(t)}function Wn(r=32){let e=typeof globalThis=="object"?globalThis.crypto:null;if(typeof e?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");return e.getRandomValues(new Uint8Array(r))}var Wg=r=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,r])});function Mf(r,e,t){return r&e^~r&t}function Uf(r,e,t){return r&e^r&t^e&t}var ws=class{blockLen;outputLen;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(e,t,n,o){this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.buffer=new Uint8Array(e),this.view=ys(this.buffer)}update(e){Oa(this),ge(e);let{view:t,buffer:n,blockLen:o}=this,i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let c=ys(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){Oa(this),$7(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,Xt(this.buffer.subarray(s)),this.padOffset>o-s&&(this.process(n,0),s=0);for(let d=s;d<o;d++)t[d]=0;n.setBigUint64(o-8,BigInt(this.length*8),i),this.process(n,0);let a=ys(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen must 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||=new this.constructor,e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:s,pos:a}=this;return e.destroyed=s,e.finished=i,e.length=o,e.pos=a,o%t&&e.buffer.set(n),e}clone(){return this._cloneInto()}},Io=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var Mt=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var Ff=BigInt(4294967295),q7=BigInt(32);function OR(r,e=!1){return e?{h:Number(r&Ff),l:Number(r>>q7&Ff)}:{h:Number(r>>q7&Ff)|0,l:Number(r&Ff)|0}}function z7(r,e=!1){let t=r.length,n=new Uint32Array(t),o=new Uint32Array(t);for(let i=0;i<t;i++){let{h:s,l:a}=OR(r[i],e);[n[i],o[i]]=[s,a]}return[n,o]}var Gg=(r,e,t)=>r>>>t,jg=(r,e,t)=>r<<32-t|e>>>t,bs=(r,e,t)=>r>>>t|e<<32-t,xs=(r,e,t)=>r<<32-t|e>>>t,Rl=(r,e,t)=>r<<64-t|e>>>t-32,Pl=(r,e,t)=>r>>>t-32|e<<64-t;function Gn(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var W7=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),G7=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,j7=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),Y7=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,X7=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),Q7=(r,e,t,n,o,i)=>e+t+n+o+i+(r/2**32|0)|0;var MR=Uint32Array.from([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]),fi=new Uint32Array(64),Yg=class extends ws{constructor(e){super(64,e,8,!1)}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)fi[d]=e.getUint32(t,!1);for(let d=16;d<64;d++){let f=fi[d-15],h=fi[d-2],p=xn(f,7)^xn(f,18)^f>>>3,y=xn(h,17)^xn(h,19)^h>>>10;fi[d]=y+fi[d-7]+p+fi[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=xn(a,6)^xn(a,11)^xn(a,25),h=u+f+Mf(a,c,l)+MR[d]+fi[d]|0,y=(xn(n,2)^xn(n,13)^xn(n,22))+Uf(n,o,i)|0;u=l,l=c,c=a,a=s+h|0,s=i,i=o,o=n,n=h+y|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(){Xt(fi)}destroy(){this.set(0,0,0,0,0,0,0,0),Xt(this.buffer)}},Xg=class extends Yg{A=Io[0]|0;B=Io[1]|0;C=Io[2]|0;D=Io[3]|0;E=Io[4]|0;F=Io[5]|0;G=Io[6]|0;H=Io[7]|0;constructor(){super(32)}};var Z7=z7(["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))),UR=Z7[0],FR=Z7[1],hi=new Uint32Array(80),pi=new Uint32Array(80),Qg=class extends ws{constructor(e){super(128,e,16,!1)}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:y,Hl:g}=this;return[e,t,n,o,i,s,a,c,l,u,d,f,h,p,y,g]}set(e,t,n,o,i,s,a,c,l,u,d,f,h,p,y,g){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=y|0,this.Hl=g|0}process(e,t){for(let v=0;v<16;v++,t+=4)hi[v]=e.getUint32(t),pi[v]=e.getUint32(t+=4);for(let v=16;v<80;v++){let L=hi[v-15]|0,K=pi[v-15]|0,V=bs(L,K,1)^bs(L,K,8)^Gg(L,K,7),Y=xs(L,K,1)^xs(L,K,8)^jg(L,K,7),T=hi[v-2]|0,S=pi[v-2]|0,B=bs(T,S,19)^Rl(T,S,61)^Gg(T,S,6),$=xs(T,S,19)^Pl(T,S,61)^jg(T,S,6),D=j7(Y,$,pi[v-7],pi[v-16]),A=Y7(D,V,B,hi[v-7],hi[v-16]);hi[v]=A|0,pi[v]=D|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:y,Gl:g,Hh:m,Hl:b}=this;for(let v=0;v<80;v++){let L=bs(d,f,14)^bs(d,f,18)^Rl(d,f,41),K=xs(d,f,14)^xs(d,f,18)^Pl(d,f,41),V=d&h^~d&y,Y=f&p^~f&g,T=X7(b,K,Y,FR[v],pi[v]),S=Q7(T,m,L,V,UR[v],hi[v]),B=T|0,$=bs(n,o,28)^Rl(n,o,34)^Rl(n,o,39),D=xs(n,o,28)^Pl(n,o,34)^Pl(n,o,39),A=n&i^n&a^i&a,E=o&s^o&c^s&c;m=y|0,b=g|0,y=h|0,g=p|0,h=d|0,p=f|0,{h:d,l:f}=Gn(l|0,u|0,S|0,B|0),l=a|0,u=c|0,a=i|0,c=s|0,i=n|0,s=o|0;let x=W7(B,D,E);n=G7(x,S,$,A),o=x|0}({h:n,l:o}=Gn(this.Ah|0,this.Al|0,n|0,o|0)),{h:i,l:s}=Gn(this.Bh|0,this.Bl|0,i|0,s|0),{h:a,l:c}=Gn(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:u}=Gn(this.Dh|0,this.Dl|0,l|0,u|0),{h:d,l:f}=Gn(this.Eh|0,this.El|0,d|0,f|0),{h,l:p}=Gn(this.Fh|0,this.Fl|0,h|0,p|0),{h:y,l:g}=Gn(this.Gh|0,this.Gl|0,y|0,g|0),{h:m,l:b}=Gn(this.Hh|0,this.Hl|0,m|0,b|0),this.set(n,o,i,s,a,c,l,u,d,f,h,p,y,g,m,b)}roundClean(){Xt(hi,pi)}destroy(){Xt(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}},Zg=class extends Qg{Ah=Mt[0]|0;Al=Mt[1]|0;Bh=Mt[2]|0;Bl=Mt[3]|0;Ch=Mt[4]|0;Cl=Mt[5]|0;Dh=Mt[6]|0;Dl=Mt[7]|0;Eh=Mt[8]|0;El=Mt[9]|0;Fh=Mt[10]|0;Fl=Mt[11]|0;Gh=Mt[12]|0;Gl=Mt[13]|0;Hh=Mt[14]|0;Hl=Mt[15]|0;constructor(){super(64)}};var tn=Cl(()=>new Xg,Wg(1));var mi=Cl(()=>new Zg,Wg(3));var e3=BigInt(0),Jg=BigInt(1);function ko(r,e=""){if(typeof r!="boolean"){let t=e&&`"${e}" `;throw new Error(t+"expected boolean, got type="+typeof r)}return r}function J7(r){if(typeof r=="bigint"){if(!$f(r))throw new Error("positive bigint expected, got "+r)}else Yt(r);return r}function Ll(r){let e=J7(r).toString(16);return e.length&1?"0"+e:e}function e9(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return r===""?e3:BigInt("0x"+r)}function Ba(r){return e9(To(r))}function jn(r){return e9(To(Es(ge(r)).reverse()))}function Vf(r,e){Yt(e),r=J7(r);let t=_o(r.toString(16).padStart(e*2,"0"));if(t.length!==e)throw new Error("number too large");return t}function Dl(r,e){return Vf(r,e).reverse()}function Es(r){return Uint8Array.from(r)}var $f=r=>typeof r=="bigint"&&e3<=r;function $R(r,e,t){return $f(r)&&$f(e)&&$f(t)&&e<=r&&r<t}function gi(r,e,t,n){if(!$R(e,t,n))throw new Error("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function t3(r){let e;for(e=0;r>e3;r>>=Jg,e+=1);return e}var Nl=r=>(Jg<<BigInt(r))-Jg;function t9(r,e,t){if(Yt(r,"hashLen"),Yt(e,"qByteLen"),typeof t!="function")throw new Error("hmacFn must be a function");let n=g=>new Uint8Array(g),o=Uint8Array.of(),i=Uint8Array.of(0),s=Uint8Array.of(1),a=1e3,c=n(r),l=n(r),u=0,d=()=>{c.fill(1),l.fill(0),u=0},f=(...g)=>t(l,wr(c,...g)),h=(g=o)=>{l=f(i,g),c=f(),g.length!==0&&(l=f(s,g),c=f())},p=()=>{if(u++>=a)throw new Error("drbg: tried max amount of iterations");let g=0,m=[];for(;g<e;){c=f();let b=c.slice();m.push(b),g+=c.length}return wr(...m)};return(g,m)=>{d(),h(g);let b;for(;!(b=m(p()));)h();return d(),b}}function Yn(r,e={},t={}){if(!r||typeof r!="object")throw new Error("expected valid options object");function n(i,s,a){let c=r[i];if(a&&c===void 0)return;let l=typeof c;if(l!==s||c===null)throw new Error(`param "${i}" is invalid: expected ${s}, got ${l}`)}let o=(i,s)=>Object.entries(i).forEach(([a,c])=>n(a,c,s));o(e,!1),o(t,!0)}function Ma(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 ur=BigInt(0),kt=BigInt(1),vs=BigInt(2),o9=BigInt(3),i9=BigInt(4),s9=BigInt(5),VR=BigInt(7),a9=BigInt(8),KR=BigInt(9),c9=BigInt(16);function ot(r,e){let t=r%e;return t>=ur?t:e+t}function Je(r,e,t){let n=r;for(;e-- >ur;)n*=n,n%=t;return n}function r9(r,e){if(r===ur)throw new Error("invert: expected non-zero number");if(e<=ur)throw new Error("invert: expected positive modulus, got "+e);let t=ot(r,e),n=e,o=ur,i=kt,s=kt,a=ur;for(;t!==ur;){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!==kt)throw new Error("invert: does not exist");return ot(o,e)}function n3(r,e,t){if(!r.eql(r.sqr(e),t))throw new Error("Cannot find square root")}function l9(r,e){let t=(r.ORDER+kt)/i9,n=r.pow(e,t);return n3(r,n,e),n}function HR(r,e){let t=(r.ORDER-s9)/a9,n=r.mul(e,vs),o=r.pow(n,t),i=r.mul(e,o),s=r.mul(r.mul(i,vs),o),a=r.mul(i,r.sub(s,r.ONE));return n3(r,a,e),a}function qR(r){let e=Ua(r),t=u9(r),n=t(e,e.neg(e.ONE)),o=t(e,n),i=t(e,e.neg(n)),s=(r+VR)/c9;return(a,c)=>{let l=a.pow(c,s),u=a.mul(l,n),d=a.mul(l,o),f=a.mul(l,i),h=a.eql(a.sqr(u),c),p=a.eql(a.sqr(d),c);l=a.cmov(l,u,h),u=a.cmov(f,d,p);let y=a.eql(a.sqr(u),c),g=a.cmov(l,u,y);return n3(a,g,c),g}}function u9(r){if(r<o9)throw new Error("sqrt is not defined for small field");let e=r-kt,t=0;for(;e%vs===ur;)e/=vs,t++;let n=vs,o=Ua(r);for(;n9(o,n)===1;)if(n++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(t===1)return l9;let i=o.pow(n,e),s=(e+kt)/vs;return function(c,l){if(c.is0(l))return l;if(n9(c,l)!==1)throw new Error("Cannot find square root");let u=t,d=c.mul(c.ONE,i),f=c.pow(l,e),h=c.pow(l,s);for(;!c.eql(f,c.ONE);){if(c.is0(f))return c.ZERO;let p=1,y=c.sqr(f);for(;!c.eql(y,c.ONE);)if(p++,y=c.sqr(y),p===u)throw new Error("Cannot find square root");let g=kt<<BigInt(u-p-1),m=c.pow(d,g);u=p,d=c.sqr(m),f=c.mul(f,d),h=c.mul(h,m)}return h}}function zR(r){return r%i9===o9?l9:r%a9===s9?HR:r%c9===KR?qR(r):u9(r)}var d9=(r,e)=>(ot(r,e)&kt)===kt,WR=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function o3(r){let e={ORDER:"bigint",BYTES:"number",BITS:"number"},t=WR.reduce((n,o)=>(n[o]="function",n),e);return Yn(r,t),r}function GR(r,e,t){if(t<ur)throw new Error("invalid exponent, negatives unsupported");if(t===ur)return r.ONE;if(t===kt)return e;let n=r.ONE,o=e;for(;t>ur;)t&kt&&(n=r.mul(n,o)),o=r.sqr(o),t>>=kt;return n}function Ol(r,e,t=!1){let n=new Array(e.length).fill(t?r.ZERO:void 0),o=e.reduce((s,a,c)=>r.is0(a)?s:(n[c]=s,r.mul(s,a)),r.ONE),i=r.inv(o);return e.reduceRight((s,a,c)=>r.is0(a)?s:(n[c]=r.mul(s,n[c]),r.mul(s,a)),i),n}function n9(r,e){let t=(r.ORDER-kt)/vs,n=r.pow(e,t),o=r.eql(n,r.ONE),i=r.eql(n,r.ZERO),s=r.eql(n,r.neg(r.ONE));if(!o&&!i&&!s)throw new Error("invalid Legendre symbol result");return o?1:i?0:-1}function jR(r,e){e!==void 0&&Yt(e);let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}var r3=class{ORDER;BITS;BYTES;isLE;ZERO=ur;ONE=kt;_lengths;_sqrt;_mod;constructor(e,t={}){if(e<=ur)throw new Error("invalid field: expected ORDER > 0, got "+e);let n;this.isLE=!1,t!=null&&typeof t=="object"&&(typeof t.BITS=="number"&&(n=t.BITS),typeof t.sqrt=="function"&&(this.sqrt=t.sqrt),typeof t.isLE=="boolean"&&(this.isLE=t.isLE),t.allowedLengths&&(this._lengths=t.allowedLengths?.slice()),typeof t.modFromBytes=="boolean"&&(this._mod=t.modFromBytes));let{nBitLength:o,nByteLength:i}=jR(e,n);if(i>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");this.ORDER=e,this.BITS=o,this.BYTES=i,this._sqrt=void 0,Object.preventExtensions(this)}create(e){return ot(e,this.ORDER)}isValid(e){if(typeof e!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof e);return ur<=e&&e<this.ORDER}is0(e){return e===ur}isValidNot0(e){return!this.is0(e)&&this.isValid(e)}isOdd(e){return(e&kt)===kt}neg(e){return ot(-e,this.ORDER)}eql(e,t){return e===t}sqr(e){return ot(e*e,this.ORDER)}add(e,t){return ot(e+t,this.ORDER)}sub(e,t){return ot(e-t,this.ORDER)}mul(e,t){return ot(e*t,this.ORDER)}pow(e,t){return GR(this,e,t)}div(e,t){return ot(e*r9(t,this.ORDER),this.ORDER)}sqrN(e){return e*e}addN(e,t){return e+t}subN(e,t){return e-t}mulN(e,t){return e*t}inv(e){return r9(e,this.ORDER)}sqrt(e){return this._sqrt||(this._sqrt=zR(this.ORDER)),this._sqrt(this,e)}toBytes(e){return this.isLE?Dl(e,this.BYTES):Vf(e,this.BYTES)}fromBytes(e,t=!1){ge(e);let{_lengths:n,BYTES:o,isLE:i,ORDER:s,_mod:a}=this;if(n){if(!n.includes(e.length)||e.length>o)throw new Error("Field.fromBytes: expected "+n+" bytes, got "+e.length);let l=new Uint8Array(o);l.set(e,i?0:l.length-e.length),e=l}if(e.length!==o)throw new Error("Field.fromBytes: expected "+o+" bytes, got "+e.length);let c=i?jn(e):Ba(e);if(a&&(c=ot(c,s)),!t&&!this.isValid(c))throw new Error("invalid field element: outside of range 0..ORDER");return c}invertBatch(e){return Ol(this,e)}cmov(e,t,n){return n?t:e}};function Ua(r,e={}){return new r3(r,e)}function f9(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 i3(r){let e=f9(r);return e+Math.ceil(e/2)}function s3(r,e,t=!1){ge(r);let n=r.length,o=f9(e),i=i3(e);if(n<16||n<i||n>1024)throw new Error("expected "+i+"-1024 bytes of input, got "+n);let s=t?jn(r):Ba(r),a=ot(s,e-kt)+kt;return t?Dl(a,o):Vf(a,o)}var Fa=BigInt(0),Ss=BigInt(1);function Bl(r,e){let t=e.negate();return r?t:e}function As(r,e){let t=Ol(r.Fp,e.map(n=>n.Z));return e.map((n,o)=>r.fromAffine(n.toAffine(t[o])))}function g9(r,e){if(!Number.isSafeInteger(r)||r<=0||r>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+r)}function a3(r,e){g9(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1),o=2**r,i=Nl(r),s=BigInt(r);return{windows:t,windowSize:n,mask:i,maxNumber:o,shiftBy:s}}function h9(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+=Ss);let l=e*n,u=l+Math.abs(a)-1,d=a===0,f=a<0,h=e%2!==0;return{nextN:c,offset:u,isZero:d,isNeg:f,isNegF:h,offsetF:l}}var c3=new WeakMap,y9=new WeakMap;function l3(r){return y9.get(r)||1}function p9(r){if(r!==Fa)throw new Error("invalid wNAF")}var $a=class{BASE;ZERO;Fn;bits;constructor(e,t){this.BASE=e.BASE,this.ZERO=e.ZERO,this.Fn=e.Fn,this.bits=t}_unsafeLadder(e,t,n=this.ZERO){let o=e;for(;t>Fa;)t&Ss&&(n=n.add(o)),o=o.double(),t>>=Ss;return n}precomputeWindow(e,t){let{windows:n,windowSize:o}=a3(t,this.bits),i=[],s=e,a=s;for(let c=0;c<n;c++){a=s,i.push(a);for(let l=1;l<o;l++)a=a.add(s),i.push(a);s=a.double()}return i}wNAF(e,t,n){if(!this.Fn.isValid(n))throw new Error("invalid scalar");let o=this.ZERO,i=this.BASE,s=a3(e,this.bits);for(let a=0;a<s.windows;a++){let{nextN:c,offset:l,isZero:u,isNeg:d,isNegF:f,offsetF:h}=h9(n,a,s);n=c,u?i=i.add(Bl(f,t[h])):o=o.add(Bl(d,t[l]))}return p9(n),{p:o,f:i}}wNAFUnsafe(e,t,n,o=this.ZERO){let i=a3(e,this.bits);for(let s=0;s<i.windows&&n!==Fa;s++){let{nextN:a,offset:c,isZero:l,isNeg:u}=h9(n,s,i);if(n=a,!l){let d=t[c];o=o.add(u?d.negate():d)}}return p9(n),o}getPrecomputes(e,t,n){let o=c3.get(t);return o||(o=this.precomputeWindow(t,e),e!==1&&(typeof n=="function"&&(o=n(o)),c3.set(t,o))),o}cached(e,t,n){let o=l3(e);return this.wNAF(o,this.getPrecomputes(o,e,n),t)}unsafe(e,t,n,o){let i=l3(e);return i===1?this._unsafeLadder(e,t,o):this.wNAFUnsafe(i,this.getPrecomputes(i,e,n),t,o)}createCache(e,t){g9(t,this.bits),y9.set(e,t),c3.delete(e)}hasCache(e){return l3(e)!==1}};function w9(r,e,t,n){let o=e,i=r.ZERO,s=r.ZERO;for(;t>Fa||n>Fa;)t&Ss&&(i=i.add(o)),n&Ss&&(s=s.add(o)),o=o.double(),t>>=Ss,n>>=Ss;return{p1:i,p2:s}}function m9(r,e,t){if(e){if(e.ORDER!==r)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return o3(e),e}else return Ua(r,{isLE:t})}function Kf(r,e,t={},n){if(n===void 0&&(n=r==="edwards"),!e||typeof e!="object")throw new Error(`expected valid ${r} CURVE object`);for(let c of["p","n","h"]){let l=e[c];if(!(typeof l=="bigint"&&l>Fa))throw new Error(`CURVE.${c} must be positive bigint`)}let o=m9(e.p,t.Fp,n),i=m9(e.n,t.Fn,n),a=["Gx","Gy","a",r==="weierstrass"?"b":"d"];for(let c of a)if(!o.isValid(e[c]))throw new Error(`CURVE.${c} must be valid field element of CURVE.Fp`);return e=Object.freeze(Object.assign({},e)),{CURVE:e,Fp:o,Fn:i}}function Va(r,e){return function(n){let o=r(n);return{secretKey:o,publicKey:e(o)}}}var yi=BigInt(0),Ct=BigInt(1),u3=BigInt(2),YR=BigInt(8);function XR(r,e,t,n){let o=r.sqr(t),i=r.sqr(n),s=r.add(r.mul(e.a,o),i),a=r.add(r.ONE,r.mul(e.d,r.mul(o,i)));return r.eql(s,a)}function b9(r,e={}){let t=Kf("edwards",r,e,e.FpFnLE),{Fp:n,Fn:o}=t,i=t.CURVE,{h:s}=i;Yn(e,{},{uvRatio:"function"});let a=u3<<BigInt(o.BYTES*8)-Ct,c=g=>n.create(g),l=e.uvRatio||((g,m)=>{try{return{isValid:!0,value:n.sqrt(n.div(g,m))}}catch{return{isValid:!1,value:yi}}});if(!XR(n,i,i.Gx,i.Gy))throw new Error("bad curve params: generator point");function u(g,m,b=!1){let v=b?Ct:yi;return gi("coordinate "+g,m,v,a),m}function d(g){if(!(g instanceof p))throw new Error("EdwardsPoint expected")}let f=Ma((g,m)=>{let{X:b,Y:v,Z:L}=g,K=g.is0();m==null&&(m=K?YR:n.inv(L));let V=c(b*m),Y=c(v*m),T=n.mul(L,m);if(K)return{x:yi,y:Ct};if(T!==Ct)throw new Error("invZ was invalid");return{x:V,y:Y}}),h=Ma(g=>{let{a:m,d:b}=i;if(g.is0())throw new Error("bad point: ZERO");let{X:v,Y:L,Z:K,T:V}=g,Y=c(v*v),T=c(L*L),S=c(K*K),B=c(S*S),$=c(Y*m),D=c(S*c($+T)),A=c(B+c(b*c(Y*T)));if(D!==A)throw new Error("bad point: equation left != right (1)");let E=c(v*L),x=c(K*V);if(E!==x)throw new Error("bad point: equation left != right (2)");return!0});class p{static BASE=new p(i.Gx,i.Gy,Ct,c(i.Gx*i.Gy));static ZERO=new p(yi,Ct,Ct,yi);static Fp=n;static Fn=o;X;Y;Z;T;constructor(m,b,v,L){this.X=u("x",m),this.Y=u("y",b),this.Z=u("z",v,!0),this.T=u("t",L),Object.freeze(this)}static CURVE(){return i}static fromAffine(m){if(m instanceof p)throw new Error("extended point not allowed");let{x:b,y:v}=m||{};return u("x",b),u("y",v),new p(b,v,Ct,c(b*v))}static fromBytes(m,b=!1){let v=n.BYTES,{a:L,d:K}=i;m=Es(ge(m,v,"point")),ko(b,"zip215");let V=Es(m),Y=m[v-1];V[v-1]=Y&-129;let T=jn(V),S=b?a:n.ORDER;gi("point.y",T,yi,S);let B=c(T*T),$=c(B-Ct),D=c(K*B-L),{isValid:A,value:E}=l($,D);if(!A)throw new Error("bad point: invalid y coordinate");let x=(E&Ct)===Ct,R=(Y&128)!==0;if(!b&&E===yi&&R)throw new Error("bad point: x=0 and x_0=1");return R!==x&&(E=c(-E)),p.fromAffine({x:E,y:T})}static fromHex(m,b=!1){return p.fromBytes(_o(m),b)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(m=8,b=!0){return y.createCache(this,m),b||this.multiply(u3),this}assertValidity(){h(this)}equals(m){d(m);let{X:b,Y:v,Z:L}=this,{X:K,Y:V,Z:Y}=m,T=c(b*Y),S=c(K*L),B=c(v*Y),$=c(V*L);return T===S&&B===$}is0(){return this.equals(p.ZERO)}negate(){return new p(c(-this.X),this.Y,this.Z,c(-this.T))}double(){let{a:m}=i,{X:b,Y:v,Z:L}=this,K=c(b*b),V=c(v*v),Y=c(u3*c(L*L)),T=c(m*K),S=b+v,B=c(c(S*S)-K-V),$=T+V,D=$-Y,A=T-V,E=c(B*D),x=c($*A),R=c(B*A),U=c(D*$);return new p(E,x,U,R)}add(m){d(m);let{a:b,d:v}=i,{X:L,Y:K,Z:V,T:Y}=this,{X:T,Y:S,Z:B,T:$}=m,D=c(L*T),A=c(K*S),E=c(Y*v*$),x=c(V*B),R=c((L+K)*(T+S)-D-A),U=x-E,M=x+E,P=c(A-b*D),H=c(R*U),q=c(M*P),Q=c(R*P),ke=c(U*M);return new p(H,q,ke,Q)}subtract(m){return this.add(m.negate())}multiply(m){if(!o.isValidNot0(m))throw new Error("invalid scalar: expected 1 <= sc < curve.n");let{p:b,f:v}=y.cached(this,m,L=>As(p,L));return As(p,[b,v])[0]}multiplyUnsafe(m,b=p.ZERO){if(!o.isValid(m))throw new Error("invalid scalar: expected 0 <= sc < curve.n");return m===yi?p.ZERO:this.is0()||m===Ct?this:y.unsafe(this,m,v=>As(p,v),b)}isSmallOrder(){return this.multiplyUnsafe(s).is0()}isTorsionFree(){return y.unsafe(this,i.n).is0()}toAffine(m){return f(this,m)}clearCofactor(){return s===Ct?this:this.multiplyUnsafe(s)}toBytes(){let{x:m,y:b}=this.toAffine(),v=n.toBytes(b);return v[v.length-1]|=m&Ct?128:0,v}toHex(){return To(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let y=new $a(p,o.BITS);return p.BASE.precompute(8),p}function x9(r,e,t={}){if(typeof e!="function")throw new Error('"hash" function param is required');Yn(t,{},{adjustScalarBytes:"function",randomBytes:"function",domain:"function",prehash:"function",mapToCurve:"function"});let{prehash:n}=t,{BASE:o,Fp:i,Fn:s}=r,a=t.randomBytes||Wn,c=t.adjustScalarBytes||(T=>T),l=t.domain||((T,S,B)=>{if(ko(B,"phflag"),S.length||B)throw new Error("Contexts/pre-hash are not supported");return T});function u(T){return s.create(jn(T))}function d(T){let S=v.secretKey;ge(T,v.secretKey,"secretKey");let B=ge(e(T),2*S,"hashedSecretKey"),$=c(B.slice(0,S)),D=B.slice(S,2*S),A=u($);return{head:$,prefix:D,scalar:A}}function f(T){let{head:S,prefix:B,scalar:$}=d(T),D=o.multiply($),A=D.toBytes();return{head:S,prefix:B,scalar:$,point:D,pointBytes:A}}function h(T){return f(T).pointBytes}function p(T=Uint8Array.of(),...S){let B=wr(...S);return u(e(l(B,ge(T,void 0,"context"),!!n)))}function y(T,S,B={}){T=ge(T,void 0,"message"),n&&(T=n(T));let{prefix:$,scalar:D,pointBytes:A}=f(S),E=p(B.context,$,T),x=o.multiply(E).toBytes(),R=p(B.context,x,A,T),U=s.create(E+R*D);if(!s.isValid(U))throw new Error("sign failed: invalid s");let M=wr(x,s.toBytes(U));return ge(M,v.signature,"result")}let g={zip215:!0};function m(T,S,B,$=g){let{context:D,zip215:A}=$,E=v.signature;T=ge(T,E,"signature"),S=ge(S,void 0,"message"),B=ge(B,v.publicKey,"publicKey"),A!==void 0&&ko(A,"zip215"),n&&(S=n(S));let x=E/2,R=T.subarray(0,x),U=jn(T.subarray(x,E)),M,P,H;try{M=r.fromBytes(B,A),P=r.fromBytes(R,A),H=o.multiplyUnsafe(U)}catch{return!1}if(!A&&M.isSmallOrder())return!1;let q=p(D,P.toBytes(),M.toBytes(),S);return P.add(M.multiplyUnsafe(q)).subtract(H).clearCofactor().is0()}let b=i.BYTES,v={secretKey:b,publicKey:b,signature:2*b,seed:b};function L(T=a(v.seed)){return ge(T,v.seed,"seed")}function K(T){return gs(T)&&T.length===s.BYTES}function V(T,S){try{return!!r.fromBytes(T,S)}catch{return!1}}let Y={getExtendedPublicKey:f,randomSecretKey:L,isValidSecretKey:K,isValidPublicKey:V,toMontgomery(T){let{y:S}=r.fromBytes(T),B=v.publicKey,$=B===32;if(!$&&B!==57)throw new Error("only defined for 25519 and 448");let D=$?i.div(Ct+S,Ct-S):i.div(S-Ct,S+Ct);return i.toBytes(D)},toMontgomerySecret(T){let S=v.secretKey;ge(T,S);let B=e(T.subarray(0,S));return c(B).subarray(0,S)}};return Object.freeze({keygen:Va(L,h),getPublicKey:h,sign:y,verify:m,utils:Y,Point:r,lengths:v})}var Ml=BigInt(0),Ka=BigInt(1),Hf=BigInt(2);function QR(r){return Yn(r,{adjustScalarBytes:"function",powPminus2:"function"}),Object.freeze({...r})}function E9(r){let e=QR(r),{P:t,type:n,adjustScalarBytes:o,powPminus2:i,randomBytes:s}=e,a=n==="x25519";if(!a&&n!=="x448")throw new Error("invalid type");let c=s||Wn,l=a?255:448,u=a?32:56,d=BigInt(a?9:5),f=BigInt(a?121665:39081),h=a?Hf**BigInt(254):Hf**BigInt(447),p=a?BigInt(8)*Hf**BigInt(251)-Ka:BigInt(4)*Hf**BigInt(445)-Ka,y=h+p+Ka,g=E=>ot(E,t),m=b(d);function b(E){return Dl(g(E),u)}function v(E){let x=Es(ge(E,u,"uCoordinate"));return a&&(x[31]&=127),g(jn(x))}function L(E){return jn(o(Es(ge(E,u,"scalar"))))}function K(E,x){let R=B(v(x),L(E));if(R===Ml)throw new Error("invalid private or public key received");return b(R)}function V(E){return K(E,m)}let Y=V,T=K;function S(E,x,R){let U=g(E*(x-R));return x=g(x-U),R=g(R+U),{x_2:x,x_3:R}}function B(E,x){gi("u",E,Ml,t),gi("scalar",x,h,y);let R=x,U=E,M=Ka,P=Ml,H=E,q=Ka,Q=Ml;for(let Ae=BigInt(l-1);Ae>=Ml;Ae--){let xe=R>>Ae&Ka;Q^=xe,{x_2:M,x_3:H}=S(Q,M,H),{x_2:P,x_3:q}=S(Q,P,q),Q=xe;let Ce=M+P,ze=g(Ce*Ce),ft=M-P,Pe=g(ft*ft),xt=ze-Pe,Ea=H+q,hf=H-q,ul=g(hf*Ce),Vy=g(Ea*ft),Ky=ul+Vy,Hy=ul-Vy;H=g(Ky*Ky),q=g(U*g(Hy*Hy)),M=g(ze*Pe),P=g(xt*(ze+g(f*xt)))}({x_2:M,x_3:H}=S(Q,M,H)),{x_2:P,x_3:q}=S(Q,P,q);let ke=i(P);return g(M*ke)}let $={secretKey:u,publicKey:u,seed:u},D=(E=c(u))=>(ge(E,$.seed,"seed"),E),A={randomSecretKey:D};return Object.freeze({keygen:Va(D,Y),getSharedSecret:T,getPublicKey:Y,scalarMult:K,scalarMultBase:V,utils:A,GuBytes:m.slice(),lengths:$})}var ZR=BigInt(1),v9=BigInt(2),JR=BigInt(3),eP=BigInt(5),tP=BigInt(8),qf=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),rP={p:qf,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:tP,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function A9(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),i=qf,a=r*r%i*r%i,c=Je(a,v9,i)*a%i,l=Je(c,ZR,i)*r%i,u=Je(l,eP,i)*l%i,d=Je(u,e,i)*u%i,f=Je(d,t,i)*d%i,h=Je(f,n,i)*f%i,p=Je(h,o,i)*h%i,y=Je(p,o,i)*h%i,g=Je(y,e,i)*u%i;return{pow_p_5_8:Je(g,v9,i)*r%i,b2:a}}function T9(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}var S9=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function nP(r,e){let t=qf,n=ot(e*e*e,t),o=ot(n*n*e,t),i=A9(r*o).pow_p_5_8,s=ot(r*n*i,t),a=ot(e*s*s,t),c=s,l=ot(s*S9,t),u=a===r,d=a===ot(-r,t),f=a===ot(-r*S9,t);return u&&(s=c),(d||f)&&(s=l),d9(s,t)&&(s=ot(-s,t)),{isValid:u||d,value:s}}var oP=b9(rP,{uvRatio:nP});function iP(r){return x9(oP,mi,Object.assign({adjustScalarBytes:T9},r))}var Ul=iP({});var Fl=(()=>{let r=qf;return E9({P:r,type:"x25519",powPminus2:e=>{let{pow_p_5_8:t,b2:n}=A9(e);return ot(Je(t,JR,r)*n,r)},adjustScalarBytes:T9})})();var Ts=32,Cr=64,d3=32;var Ha,_9=(async()=>{try{return await yt.get().subtle.generateKey({name:"Ed25519"},!0,["sign","verify"]),!0}catch{return!1}})();function I9(){let r=Ul.utils.randomSecretKey(),e=Ul.getPublicKey(r);return{privateKey:uP(r,e),publicKey:e}}async function sP(r,e){let t;r.length===Cr?t=r.subarray(0,32):t=r;let n={crv:"Ed25519",kty:"OKP",x:N(r.subarray(32),"base64url"),d:N(t,"base64url"),ext:!0,key_ops:["sign"]},o=await yt.get().subtle.importKey("jwk",n,{name:"Ed25519"},!0,["sign"]),i=await yt.get().subtle.sign({name:"Ed25519"},o,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(i,0,i.byteLength)}function aP(r,e){let t=r.subarray(0,d3);return Ul.sign(e instanceof Uint8Array?e:e.subarray(),t)}async function k9(r,e){return Ha==null&&(Ha=await _9),Ha?sP(r,e):aP(r,e)}async function cP(r,e,t){if(r.buffer instanceof ArrayBuffer){let n=await yt.get().subtle.importKey("raw",r.buffer,{name:"Ed25519"},!1,["verify"]);return await yt.get().subtle.verify({name:"Ed25519"},n,e,t instanceof Uint8Array?t:t.subarray())}throw new TypeError("WebCrypto does not support SharedArrayBuffer for Ed25519 keys")}function lP(r,e,t){return Ul.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}async function C9(r,e,t){return Ha==null&&(Ha=await _9),Ha?cP(r,e,t):lP(r,e,t)}function uP(r,e){let t=new Uint8Array(Cr);for(let n=0;n<d3;n++)t[n]=r[n],t[d3+n]=e[n];return t}function qa(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var $l=class{type="Ed25519";raw;constructor(e){this.raw=Wa(e,Ts)}toMultihash(){return gt.digest(It(this))}toCID(){return Z.createV1(114,this.toMultihash())}toString(){return Ge.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:se(this.raw,e.raw)}verify(e,t,n){n?.signal?.throwIfAborted();let o=C9(this.raw,t,e);return qa(o)?o.then(i=>(n?.signal?.throwIfAborted(),i)):o}},za=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=Wa(e,Cr),this.publicKey=new $l(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:se(this.raw,e.raw)}sign(e,t){t?.signal?.throwIfAborted();let n=k9(this.raw,e);return qa(n)?n.then(o=>(t?.signal?.throwIfAborted(),o)):(t?.signal?.throwIfAborted(),n)}};function f3(r){if(r.length>Cr){r=Wa(r,Cr+Ts);let n=r.subarray(0,Cr),o=r.subarray(Cr,r.length);return new za(n,o)}r=Wa(r,Cr);let e=r.subarray(0,Cr),t=r.subarray(Ts);return new za(e,t)}function h3(r){return r=Wa(r,Ts),new $l(r)}async function P9(){let{privateKey:r,publicKey:e}=I9();return new za(r,e)}function Wa(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 dP=Math.pow(2,7),fP=Math.pow(2,14),hP=Math.pow(2,21),p3=Math.pow(2,28),m3=Math.pow(2,35),g3=Math.pow(2,42),y3=Math.pow(2,49),$e=128,Qt=127;function ye(r){if(r<dP)return 1;if(r<fP)return 2;if(r<hP)return 3;if(r<p3)return 4;if(r<m3)return 5;if(r<g3)return 6;if(r<y3)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Xn(r,e,t=0){switch(ye(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 pP(r,e,t=0){switch(ye(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 _s(r,e){let t=r[e],n=0;if(n+=t&Qt,t<$e||(t=r[e+1],n+=(t&Qt)<<7,t<$e)||(t=r[e+2],n+=(t&Qt)<<14,t<$e)||(t=r[e+3],n+=(t&Qt)<<21,t<$e)||(t=r[e+4],n+=(t&Qt)*p3,t<$e)||(t=r[e+5],n+=(t&Qt)*m3,t<$e)||(t=r[e+6],n+=(t&Qt)*g3,t<$e)||(t=r[e+7],n+=(t&Qt)*y3,t<$e))return n;throw new RangeError("Could not decode varint")}function mP(r,e){let t=r.get(e),n=0;if(n+=t&Qt,t<$e||(t=r.get(e+1),n+=(t&Qt)<<7,t<$e)||(t=r.get(e+2),n+=(t&Qt)<<14,t<$e)||(t=r.get(e+3),n+=(t&Qt)<<21,t<$e)||(t=r.get(e+4),n+=(t&Qt)*p3,t<$e)||(t=r.get(e+5),n+=(t&Qt)*m3,t<$e)||(t=r.get(e+6),n+=(t&Qt)*g3,t<$e)||(t=r.get(e+7),n+=(t&Qt)*y3,t<$e))return n;throw new RangeError("Could not decode varint")}function Zt(r,e,t=0){return e==null&&(e=Re(ye(r))),e instanceof Uint8Array?Xn(r,e,t):pP(r,e,t)}function Rr(r,e=0){return r instanceof Uint8Array?_s(r,e):mP(r,e)}var w3=new Float32Array([-0]),wi=new Uint8Array(w3.buffer);function L9(r,e,t){w3[0]=r,e[t]=wi[0],e[t+1]=wi[1],e[t+2]=wi[2],e[t+3]=wi[3]}function D9(r,e){return wi[0]=r[e],wi[1]=r[e+1],wi[2]=r[e+2],wi[3]=r[e+3],w3[0]}var b3=new Float64Array([-0]),Jt=new Uint8Array(b3.buffer);function N9(r,e,t){b3[0]=r,e[t]=Jt[0],e[t+1]=Jt[1],e[t+2]=Jt[2],e[t+3]=Jt[3],e[t+4]=Jt[4],e[t+5]=Jt[5],e[t+6]=Jt[6],e[t+7]=Jt[7]}function O9(r,e){return Jt[0]=r[e],Jt[1]=r[e+1],Jt[2]=r[e+2],Jt[3]=r[e+3],Jt[4]=r[e+4],Jt[5]=r[e+5],Jt[6]=r[e+6],Jt[7]=r[e+7],b3[0]}var gP=BigInt(Number.MAX_SAFE_INTEGER),yP=BigInt(Number.MIN_SAFE_INTEGER),Pr=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 Is;if(e<gP&&e>yP)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>B9&&(o=0n,++n>B9&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return Is;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):Is}},Is=new Pr(0,0);Is.toBigInt=function(){return 0n};Is.zzEncode=Is.zzDecode=function(){return this};Is.length=function(){return 1};var B9=4294967296n;function M9(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 U9(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 x3(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 En(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function zf(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var E3=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,En(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 En(this,4);return zf(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw En(this,4);return zf(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw En(this,4);let e=D9(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw En(this,4);let e=O9(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 En(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return U9(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw En(this,e);this.pos+=e}else do if(this.pos>=this.len)throw En(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 Pr(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 En(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 En(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 En(this,8);let e=zf(this.buf,this.pos+=4),t=zf(this.buf,this.pos+=4);return new Pr(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=_s(this.buf,this.pos);return this.pos+=ye(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 Vl(r){return new E3(r instanceof Uint8Array?r:r.subarray())}function fe(r,e,t){let n=Vl(r);return e.decode(n,void 0,t)}function v3(r){let e=r??8192,t=e>>>1,n,o=e;return function(s){if(s<1||s>t)return Re(s);o+s>e&&(n=Re(e),o=0);let a=n.subarray(o,o+=s);return(o&7)!==0&&(o=(o|7)+1),a}}var ks=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function S3(){}var T3=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},wP=v3();function bP(r){return globalThis.Buffer!=null?Re(r):wP(r)}var Hl=class{len;head;tail;states;constructor(){this.len=0,this.head=new ks(S3,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new ks(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new _3((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(Wf,10,Pr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=Pr.fromBigInt(e);return this._push(Wf,t.length(),t)}uint64Number(e){return this._push(Xn,ye(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=Pr.fromBigInt(e).zzEncode();return this._push(Wf,t.length(),t)}sint64Number(e){let t=Pr.fromNumber(e).zzEncode();return this._push(Wf,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(A3,1,e?1:0)}fixed32(e){return this._push(Kl,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=Pr.fromBigInt(e);return this._push(Kl,4,t.lo)._push(Kl,4,t.hi)}fixed64Number(e){let t=Pr.fromNumber(e);return this._push(Kl,4,t.lo)._push(Kl,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(L9,4,e)}double(e){return this._push(N9,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(A3,1,0):this.uint32(t)._push(EP,t,e)}string(e){let t=M9(e);return t!==0?this.uint32(t)._push(x3,t,e):this._push(A3,1,0)}fork(){return this.states=new T3(this),this.head=this.tail=new ks(S3,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 ks(S3,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=bP(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function A3(r,e,t){e[t]=r&255}function xP(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var _3=class extends ks{next;constructor(e,t){super(xP,e,t),this.next=void 0}};function Wf(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 Kl(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 EP(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(Hl.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(vP,e,r),this},Hl.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(SP,e,r),this});function vP(r,e,t){e.set(r,t)}function SP(r,e,t){r.length<40?x3(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(C(r),t)}function I3(){return new Hl}function he(r,e){let t=I3();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}function*pe(r,e,t){let n=Vl(r);yield*e.stream(n,void 0,"$",t)}var Gf={VARINT:0,BIT64:1,LENGTH_DELIMITED:2,START_GROUP:3,END_GROUP:4,BIT32:5};function jf(r,e,t,n,o){return{name:r,type:e,encode:t,decode:n,stream:o}}function lt(r){function e(i){if(r[i.toString()]==null)throw new Error("Invalid enum value");return r[i]}let t=function(s,a){let c=e(s);a.int32(c)},n=function(s){let a=s.int32();return e(a)},o=function*(s){let a=s.int32();yield e(a)};return jf("enum",Gf.VARINT,t,n,o)}function me(r,e,t){return jf("message",Gf.LENGTH_DELIMITED,r,e,t)}var Ee=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},ql=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var je;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1",r.ECDSA="ECDSA"})(je||(je={}));var k3;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1",r[r.ECDSA=3]="ECDSA"})(k3||(k3={}));(function(r){r.codec=()=>lt(k3)})(je||(je={}));var Qn;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.Type!=null&&(s.uint32(8),je.codec().encode(i.Type,s)),i.Data!=null&&(s.uint32(18),s.bytes(i.Data)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.Type=je.codec().decode(i);break}case 2:{c.Data=i.bytes();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.Type`,value:je.codec().decode(i)};break}case 2:{yield{field:`${a}.Data`,value:i.bytes()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Qn||(Qn={}));var zl;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.Type!=null&&(s.uint32(8),je.codec().encode(i.Type,s)),i.Data!=null&&(s.uint32(18),s.bytes(i.Data)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.Type=je.codec().decode(i);break}case 2:{c.Data=i.bytes();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.Type`,value:je.codec().decode(i)};break}case 2:{yield{field:`${a}.Data`,value:i.bytes()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(zl||(zl={}));function dr(r){if(isNaN(r)||r<=0)throw new _("random bytes length must be a Number bigger than 0");return Wn(r)}var Gl={};ht(Gl,{MAX_RSA_KEY_SIZE:()=>C3,generateRSAKeyPair:()=>U3,jwkToJWKKeyPair:()=>H9,jwkToPkcs1:()=>IP,jwkToPkix:()=>D3,jwkToRSAPrivateKey:()=>M3,pkcs1MessageToJwk:()=>P3,pkcs1MessageToRSAPrivateKey:()=>Yf,pkcs1ToJwk:()=>_P,pkcs1ToRSAPrivateKey:()=>N3,pkixMessageToJwk:()=>L3,pkixMessageToRSAPublicKey:()=>B3,pkixToJwk:()=>kP,pkixToRSAPublicKey:()=>O3});var Ga=class{type="RSA";jwk;_raw;_multihash;constructor(e,t){this.jwk=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=Gl.jwkToPkix(this.jwk)),this._raw}toMultihash(){return this._multihash}toCID(){return Z.createV1(114,this._multihash)}toString(){return Ge.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:se(this.raw,e.raw)}verify(e,t,n){return K9(this.jwk,t,e,n)}},Wl=class{type="RSA";jwk;_raw;publicKey;constructor(e,t){this.jwk=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=Gl.jwkToPkcs1(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:se(this.raw,e.raw)}sign(e,t){return V9(this.jwk,e,t)}};var C3=8192,R3=18,AP=1062,TP=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function _P(r){let e=en(r);return P3(e)}function P3(r){return{n:N(r[1],"base64url"),e:N(r[2],"base64url"),d:N(r[3],"base64url"),p:N(r[4],"base64url"),q:N(r[5],"base64url"),dp:N(r[6],"base64url"),dq:N(r[7],"base64url"),qi:N(r[8],"base64url"),kty:"RSA"}}function IP(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");return bn([lr(Uint8Array.from([0])),lr(C(r.n,"base64url")),lr(C(r.e,"base64url")),lr(C(r.d,"base64url")),lr(C(r.p,"base64url")),lr(C(r.q,"base64url")),lr(C(r.dp,"base64url")),lr(C(r.dq,"base64url")),lr(C(r.qi,"base64url"))]).subarray()}function kP(r){let e=en(r,{offset:0});return L3(e)}function L3(r){let e=en(r[1],{offset:0});return{kty:"RSA",n:N(e[0],"base64url"),e:N(e[1],"base64url")}}function D3(r){if(r.n==null||r.e==null)throw new _("JWK was missing components");return bn([TP,kl(bn([lr(C(r.n,"base64url")),lr(C(r.e,"base64url"))]))]).subarray()}function N3(r){let e=en(r);return Yf(e)}function Yf(r){let e=P3(r);return M3(e)}function O3(r,e){if(r.byteLength>=AP)throw new xo("Key size is too large");let t=en(r,{offset:0});return B3(t,r,e)}function B3(r,e,t){let n=L3(r);if(t==null){let o=tn(Qn.encode({Type:je.RSA,Data:e}));t=cr(R3,o)}return new Ga(n,t)}function M3(r){if(z9(r)>C3)throw new _("Key size is too large");let e=H9(r),t=tn(Qn.encode({Type:je.RSA,Data:D3(e.publicKey)})),n=cr(R3,t);return new Wl(e.privateKey,new Ga(e.publicKey,n))}async function U3(r){if(r>C3)throw new _("Key size is too large");let e=await q9(r),t=tn(Qn.encode({Type:je.RSA,Data:D3(e.publicKey)})),n=cr(R3,t);return new Wl(e.privateKey,new Ga(e.publicKey,n))}function H9(r){if(r==null)throw new _("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}async function q9(r,e){let t=await yt.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]);e?.signal?.throwIfAborted();let n=await CP(t,e);return{privateKey:n[0],publicKey:n[1]}}async function V9(r,e,t){let n=await yt.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]);t?.signal?.throwIfAborted();let o=await yt.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},n,e instanceof Uint8Array?e:e.subarray());return t?.signal?.throwIfAborted(),new Uint8Array(o,0,o.byteLength)}async function K9(r,e,t,n){let o=await yt.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);n?.signal?.throwIfAborted();let i=await yt.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},o,e,t instanceof Uint8Array?t:t.subarray());return n?.signal?.throwIfAborted(),i}async function CP(r,e){if(r.privateKey==null||r.publicKey==null)throw new _("Private and public key are required");let t=await Promise.all([yt.get().subtle.exportKey("jwk",r.privateKey),yt.get().subtle.exportKey("jwk",r.publicKey)]);return e?.signal?.throwIfAborted(),t}function z9(r){if(r.kty!=="RSA")throw new _("invalid key type");if(r.n==null)throw new _("invalid key modulus");return C(r.n,"base64url").length*8}var Xf=class{oHash;iHash;blockLen;outputLen;finished=!1;destroyed=!1;constructor(e,t){if(Ao(e),ge(t,void 0,"key"),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 n=this.blockLen,o=new Uint8Array(n);o.set(t.length>n?e.create().update(t).digest():t);for(let i=0;i<o.length;i++)o[i]^=54;this.iHash.update(o),this.oHash=e.create();for(let i=0;i<o.length;i++)o[i]^=106;this.oHash.update(o),Xt(o)}update(e){return Oa(this),this.iHash.update(e),this}digestInto(e){Oa(this),ge(e,this.outputLen,"output"),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||=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}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},bi=(r,e,t)=>new Xf(r,e).update(t).digest();bi.create=(r,e)=>new Xf(r,e);var W9=(r,e)=>(r+(r>=0?e:-e)/G9)/e;function RP(r,e,t){let[[n,o],[i,s]]=e,a=W9(s*r,t),c=W9(-o*r,t),l=r-a*n-c*i,u=-a*o-c*s,d=l<Ro,f=u<Ro;d&&(l=-l),f&&(u=-u);let h=Nl(Math.ceil(t3(t)/2))+ja;if(l<Ro||l>=h||u<Ro||u>=h)throw new Error("splitScalar (endomorphism): failed, k="+r);return{k1neg:d,k1:l,k2neg:f,k2:u}}function $3(r){if(!["compact","recovered","der"].includes(r))throw new Error('Signature format must be "compact", "recovered", or "der"');return r}function F3(r,e){let t={};for(let n of Object.keys(e))t[n]=r[n]===void 0?e[n]:r[n];return ko(t.lowS,"lowS"),ko(t.prehash,"prehash"),t.format!==void 0&&$3(t.format),t}var V3=class extends Error{constructor(e=""){super(e)}},xi={Err:V3,_tlv:{encode:(r,e)=>{let{Err:t}=xi;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=Ll(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let i=n>127?Ll(o.length/2|128):"";return Ll(r)+i+o+e},decode(r,e){let{Err:t}=xi,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}=xi;if(r<Ro)throw new e("integer: negative integers are not allowed");let t=Ll(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}=xi;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 Ba(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=xi,o=ge(r,void 0,"signature"),{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}=xi,n=e.encode(2,t.encode(r.r)),o=e.encode(2,t.encode(r.s)),i=n+o;return e.encode(48,i)}},Ro=BigInt(0),ja=BigInt(1),G9=BigInt(2),Qf=BigInt(3),PP=BigInt(4);function j9(r,e={}){let t=Kf("weierstrass",r,e),{Fp:n,Fn:o}=t,i=t.CURVE,{h:s,n:a}=i;Yn(e,{},{allowInfinityPoint:"boolean",clearCofactor:"function",isTorsionFree:"function",fromBytes:"function",toBytes:"function",endo:"object"});let{endo:c}=e;if(c&&(!n.is0(i.a)||typeof c.beta!="bigint"||!Array.isArray(c.basises)))throw new Error('invalid endo: expected "beta": bigint and "basises": array');let l=X9(n,o);function u(){if(!n.isOdd)throw new Error("compression is not supported: Field does not have .isOdd()")}function d(D,A,E){let{x,y:R}=A.toAffine(),U=n.toBytes(x);if(ko(E,"isCompressed"),E){u();let M=!n.isOdd(R);return wr(Y9(M),U)}else return wr(Uint8Array.of(4),U,n.toBytes(R))}function f(D){ge(D,void 0,"Point");let{publicKey:A,publicKeyUncompressed:E}=l,x=D.length,R=D[0],U=D.subarray(1);if(x===A&&(R===2||R===3)){let M=n.fromBytes(U);if(!n.isValid(M))throw new Error("bad point: is not on curve, wrong x");let P=y(M),H;try{H=n.sqrt(P)}catch(ke){let Ae=ke instanceof Error?": "+ke.message:"";throw new Error("bad point: is not on curve, sqrt error"+Ae)}u();let q=n.isOdd(H);return(R&1)===1!==q&&(H=n.neg(H)),{x:M,y:H}}else if(x===E&&R===4){let M=n.BYTES,P=n.fromBytes(U.subarray(0,M)),H=n.fromBytes(U.subarray(M,M*2));if(!g(P,H))throw new Error("bad point: is not on curve");return{x:P,y:H}}else throw new Error(`bad point: got length ${x}, expected compressed=${A} or uncompressed=${E}`)}let h=e.toBytes||d,p=e.fromBytes||f;function y(D){let A=n.sqr(D),E=n.mul(A,D);return n.add(n.add(E,n.mul(D,i.a)),i.b)}function g(D,A){let E=n.sqr(A),x=y(D);return n.eql(E,x)}if(!g(i.Gx,i.Gy))throw new Error("bad curve params: generator point");let m=n.mul(n.pow(i.a,Qf),PP),b=n.mul(n.sqr(i.b),BigInt(27));if(n.is0(n.add(m,b)))throw new Error("bad curve params: a or b");function v(D,A,E=!1){if(!n.isValid(A)||E&&n.is0(A))throw new Error(`bad point coordinate ${D}`);return A}function L(D){if(!(D instanceof S))throw new Error("Weierstrass Point expected")}function K(D){if(!c||!c.basises)throw new Error("no endo");return RP(D,c.basises,o.ORDER)}let V=Ma((D,A)=>{let{X:E,Y:x,Z:R}=D;if(n.eql(R,n.ONE))return{x:E,y:x};let U=D.is0();A==null&&(A=U?n.ONE:n.inv(R));let M=n.mul(E,A),P=n.mul(x,A),H=n.mul(R,A);if(U)return{x:n.ZERO,y:n.ZERO};if(!n.eql(H,n.ONE))throw new Error("invZ was invalid");return{x:M,y:P}}),Y=Ma(D=>{if(D.is0()){if(e.allowInfinityPoint&&!n.is0(D.Y))return;throw new Error("bad point: ZERO")}let{x:A,y:E}=D.toAffine();if(!n.isValid(A)||!n.isValid(E))throw new Error("bad point: x or y not field elements");if(!g(A,E))throw new Error("bad point: equation left != right");if(!D.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});function T(D,A,E,x,R){return E=new S(n.mul(E.X,D),E.Y,E.Z),A=Bl(x,A),E=Bl(R,E),A.add(E)}class S{static BASE=new S(i.Gx,i.Gy,n.ONE);static ZERO=new S(n.ZERO,n.ONE,n.ZERO);static Fp=n;static Fn=o;X;Y;Z;constructor(A,E,x){this.X=v("x",A),this.Y=v("y",E,!0),this.Z=v("z",x),Object.freeze(this)}static CURVE(){return i}static fromAffine(A){let{x:E,y:x}=A||{};if(!A||!n.isValid(E)||!n.isValid(x))throw new Error("invalid affine point");if(A instanceof S)throw new Error("projective point not allowed");return n.is0(E)&&n.is0(x)?S.ZERO:new S(E,x,n.ONE)}static fromBytes(A){let E=S.fromAffine(p(ge(A,void 0,"point")));return E.assertValidity(),E}static fromHex(A){return S.fromBytes(_o(A))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(A=8,E=!0){return $.createCache(this,A),E||this.multiply(Qf),this}assertValidity(){Y(this)}hasEvenY(){let{y:A}=this.toAffine();if(!n.isOdd)throw new Error("Field doesn't support isOdd");return!n.isOdd(A)}equals(A){L(A);let{X:E,Y:x,Z:R}=this,{X:U,Y:M,Z:P}=A,H=n.eql(n.mul(E,P),n.mul(U,R)),q=n.eql(n.mul(x,P),n.mul(M,R));return H&&q}negate(){return new S(this.X,n.neg(this.Y),this.Z)}double(){let{a:A,b:E}=i,x=n.mul(E,Qf),{X:R,Y:U,Z:M}=this,P=n.ZERO,H=n.ZERO,q=n.ZERO,Q=n.mul(R,R),ke=n.mul(U,U),Ae=n.mul(M,M),xe=n.mul(R,U);return xe=n.add(xe,xe),q=n.mul(R,M),q=n.add(q,q),P=n.mul(A,q),H=n.mul(x,Ae),H=n.add(P,H),P=n.sub(ke,H),H=n.add(ke,H),H=n.mul(P,H),P=n.mul(xe,P),q=n.mul(x,q),Ae=n.mul(A,Ae),xe=n.sub(Q,Ae),xe=n.mul(A,xe),xe=n.add(xe,q),q=n.add(Q,Q),Q=n.add(q,Q),Q=n.add(Q,Ae),Q=n.mul(Q,xe),H=n.add(H,Q),Ae=n.mul(U,M),Ae=n.add(Ae,Ae),Q=n.mul(Ae,xe),P=n.sub(P,Q),q=n.mul(Ae,ke),q=n.add(q,q),q=n.add(q,q),new S(P,H,q)}add(A){L(A);let{X:E,Y:x,Z:R}=this,{X:U,Y:M,Z:P}=A,H=n.ZERO,q=n.ZERO,Q=n.ZERO,ke=i.a,Ae=n.mul(i.b,Qf),xe=n.mul(E,U),Ce=n.mul(x,M),ze=n.mul(R,P),ft=n.add(E,x),Pe=n.add(U,M);ft=n.mul(ft,Pe),Pe=n.add(xe,Ce),ft=n.sub(ft,Pe),Pe=n.add(E,R);let xt=n.add(U,P);return Pe=n.mul(Pe,xt),xt=n.add(xe,ze),Pe=n.sub(Pe,xt),xt=n.add(x,R),H=n.add(M,P),xt=n.mul(xt,H),H=n.add(Ce,ze),xt=n.sub(xt,H),Q=n.mul(ke,Pe),H=n.mul(Ae,ze),Q=n.add(H,Q),H=n.sub(Ce,Q),Q=n.add(Ce,Q),q=n.mul(H,Q),Ce=n.add(xe,xe),Ce=n.add(Ce,xe),ze=n.mul(ke,ze),Pe=n.mul(Ae,Pe),Ce=n.add(Ce,ze),ze=n.sub(xe,ze),ze=n.mul(ke,ze),Pe=n.add(Pe,ze),xe=n.mul(Ce,Pe),q=n.add(q,xe),xe=n.mul(xt,Pe),H=n.mul(ft,H),H=n.sub(H,xe),xe=n.mul(ft,Ce),Q=n.mul(xt,Q),Q=n.add(Q,xe),new S(H,q,Q)}subtract(A){return this.add(A.negate())}is0(){return this.equals(S.ZERO)}multiply(A){let{endo:E}=e;if(!o.isValidNot0(A))throw new Error("invalid scalar: out of range");let x,R,U=M=>$.cached(this,M,P=>As(S,P));if(E){let{k1neg:M,k1:P,k2neg:H,k2:q}=K(A),{p:Q,f:ke}=U(P),{p:Ae,f:xe}=U(q);R=ke.add(xe),x=T(E.beta,Q,Ae,M,H)}else{let{p:M,f:P}=U(A);x=M,R=P}return As(S,[x,R])[0]}multiplyUnsafe(A){let{endo:E}=e,x=this;if(!o.isValid(A))throw new Error("invalid scalar: out of range");if(A===Ro||x.is0())return S.ZERO;if(A===ja)return x;if($.hasCache(this))return this.multiply(A);if(E){let{k1neg:R,k1:U,k2neg:M,k2:P}=K(A),{p1:H,p2:q}=w9(S,x,U,P);return T(E.beta,H,q,R,M)}else return $.unsafe(x,A)}toAffine(A){return V(this,A)}isTorsionFree(){let{isTorsionFree:A}=e;return s===ja?!0:A?A(S,this):$.unsafe(this,a).is0()}clearCofactor(){let{clearCofactor:A}=e;return s===ja?this:A?A(S,this):this.multiplyUnsafe(s)}isSmallOrder(){return this.multiplyUnsafe(s).is0()}toBytes(A=!0){return ko(A,"isCompressed"),this.assertValidity(),h(S,this,A)}toHex(A=!0){return To(this.toBytes(A))}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let B=o.BITS,$=new $a(S,e.endo?Math.ceil(B/2):B);return S.BASE.precompute(8),S}function Y9(r){return Uint8Array.of(r?2:3)}function X9(r,e){return{secretKey:e.BYTES,publicKey:1+r.BYTES,publicKeyUncompressed:1+2*r.BYTES,publicKeyHasPrefix:!0,signature:2*e.BYTES}}function LP(r,e={}){let{Fn:t}=r,n=e.randomBytes||Wn,o=Object.assign(X9(r.Fp,t),{seed:i3(t.ORDER)});function i(h){try{let p=t.fromBytes(h);return t.isValidNot0(p)}catch{return!1}}function s(h,p){let{publicKey:y,publicKeyUncompressed:g}=o;try{let m=h.length;return p===!0&&m!==y||p===!1&&m!==g?!1:!!r.fromBytes(h)}catch{return!1}}function a(h=n(o.seed)){return s3(ge(h,o.seed,"seed"),t.ORDER)}function c(h,p=!0){return r.BASE.multiply(t.fromBytes(h)).toBytes(p)}function l(h){let{secretKey:p,publicKey:y,publicKeyUncompressed:g}=o;if(!gs(h)||"_lengths"in t&&t._lengths||p===y)return;let m=ge(h,void 0,"key").length;return m===y||m===g}function u(h,p,y=!0){if(l(h)===!0)throw new Error("first arg must be private key");if(l(p)===!1)throw new Error("second arg must be public key");let g=t.fromBytes(h);return r.fromBytes(p).multiply(g).toBytes(y)}let d={isValidSecretKey:i,isValidPublicKey:s,randomSecretKey:a},f=Va(a,c);return Object.freeze({getPublicKey:c,getSharedSecret:u,keygen:f,Point:r,utils:d,lengths:o})}function Q9(r,e,t={}){Ao(e),Yn(t,{},{hmac:"function",lowS:"boolean",randomBytes:"function",bits2int:"function",bits2int_modN:"function"}),t=Object.assign({},t);let n=t.randomBytes||Wn,o=t.hmac||((E,x)=>bi(e,E,x)),{Fp:i,Fn:s}=r,{ORDER:a,BITS:c}=s,{keygen:l,getPublicKey:u,getSharedSecret:d,utils:f,lengths:h}=LP(r,t),p={prehash:!0,lowS:typeof t.lowS=="boolean"?t.lowS:!0,format:"compact",extraEntropy:!1},y=a*G9<i.ORDER;function g(E){let x=a>>ja;return E>x}function m(E,x){if(!s.isValidNot0(x))throw new Error(`invalid signature ${E}: out of range 1..Point.Fn.ORDER`);return x}function b(){if(y)throw new Error('"recovered" sig type is not supported for cofactor >2 curves')}function v(E,x){$3(x);let R=h.signature,U=x==="compact"?R:x==="recovered"?R+1:void 0;return ge(E,U)}class L{r;s;recovery;constructor(x,R,U){if(this.r=m("r",x),this.s=m("s",R),U!=null){if(b(),![0,1,2,3].includes(U))throw new Error("invalid recovery id");this.recovery=U}Object.freeze(this)}static fromBytes(x,R=p.format){v(x,R);let U;if(R==="der"){let{r:q,s:Q}=xi.toSig(ge(x));return new L(q,Q)}R==="recovered"&&(U=x[0],R="compact",x=x.subarray(1));let M=h.signature/2,P=x.subarray(0,M),H=x.subarray(M,M*2);return new L(s.fromBytes(P),s.fromBytes(H),U)}static fromHex(x,R){return this.fromBytes(_o(x),R)}assertRecovery(){let{recovery:x}=this;if(x==null)throw new Error("invalid recovery id: must be present");return x}addRecoveryBit(x){return new L(this.r,this.s,x)}recoverPublicKey(x){let{r:R,s:U}=this,M=this.assertRecovery(),P=M===2||M===3?R+a:R;if(!i.isValid(P))throw new Error("invalid recovery id: sig.r+curve.n != R.x");let H=i.toBytes(P),q=r.fromBytes(wr(Y9((M&1)===0),H)),Q=s.inv(P),ke=V(ge(x,void 0,"msgHash")),Ae=s.create(-ke*Q),xe=s.create(U*Q),Ce=r.BASE.multiplyUnsafe(Ae).add(q.multiplyUnsafe(xe));if(Ce.is0())throw new Error("invalid recovery: point at infinify");return Ce.assertValidity(),Ce}hasHighS(){return g(this.s)}toBytes(x=p.format){if($3(x),x==="der")return _o(xi.hexFromSig(this));let{r:R,s:U}=this,M=s.toBytes(R),P=s.toBytes(U);return x==="recovered"?(b(),wr(Uint8Array.of(this.assertRecovery()),M,P)):wr(M,P)}toHex(x){return To(this.toBytes(x))}}let K=t.bits2int||function(x){if(x.length>8192)throw new Error("input is too large");let R=Ba(x),U=x.length*8-c;return U>0?R>>BigInt(U):R},V=t.bits2int_modN||function(x){return s.create(K(x))},Y=Nl(c);function T(E){return gi("num < 2^"+c,E,Ro,Y),s.toBytes(E)}function S(E,x){return ge(E,void 0,"message"),x?ge(e(E),void 0,"prehashed message"):E}function B(E,x,R){let{lowS:U,prehash:M,extraEntropy:P}=F3(R,p);E=S(E,M);let H=V(E),q=s.fromBytes(x);if(!s.isValidNot0(q))throw new Error("invalid private key");let Q=[T(q),T(H)];if(P!=null&&P!==!1){let Ce=P===!0?n(h.secretKey):P;Q.push(ge(Ce,void 0,"extraEntropy"))}let ke=wr(...Q),Ae=H;function xe(Ce){let ze=K(Ce);if(!s.isValidNot0(ze))return;let ft=s.inv(ze),Pe=r.BASE.multiply(ze).toAffine(),xt=s.create(Pe.x);if(xt===Ro)return;let Ea=s.create(ft*s.create(Ae+xt*q));if(Ea===Ro)return;let hf=(Pe.x===xt?0:2)|Number(Pe.y&ja),ul=Ea;return U&&g(Ea)&&(ul=s.neg(Ea),hf^=1),new L(xt,ul,y?void 0:hf)}return{seed:ke,k2sig:xe}}function $(E,x,R={}){let{seed:U,k2sig:M}=B(E,x,R);return t9(e.outputLen,s.BYTES,o)(U,M).toBytes(R.format)}function D(E,x,R,U={}){let{lowS:M,prehash:P,format:H}=F3(U,p);if(R=ge(R,void 0,"publicKey"),x=S(x,P),!gs(E)){let q=E instanceof L?", use sig.toBytes()":"";throw new Error("verify expects Uint8Array signature"+q)}v(E,H);try{let q=L.fromBytes(E,H),Q=r.fromBytes(R);if(M&&q.hasHighS())return!1;let{r:ke,s:Ae}=q,xe=V(x),Ce=s.inv(Ae),ze=s.create(xe*Ce),ft=s.create(ke*Ce),Pe=r.BASE.multiplyUnsafe(ze).add(Q.multiplyUnsafe(ft));return Pe.is0()?!1:s.create(Pe.x)===ke}catch{return!1}}function A(E,x,R={}){let{prehash:U}=F3(R,p);return x=S(x,U),L.fromBytes(E,"recovered").recoverPublicKey(x).toBytes()}return Object.freeze({keygen:l,getPublicKey:u,getSharedSecret:d,utils:f,lengths:h,Point:r,sign:$,verify:D,recoverPublicKey:A,Signature:L,hash:e})}var H3={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt(1),a:BigInt(0),b:BigInt(7),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")},DP={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),basises:[[BigInt("0x3086d221a7d46bcde86c90e49284eb15"),-BigInt("0xe4437ed6010e88286f547fa90abfe4c3")],[BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),BigInt("0x3086d221a7d46bcde86c90e49284eb15")]]};var Z9=BigInt(2);function NP(r){let e=H3.p,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=Je(u,t,e)*u%e,f=Je(d,t,e)*u%e,h=Je(f,Z9,e)*l%e,p=Je(h,o,e)*h%e,y=Je(p,i,e)*p%e,g=Je(y,a,e)*y%e,m=Je(g,c,e)*g%e,b=Je(m,a,e)*y%e,v=Je(b,t,e)*u%e,L=Je(v,s,e)*p%e,K=Je(L,n,e)*l%e,V=Je(K,Z9,e);if(!K3.eql(K3.sqr(V),r))throw new Error("Cannot find square root");return V}var K3=Ua(H3.p,{sqrt:NP}),OP=j9(H3,{Fp:K3,endo:DP}),vn=Q9(OP,tn);var J9=32;function ew(r,e,t){let n=st.digest(e instanceof Uint8Array?e:e.subarray());if(qa(n))return n.then(({digest:o})=>(t?.signal?.throwIfAborted(),vn.sign(o,r,{prehash:!1,format:"der"}))).catch(o=>{throw o.name==="AbortError"?o:new Al(String(o))});try{return vn.sign(n.digest,r,{prehash:!1,format:"der"})}catch(o){throw new Al(String(o))}}function tw(r,e,t,n){let o=st.digest(t instanceof Uint8Array?t:t.subarray());if(qa(o))return o.then(({digest:i})=>(n?.signal?.throwIfAborted(),vn.verify(e,i,r,{prehash:!1,format:"der"}))).catch(i=>{throw i.name==="AbortError"?i:new Tl(String(i))});try{return n?.signal?.throwIfAborted(),vn.verify(e,o.digest,r,{prehash:!1,format:"der"})}catch(i){throw new Tl(String(i))}}var jl=class{type="secp256k1";raw;_key;constructor(e){this._key=ow(e),this.raw=rw(this._key)}toMultihash(){return gt.digest(It(this))}toCID(){return Z.createV1(114,this.toMultihash())}toString(){return Ge.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:se(this.raw,e.raw)}verify(e,t,n){return tw(this._key,t,e,n)}},Yl=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=nw(e),this.publicKey=new jl(t??iw(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:se(this.raw,e.raw)}sign(e,t){return ew(this.raw,e,t)}};function q3(r){return new Yl(r)}function z3(r){return new jl(r)}async function sw(){let r=BP();return new Yl(r)}function rw(r){return vn.Point.fromBytes(r).toBytes()}function nw(r){try{return vn.getPublicKey(r,!0),r}catch(e){throw new dl(String(e))}}function ow(r){try{return vn.Point.fromBytes(r),r}catch(e){throw new xo(String(e))}}function iw(r){try{return vn.getPublicKey(r,!0)}catch(e){throw new dl(String(e))}}function BP(){return vn.utils.randomSecretKey()}async function Zf(r,e){if(r==="Ed25519")return P9();if(r==="secp256k1")return sw();if(r==="RSA")return U3(MP(e));if(r==="ECDSA")return U7(UP(e));throw new yn}function pt(r,e){let{Type:t,Data:n}=Qn.decode(r),o=n??new Uint8Array;switch(t){case je.RSA:return O3(o,e);case je.Ed25519:return h3(o);case je.secp256k1:return z3(o);case je.ECDSA:return qg(o);default:throw new yn}}function Jf(r){let{Type:e,Data:t}=Qn.decode(r.digest),n=t??new Uint8Array;switch(e){case je.Ed25519:return h3(n);case je.secp256k1:return z3(n);case je.ECDSA:return qg(n);default:throw new yn}}function It(r){return Qn.encode({Type:je[r.type],Data:r.raw})}function aw(r){let e=zl.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case je.RSA:return N3(t);case je.Ed25519:return f3(t);case je.secp256k1:return q3(t);case je.ECDSA:return D7(t);default:throw new yn}}function cw(r){if(r.byteLength===Cr)return f3(r);if(r.byteLength===J9)return q3(r);let e=en(r),t=e[2]?.[0];if(t===A7||t===T7||t===_7)return Hg(e);if(e.length>8)return Yf(e);throw new _("Could not extract private key from raw bytes")}function Cs(r){return zl.encode({Type:je[r.type],Data:r.raw})}function MP(r){return r==null?2048:parseInt(r,10)}function UP(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 _("Unsupported curve, should be P-256, P-384 or P-521")}var Xl=Uint32Array.from([1732584193,4023233417,2562383102,271733878,3285377520]),Ei=new Uint32Array(80),W3=class extends ws{A=Xl[0]|0;B=Xl[1]|0;C=Xl[2]|0;D=Xl[3]|0;E=Xl[4]|0;constructor(){super(64,20,8,!1)}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)Ei[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)Ei[c]=Bf(Ei[c-3]^Ei[c-8]^Ei[c-14]^Ei[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=Mf(o,i,s),u=1518500249):c<40?(l=o^i^s,u=1859775393):c<60?(l=Uf(o,i,s),u=2400959708):(l=o^i^s,u=3395469782);let d=Bf(n,5)+l+a+u+Ei[c]|0;a=s,s=i,i=Bf(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(){Xt(Ei)}destroy(){this.set(0,0,0,0,0),Xt(this.buffer)}},lw=Cl(()=>new W3);function uw(r,e,t,n){Ao(r);let o=H7({dkLen:32,asyncTick:10},n),{c:i,dkLen:s,asyncTick:a}=o;if(Yt(i,"c"),Yt(s,"dkLen"),Yt(a,"asyncTick"),i<1)throw new Error("iterations (c) must be >= 1");let c=zg(e,"password"),l=zg(t,"salt"),u=new Uint8Array(s),d=bi.create(r,c),f=d._cloneInto().update(l);return{c:i,dkLen:s,asyncTick:a,DK:u,PRF:d,PRFSalt:f}}function dw(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),Xt(o),t}function fw(r,e,t,n){let{c:o,dkLen:i,DK:s,PRF:a,PRFSalt:c}=uw(r,e,t,n),l,u=new Uint8Array(4),d=ys(u),f=new Uint8Array(a.outputLen);for(let h=1,p=0;p<i;h++,p+=a.outputLen){let y=s.subarray(p,p+a.outputLen);d.setInt32(0,h,!1),(l=c._cloneInto(l)).update(u).digestInto(f),y.set(f.subarray(0,y.length));for(let g=1;g<o;g++){a._cloneInto(l).update(f).digestInto(f);for(let m=0;m<y.length;m++)y[m]^=f[m]}}return dw(a,c,s,l,f)}async function eh(r,e,t,n){let{c:o,dkLen:i,asyncTick:s,DK:a,PRF:c,PRFSalt:l}=uw(r,e,t,n),u,d=new Uint8Array(4),f=ys(d),h=new Uint8Array(c.outputLen);for(let p=1,y=0;y<i;p++,y+=c.outputLen){let g=a.subarray(y,y+c.outputLen);f.setInt32(0,p,!1),(u=l._cloneInto(u)).update(d).digestInto(h),g.set(h.subarray(0,g.length)),await K7(o-1,s,()=>{c._cloneInto(u).update(h).digestInto(h);for(let m=0;m<g.length;m++)g[m]^=h[m]})}return dw(c,l,a,u,h)}var hw={sha1:lw,"sha2-256":tn,"sha2-512":mi};function Ql(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(hw).join(" / ");throw new _(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let i=hw[o],s=fw(i,r,e,{c:t,dkLen:n});return mt.encode(s).substring(1)}var G3={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},pw={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},mw=new globalThis.TextEncoder;function FP(r,e){let t=G3[e],n=pw[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function $P(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=G3[e],o=pw[e],i=r;for(;i.length>0;){let s=mw.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 j3(r,{size:e=32,utf8Buffer:t}={}){if(!G3[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 $P(r,e,t);r=mw.encode(r)}return FP(r,e)}var Zl={hash:r=>Number(j3(r,{size:32})),hashV:(r,e)=>VP(Zl.hash(r,e))};function VP(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),C(e,"base16")}var Y3=64,Sn=class{fp;h;seed;constructor(e,t,n,o=2){if(o>Y3)throw new TypeError("Invalid Fingerprint Size");let i=t.hashV(e,n),s=de(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?se(this.fp,e.fp):!1}};function Rs(r,e){return Math.floor(Math.random()*(e-r))+r}var Ps=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof Sn))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof Sn))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 Sn))throw new TypeError("Invalid Fingerprint");let t=Rs(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof Sn))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var KP=500,Jl=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??Zl,this.seed=e.seed??Rs(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=C(e));let t=new Sn(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 Ps(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new Ps(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let i=[n,o],s=i[Rs(0,i.length-1)];this.buckets[s]==null&&(this.buckets[s]=new Ps(this.bucketSize));for(let a=0;a<KP;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 Ps(this.bucketSize)),this.buckets[s].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=C(e));let t=new Sn(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=C(e));let t=new Sn(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}},HP={1:.5,2:.84,4:.95,8:.98};function qP(r=.001){return r>.002?2:r>1e-5?4:8}function gw(r,e=.001){let t=qP(e),n=HP[t],o=Math.round(r/n),i=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),Y3);return{filterSize:o,bucketSize:t,fingerprintSize:i}}var th=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??Zl,this.seed=e.seed??Rs(0,Math.pow(2,10)),this.filterSeries=[new Jl({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=C(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 Jl({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=C(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=C(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 Ut(r,e=.001,t){return new th({...gw(r,e),...t??{}})}function ce(r){let e=r.getComponents(),t={},n=0;if(e[n]?.name==="ip6zone"&&(t.zone=`${e[n].value}`,n++),e[n].name==="ip4"||e[n].name==="ip6"||e[n].name==="dns"||e[n].name==="dns4"||e[n].name==="dns6"?(t.type=e[n].name,t.host=e[n].value,n++):e[n].name==="dnsaddr"&&(t.type=e[n].name,t.host=`_dnsaddr.${e[n].value}`,n++),(e[n]?.name==="tcp"||e[n]?.name==="udp")&&(t.protocol=e[n].name==="tcp"?"tcp":"udp",t.port=parseInt(`${e[n].value}`),n++),e[n]?.name==="ipcidr"&&(t.type==="ip4"?t.cidr=parseInt(`${e[n].value}`):t.type==="ip6"&&(t.cidr=`${e[n].value}`),n++),t.type==null||t.host==null)throw new _(`Multiaddr ${r} was not an IPv4, IPv6, DNS, DNS4, DNS6 or DNSADDR address`);return e[n]?.name==="tls"&&e[n+1]?.name==="sni"&&(t.sni=e[n+1].value,n+=2),t}var rh=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 yw=45,zP=15,Ya=new rh;function nh(r){if(!(r.length>zP))return Ya.new(r).parseWith(()=>Ya.readIPv4Addr())}function oh(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>yw))return Ya.new(r).parseWith(()=>Ya.readIPv6Addr())}function Xa(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>yw)return;let t=Ya.new(r).parseWith(()=>Ya.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 ww(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 bw(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 X3(r){switch(r.length){case Ls:return r.join(".");case Ds:{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 xw(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 Ew(r){let e="0x";for(let t of r)e+=(t>>4).toString(16)+(t&15).toString(16);return e}var Ls=4,Ds=16,rj=parseInt("0xFFFF",16),WP=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function eu(r,e){e.length===Ds&&r.length===Ls&&ww(e,0,11)&&(e=e.slice(12)),e.length===Ls&&r.length===Ds&&bw(r,WP,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 vw(r,e){if(typeof e=="string"&&(e=Xa(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 Q3(r){let[e,t]=r.split("/");if(!e||!t)throw new Error("Failed to parse given CIDR: "+r);let n=Ls,o=nh(e);if(o==null&&(n=Ds,o=oh(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=Z3(i,8*n);return{network:eu(o,s),mask:s}}function Z3(r,e){if(e!==8*Ls&&e!==8*Ds)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 Ns=class{constructor(e,t){if(t==null)({network:this.network,mask:this.mask}=Q3(e));else{let n=Xa(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=Xa(t);if(i==null)throw new Error("Failed to parse mask");this.mask=i}else this.mask=Z3(o,8*n.length);this.network=eu(n,this.mask)}}contains(e){return vw({network:this.network,mask:this.mask},e)}toString(){let e=xw(this.mask),t=e!==-1?String(e):Ew(this.mask);return X3(this.network)+"/"+t}};function Sw(r,e){return new Ns(r).contains(e)}function ih(r){try{let e=ce(r);switch(e.type){case"ip6":return Sw("2000::/3",e.host);default:return!1}}catch{return!1}}function Aw(r){try{let e=ce(r);switch(e.type){case"ip4":return e.host.startsWith("169.254.");case"ip6":return e.host.toLowerCase().startsWith("fe80");default:return!1}}catch{return!1}}function Tw(r){return/^127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(r)||/^::1$/.test(r)}function tu(r){try{let e=ce(r);switch(e.type){case"ip4":case"ip6":return Tw(e.host);default:return!1}}catch{return!1}}function Ft(r){try{return ce(r),!0}catch{return!1}}function An(r){return!!nh(r)}function sh(r){return!!oh(r)}var Cw=wo(kw(),1),eL=["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"],tL=eL.map(r=>new Cw.Netmask(r));function i4(r){for(let e of tL)if(e.contains(r))return!0;return!1}function rL(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function nL(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 i4(o)}function oL(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function iL(r){let e=r.split(":"),t=e[e.length-1];return i4(t)}function sL(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 ec(r){if(An(r))return i4(r);if(rL(r))return nL(r);if(oL(r))return iL(r);if(sh(r))return sL(r)}function ut(r){try{let e=ce(r);switch(e.type){case"ip4":case"ip6":return ec(e.host)??!1;default:return e.host==="localhost"}}catch{return!1}}function Se(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var ch=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}},tc=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new ch(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 ch(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 s4=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function $t(r={}){return aL(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 aL(r,e){e=e??{};let t=e.onEnd,n=new tc,o,i,s,a=Se(),c=async()=>{try{return n.isEmpty()?s?{done:!0}:await new Promise((g,m)=>{i=b=>{i=null,n.push(b);try{g(r(n))}catch(v){m(v)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=Se()})}},l=g=>i!=null?i(g):(n.push(g),o),u=g=>(n=new tc,i!=null?i({error:g}):(n.push({error:g}),o)),d=g=>{if(s)return o;if(e?.objectMode!==!0&&g?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:g})},f=g=>s?o:(s=!0,g!=null?u(g):l({done:!0})),h=()=>(n=new tc,f(),{done:!0}),p=g=>(f(g),{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 g=>{let m=g?.signal;if(m?.throwIfAborted(),n.isEmpty())return;let b,v;m!=null&&(b=new Promise((L,K)=>{v=()=>{K(new s4)},m.addEventListener("abort",v)}));try{await Promise.race([a.promise,b])}finally{v!=null&&m!=null&&m?.removeEventListener("abort",v)}}},t==null)return o;let y=o;return o={[Symbol.asyncIterator](){return this},next(){return y.next()},throw(g){return y.throw(g),t!=null&&(t(g),t=void 0),{done:!0}},return(){return y.return(),t!=null&&(t(),t=void 0),{done:!0}},push:d,end(g){return y.end(g),t!=null&&(t(g),t=void 0),o},get readableLength(){return y.readableLength},onEmpty:g=>y.onEmpty(g)},o}var cL=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 lL(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!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}=cL(r),d=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(y){n(),s(y);return}c.push(p),t.count===c.length&&(n(),i(c))},f=(...h)=>{n(),s(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)u(h,d);for(let h of t.rejectionEvents)a.includes(h)||u(h,f)};for(let h of a)l(h,d);for(let h of t.rejectionEvents)a.includes(h)||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=yl(o,{milliseconds:t.timeout});return i.cancel=()=>{n(),i.clear()},i}return o}function Le(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=lL(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}function Po(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 lh=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}},uh=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}},Bs=class extends Error{static name="UnexpectedEOFError";name="UnexpectedEOFError"},dh=class extends Error{static name="MaxEarlyStreamsError";name="MaxEarlyStreamsError"},fh=class extends Error{static name="StreamClosedError";name="StreamClosedError"};function uL(r){return r.reason}async function qe(r,e,t){if(e==null)return r;let n=t?.translateError??uL;if(e.aborted)return r.catch(()=>{}),Promise.reject(n(e));let o;try{return await Promise.race([r,new Promise((i,s)=>{o=()=>{s(n(e))},e.addEventListener("abort",o)})])}finally{o!=null&&e.removeEventListener("abort",o)}}var hh=class{deferred;signal;constructor(e){this.signal=e,this.deferred=Se(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new sr)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function dL(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var ph=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=dL(),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 sr),this.cleanup())}async join(e={}){let t=new hh(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 qe(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 ue{concurrency;maxSize;queue;pending;sort;paused;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,this.paused=!1,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=[],this.emitEmpty=Po(this.emitEmpty.bind(this),1),this.emitIdle=Po(this.emitIdle.bind(this),1)}emitEmpty(){this.size===0&&this.safeDispatchEvent("empty")}emitIdle(){this.running===0&&this.safeDispatchEvent("idle")}pause(){this.paused=!0}resume(){this.paused&&(this.paused=!1,this.tryToStartAnother())}tryToStartAnother(){if(this.paused)return!1;if(this.size===0)return this.emitEmpty(),this.running===0&&this.emitIdle(),!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 uh;let n=new ph(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("failure",{detail:{job:n,error:o}}),o})}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new sr)}),this.clear()}async onEmpty(e){this.size!==0&&await Le(this,"empty",e)}async onSizeLessThan(e,t){this.size<e||await Le(this,"next",{...t,filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await Le(this,"idle",e)}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=$t({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.error)},s=()=>{n()},a=()=>{n(new sr("Queue aborted"))};this.addEventListener("completed",o),this.addEventListener("failure",i),this.addEventListener("idle",s),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("failure",i),this.removeEventListener("idle",s),e?.signal?.removeEventListener("abort",a),n()}}};var fL=Math.pow(2,20)*4,vi=class extends ue{status;timeline;inactivityTimeout;maxReadBufferLength;maxWriteBufferLength;log;direction;maxMessageSize;readStatus;writeStatus;remoteReadStatus;remoteWriteStatus;writableNeedsDrain;readBuffer;writeBuffer;sendingData;onDrainPromise;constructor(e){super(),this.status="open",this.log=e.log,this.direction=e.direction??"outbound",this.inactivityTimeout=e.inactivityTimeout??12e4,this.maxReadBufferLength=e.maxReadBufferLength??fL,this.maxWriteBufferLength=e.maxWriteBufferLength,this.maxMessageSize=e.maxMessageSize,this.readBuffer=new ne,this.writeBuffer=new ne,this.readStatus="readable",this.remoteReadStatus="readable",this.writeStatus="writable",this.remoteWriteStatus="writable",this.sendingData=!1,this.writableNeedsDrain=!1,this.timeline={open:Date.now()},this.processSendQueue=this.processSendQueue.bind(this);let t=()=>{this.writableNeedsDrain&&(this.log.trace("drain event received, continue sending data"),this.writableNeedsDrain=!1,this.processSendQueue()),this.onDrainPromise?.resolve()};this.addEventListener("drain",t);let n=o=>{this.onDrainPromise?.reject(o.error??new fh)};this.addEventListener("close",n)}get readBufferLength(){return this.readBuffer.byteLength}get writeBufferLength(){return this.writeBuffer.byteLength}async onDrain(e){return this.writableNeedsDrain!==!0?Promise.resolve():(this.onDrainPromise==null&&(this.onDrainPromise=Promise.withResolvers()),qe(this.onDrainPromise.promise,e?.signal))}async*[Symbol.asyncIterator](){if(this.readStatus!=="readable"&&this.readStatus!=="paused")return;let e=$t(),t=i=>{e.push(i.data)};this.addEventListener("message",t);let n=i=>{e.end(i.error)};this.addEventListener("close",n);let o=()=>{e.end()};this.addEventListener("remoteCloseWrite",o);try{yield*e}finally{this.removeEventListener("message",t),this.removeEventListener("close",n),this.removeEventListener("remoteCloseWrite",o)}}isReadable(){return this.status==="open"}send(e){if(this.writeStatus==="closed"||this.writeStatus==="closing")throw new Hn(`Cannot write to a stream that is ${this.writeStatus}`);return this.log.trace("append %d bytes to write buffer",e.byteLength),this.writeBuffer.append(e),this.processSendQueue()}abort(e){if(!(this.status==="aborted"||this.status==="reset"||this.status==="closed")){this.log.error("abort with error - %e",e),this.status="aborted",this.readBuffer.byteLength>0&&this.readBuffer.consume(this.readBuffer.byteLength),this.writeBuffer.byteLength>0&&(this.writeBuffer.consume(this.writeBuffer.byteLength),this.safeDispatchEvent("idle")),this.writeStatus="closed",this.remoteWriteStatus="closed",this.readStatus="closed",this.remoteReadStatus="closed",this.timeline.close=Date.now();try{this.sendReset(e)}catch(t){this.log("failed to send reset to remote - %e",t)}this.dispatchEvent(new xf(e))}}pause(){if(this.readStatus==="closed"||this.readStatus==="closing")throw new Hn("Cannot pause a stream that is closing/closed");this.readStatus!=="paused"&&(this.readStatus="paused",this.sendPause())}resume(){if(this.readStatus==="closed"||this.readStatus==="closing")throw new Hn("Cannot resume a stream that is closing/closed");this.readStatus!=="readable"&&(this.readStatus="readable",this.dispatchReadBuffer(),this.sendResume())}push(e){if(this.readStatus==="closed"||this.readStatus==="closing")throw new Hn(`Cannot push data onto a stream that is ${this.readStatus}`);if(e.byteLength!==0){if(this.readBuffer.append(e),this.readStatus==="paused"||this.listenerCount("message")===0){this.checkReadBufferLength();return}setTimeout(()=>{this.dispatchReadBuffer()},0)}}unshift(e){if(this.readStatus==="closed"||this.readStatus==="closing")throw new Hn(`Cannot push data onto a stream that is ${this.readStatus}`);if(e.byteLength!==0){if(this.readBuffer.prepend(e),this.readStatus==="paused"||this.listenerCount("message")===0){this.checkReadBufferLength();return}setTimeout(()=>{this.dispatchReadBuffer()},0)}}onData(e){if(e.byteLength!==0){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("ignoring data - read status %s",this.readStatus);return}this.readBuffer.append(e),this.dispatchReadBuffer()}}addEventListener(...e){super.addEventListener.apply(this,e),e[0]==="message"&&this.readBuffer.byteLength>0&&queueMicrotask(()=>{this.dispatchReadBuffer()})}onRemoteReset(){this.log("remote reset"),this.status="reset",this.writeStatus="closed",this.remoteWriteStatus="closed",this.remoteReadStatus="closed",this.timeline.close=Date.now(),this.readBuffer.byteLength===0&&(this.readStatus="closed");let e=new Sa;this.dispatchEvent(new Ef(e))}onTransportClosed(e){this.log("transport closed"),this.readStatus==="readable"&&this.readBuffer.byteLength===0&&(this.log("close readable end after transport closed and read buffer is empty"),this.readStatus="closed"),this.remoteReadStatus!=="closed"&&(this.remoteReadStatus="closed"),this.remoteWriteStatus!=="closed"&&(this.remoteWriteStatus="closed"),this.writeStatus!=="closed"&&(this.writeStatus="closed"),e!=null?this.abort(e):(this.status==="open"||this.status==="closing")&&(this.timeline.close=Date.now(),this.status="closed",this.writeStatus="closed",this.remoteWriteStatus="closed",this.remoteReadStatus="closed",this.dispatchEvent(new li))}onRemoteCloseWrite(){this.remoteWriteStatus!=="closed"&&(this.log.trace("on remote close write"),this.remoteWriteStatus="closed",this.safeDispatchEvent("remoteCloseWrite"),this.writeStatus==="closed"&&this.onTransportClosed())}onRemoteCloseRead(){this.log.trace("on remote close read"),this.remoteReadStatus="closed",this.writeBuffer.byteLength>0&&(this.writeBuffer.consume(this.writeBuffer.byteLength),this.safeDispatchEvent("idle"))}processSendQueue(){if(this.writableNeedsDrain)return this.log.trace("not processing send queue as drain is required"),this.checkWriteBufferLength(),!1;if(this.writeBuffer.byteLength===0)return this.log.trace("not processing send queue as no bytes to send"),!0;if(this.sendingData)return this.log.trace("not processing send queue as already sending data"),!0;this.sendingData=!0,this.log.trace("processing send queue with %d queued bytes",this.writeBuffer.byteLength);try{let e=!0,t=this.writeBuffer.byteLength,n=0;for(;this.writeBuffer.byteLength>0;){let o=Math.min(this.maxMessageSize??this.writeBuffer.byteLength,this.writeBuffer.byteLength);if(o===0){e=!1;break}let i=this.writeBuffer.sublist(0,o),s=new ne(i);this.writeBuffer.consume(i.byteLength);let a=this.sendData(i);if(e=a.canSendMore,n+=a.sentBytes,a.sentBytes!==s.byteLength&&(s.consume(a.sentBytes),this.writeBuffer.prepend(s)),!e)break}return e||(this.log.trace("sent %d/%d bytes, pausing sending because underlying stream is full, %d bytes left in the write buffer",n,t,this.writeBuffer.byteLength),this.writableNeedsDrain=!0,this.checkWriteBufferLength()),this.writeBuffer.byteLength===0&&this.safeDispatchEvent("idle"),e}finally{this.sendingData=!1}}dispatchReadBuffer(){try{if(this.listenerCount("message")===0){this.log.trace("not dispatching pause buffer as there are no listeners for the message event");return}if(this.readBuffer.byteLength===0){this.log.trace("not dispatching pause buffer as there is no data to dispatch");return}if(this.readStatus==="paused"){this.log.trace("not dispatching pause buffer we are paused");return}if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("dropping %d bytes because the readable end is %s",this.readBuffer.byteLength,this.readStatus),this.readBuffer.consume(this.readBuffer.byteLength);return}let e=this.readBuffer.sublist();this.readBuffer.consume(e.byteLength),this.dispatchEvent(new bf(e))}finally{this.readBuffer.byteLength===0&&this.remoteWriteStatus==="closed"&&(this.log("close readable end after dispatching read buffer and remote writable end is closed"),this.readStatus="closed"),this.checkReadBufferLength()}}checkReadBufferLength(){this.readBuffer.byteLength>this.maxReadBufferLength&&this.abort(new hl(`Read buffer length of ${this.readBuffer.byteLength} exceeded limit of ${this.maxReadBufferLength}, read status is ${this.readStatus}`))}checkWriteBufferLength(){this.maxWriteBufferLength!=null&&this.writeBuffer.byteLength>this.maxWriteBufferLength&&this.abort(new hl(`Write buffer length of ${this.writeBuffer.byteLength} exceeded limit of ${this.maxWriteBufferLength}, write status is ${this.writeStatus}`))}onMuxerNeedsDrain(){this.writableNeedsDrain=!0}onMuxerDrain(){this.safeDispatchEvent("drain")}};var Si=class extends vi{remoteAddr;metricPrefix;metrics;constructor(e){super(e),this.metricPrefix=e.metricPrefix??"",this.metrics=e.metrics,this.remoteAddr=e.remoteAddr,this.addEventListener("close",t=>{this.metrics?.increment({[`${this.metricPrefix}end`]:!0}),t.error!=null?t.local?this.metrics?.increment({[`${this.metricPrefix}abort`]:!0}):this.metrics?.increment({[`${this.metricPrefix}reset`]:!0}):t.local?this.metrics?.increment({[`${this.metricPrefix}_local_close`]:!0}):this.metrics?.increment({[`${this.metricPrefix}_remote_close`]:!0})})}async close(e){this.status==="open"&&(this.status="closing",this.writeStatus="closing",this.remoteWriteStatus="closing",this.remoteReadStatus="closing",(this.sendingData||this.writeBuffer.byteLength>0)&&(this.log("waiting for write queue to become idle before closing writable end of stream, %d unsent bytes",this.writeBuffer.byteLength),await Le(this,"idle",{...e,rejectionEvents:["close"]})),this.writableNeedsDrain&&(this.log("waiting for write queue to drain before closing writable end of stream, %d unsent bytes",this.writeBuffer.byteLength),await Le(this,"drain",{...e,rejectionEvents:["close"]})),await this.sendClose(e),this.onTransportClosed())}};function mh(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Ai=class extends ue{streams;protocol;status;log;maConn;streamOptions;earlyStreams;maxEarlyStreams;metrics;constructor(e,t){super(),this.maConn=e,this.protocol=t.protocol,this.streams=[],this.earlyStreams=[],this.status="open",this.log=e.log.newScope(t.name),this.streamOptions=t.streamOptions,this.maxEarlyStreams=t.maxEarlyStreams??10,this.metrics=t.metrics;let n=s=>{try{this.onData(s.data)}catch(a){this.abort(a),this.maConn.abort(a)}};this.maConn.addEventListener("message",n);let o=()=>{this.log("underlying stream drained, signal %d streams to continue writing",this.streams.length),this.streams.forEach(s=>{s.onMuxerDrain()})};this.maConn.addEventListener("drain",o);let i=()=>{this.log("underlying stream closed with status %s and %d streams",this.status,this.streams.length),this.onTransportClosed()};this.maConn.addEventListener("close",i)}send(e){let t=this.maConn.send(e);return t===!1&&(this.log("underlying stream saturated, signal %d streams to pause writing",this.streams.length),this.streams.forEach(n=>{n.onMuxerNeedsDrain()})),t}async close(e){this.status==="closed"||this.status==="closing"||(this.status="closing",await qe(Promise.all([...this.streams].map(async t=>{await t.close(e)})),e?.signal),this.status="closed")}abort(e){this.status!=="closed"&&(this.status="closing",[...this.streams].forEach(t=>{t.abort(e)}),this.status="closed")}onTransportClosed(e){this.status="closing";try{[...this.streams].forEach(t=>{t.onTransportClosed(e)})}catch(t){this.abort(t)}this.status="closed"}async createStream(e){if(this.status!=="open")throw new mn;let t=this.onCreateStream({...this.streamOptions,...e});return mh(t)&&(t=await t),this.streams.push(t),this.cleanUpStream(t),t}onRemoteStream(e){if(this.streams.push(e),this.cleanUpStream(e),this.listenerCount("stream")===0){this.earlyStreams.push(e),this.earlyStreams.length>this.maxEarlyStreams&&this.abort(new dh(`Too many early streams were opened - ${this.earlyStreams.length}/${this.maxEarlyStreams}`));return}this.safeDispatchEvent("stream",{detail:e})}cleanUpStream(e){let t=n=>{let o=this.streams.findIndex(i=>i===e);o!==-1&&this.streams.splice(o,1),n.error!=null?n.local?this.metrics?.increment({[`${e.direction}_stream_reset`]:!0}):this.metrics?.increment({[`${e.direction}_stream_abort`]:!0}):this.metrics?.increment({[`${e.direction}_stream_end`]:!0})};e.addEventListener("close",t),this.metrics?.increment({[`${e.direction}_stream`]:!0})}addEventListener(...e){super.addEventListener.apply(this,e),e[0]==="stream"&&this.earlyStreams.length>0&&queueMicrotask(()=>{this.earlyStreams.forEach(t=>{this.safeDispatchEvent("stream",{detail:t})}),this.earlyStreams=[]})}};var Ti=class extends vi{id;protocol;constructor(e){super(e),this.id=e.id,this.protocol=e.protocol??""}async close(e){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.writeStatus="closing",(this.sendingData||this.writeBuffer.byteLength>0)&&(this.log("waiting for write queue to become idle before closing writable end of stream, %d unsent bytes",this.writeBuffer.byteLength),await Le(this,"idle",{...e,rejectionEvents:["close"]})),this.writableNeedsDrain&&(this.log("waiting for write queue to drain before closing writable end of stream, %d unsent bytes, sending %s",this.writeBuffer.byteLength,this.sendingData),await Le(this,"drain",{...e,rejectionEvents:["close"]}),this.log("write queue drained, closing writable end of stream, %d unsent bytes, sending %s",this.writeBuffer.byteLength,this.sendingData)),await this.sendCloseWrite(e),this.writeStatus="closed",this.log("closed writable end gracefully"),this.remoteWriteStatus==="closed"&&this.onTransportClosed())}async closeRead(e){this.readStatus==="closing"||this.readStatus==="closed"||(this.readBuffer.byteLength>0&&this.readBuffer.consume(this.readBuffer.byteLength),this.readStatus="closing",await this.sendCloseRead(e),this.readStatus="closed",this.log("closed readable end gracefully"))}};function we(r){let e=new globalThis.AbortController;function t(){let i=r.filter(s=>s?.aborted===!0).map(s=>s?.reason).pop();e.abort(i);for(let s of r)s?.removeEventListener!=null&&s.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}var rc=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 hL=1.2,pL=2,mL=5e3,gL=6e4,yL=5e3,Tn=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;maxTimeout;constructor(e={}){let t=e.interval??yL;this.success=new rc(t),this.failure=new rc(t),this.next=new rc(t),this.failureMultiplier=e.failureMultiplier??pL,this.timeoutMultiplier=e.timeoutMultiplier??hL,this.minTimeout=e.minTimeout??mL,this.maxTimeout=e.maxTimeout??gL,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier));t<this.minTimeout&&(t=this.minTimeout),t>this.maxTimeout&&(t=this.maxTimeout);let n=AbortSignal.timeout(t),o=we([e.signal,n]);return o.start=Date.now(),o.timeout=t,o}cleanUp(e){e.clear();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 Kt=class extends Error{static name="InvalidMultiaddrError";name="InvalidMultiaddrError"},Lo=class extends Error{static name="ValidationError";name="ValidationError"},gh=class extends Error{static name="InvalidParametersError";name="InvalidParametersError"},yh=class extends Error{static name="UnknownProtocolError";name="UnknownProtocolError"};function c4(r){return e=>N(e,r)}function l4(r){return e=>C(e,r)}function nc(r){return new DataView(r.buffer).getUint16(r.byteOffset).toString()}function Ms(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,typeof r=="string"?parseInt(r):r),new Uint8Array(e)}function Rw(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=C(e[0],"base32"),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=Ms(n);return Ye([t,o],t.length+o.length)}function Pw(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=_t.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=Ms(n);return Ye([t,o],t.length+o.length)}function u4(r){let e=r.subarray(0,r.length-2),t=r.subarray(r.length-2),n=N(e,"base32"),o=nc(t);return`${n}:${o}`}var d4=function(r){r=r.toString().trim();let e=new Uint8Array(4);return r.split(/\./g).forEach((t,n)=>{let o=parseInt(t,10);if(isNaN(o)||o<0||o>255)throw new Kt("Invalid byte value in IP address");e[n]=o}),e},Lw=function(r){let e=0;r=r.toString().trim();let t=r.split(":",8),n;for(n=0;n<t.length;n++){let i=An(t[n]),s;i&&(s=d4(t[n]),t[n]=N(s.subarray(0,2),"base16")),s!=null&&++n<8&&t.splice(n,0,N(s.subarray(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++){t[n]===""&&(t[n]="0");let i=parseInt(t[n],16);if(isNaN(i)||i<0||i>65535)throw new Kt("Invalid byte value in IP address");o[e++]=i>>8&255,o[e++]=i&255}return o},Dw=function(r){if(r.byteLength!==4)throw new Kt("IPv4 address was incorrect length");let e=[];for(let t=0;t<r.byteLength;t++)e.push(r[t]);return e.join(".")},Nw=function(r){if(r.byteLength!==16)throw new Kt("IPv6 address was incorrect length");let e=[];for(let n=0;n<r.byteLength;n+=2){let o=r[n],i=r[n+1],s=`${o.toString(16).padStart(2,"0")}${i.toString(16).padStart(2,"0")}`;e.push(s)}let t=e.join(":");try{let n=new URL(`http://[${t}]`);return n.hostname.substring(1,n.hostname.length-1)}catch{throw new Kt(`Invalid IPv6 address "${t}"`)}};function Ow(r){try{let e=new URL(`http://[${r}]`);return e.hostname.substring(1,e.hostname.length-1)}catch{throw new Kt(`Invalid IPv6 address "${r}"`)}}var a4=Object.values(hs).map(r=>r.decoder),wL=(function(){let r=a4[0].or(a4[1]);return a4.slice(2).forEach(e=>r=r.or(e)),r})();function Bw(r){return wL.decode(r)}function Mw(r){return e=>r.encoder.encode(e)}function bL(r){if(parseInt(r).toString()!==r)throw new Lo("Value must be an integer")}function xL(r){if(r<0)throw new Lo("Value must be a positive integer, or zero")}function EL(r){return e=>{if(e>r)throw new Lo(`Value must be smaller than or equal to ${r}`)}}function vL(...r){return e=>{for(let t of r)t(e)}}var ru=vL(bL,xL,EL(65535));var Rt=-1,f4=class{protocolsByCode=new Map;protocolsByName=new Map;getProtocol(e){let t;if(typeof e=="string"?t=this.protocolsByName.get(e):t=this.protocolsByCode.get(e),t==null)throw new yh(`Protocol ${e} was unknown`);return t}addProtocol(e){this.protocolsByCode.set(e.code,e),this.protocolsByName.set(e.name,e),e.aliases?.forEach(t=>{this.protocolsByName.set(t,e)})}removeProtocol(e){let t=this.protocolsByCode.get(e);t!=null&&(this.protocolsByCode.delete(t.code),this.protocolsByName.delete(t.name),t.aliases?.forEach(n=>{this.protocolsByName.delete(n)}))}},Oo=new f4,ML=[{code:4,name:"ip4",size:32,valueToBytes:d4,bytesToValue:Dw,validate:r=>{if(!An(r))throw new Lo(`Invalid IPv4 address "${r}"`)}},{code:6,name:"tcp",size:16,valueToBytes:Ms,bytesToValue:nc,validate:ru},{code:273,name:"udp",size:16,valueToBytes:Ms,bytesToValue:nc,validate:ru},{code:33,name:"dccp",size:16,valueToBytes:Ms,bytesToValue:nc,validate:ru},{code:41,name:"ip6",size:128,valueToBytes:Lw,bytesToValue:Nw,stringToValue:Ow,validate:r=>{if(!sh(r))throw new Lo(`Invalid IPv6 address "${r}"`)}},{code:42,name:"ip6zone",size:Rt},{code:43,name:"ipcidr",size:8,bytesToValue:c4("base10"),valueToBytes:l4("base10")},{code:53,name:"dns",size:Rt},{code:54,name:"dns4",size:Rt},{code:55,name:"dns6",size:Rt},{code:56,name:"dnsaddr",size:Rt},{code:132,name:"sctp",size:16,valueToBytes:Ms,bytesToValue:nc,validate:ru},{code:301,name:"udt"},{code:302,name:"utp"},{code:400,name:"unix",size:Rt,stringToValue:r=>decodeURIComponent(r),valueToString:r=>encodeURIComponent(r)},{code:421,name:"p2p",aliases:["ipfs"],size:Rt,bytesToValue:c4("base58btc"),valueToBytes:r=>r.startsWith("Q")||r.startsWith("1")?l4("base58btc")(r):Z.parse(r).multihash.bytes},{code:444,name:"onion",size:96,bytesToValue:u4,valueToBytes:Rw},{code:445,name:"onion3",size:296,bytesToValue:u4,valueToBytes:Pw},{code:446,name:"garlic64",size:Rt},{code:447,name:"garlic32",size:Rt},{code:448,name:"tls"},{code:449,name:"sni",size:Rt},{code:454,name:"noise"},{code:460,name:"quic"},{code:461,name:"quic-v1"},{code:465,name:"webtransport"},{code:466,name:"certhash",size:Rt,bytesToValue:Mw(bl),valueToBytes:Bw},{code:480,name:"http"},{code:481,name:"http-path",size:Rt,stringToValue:r=>`/${decodeURIComponent(r)}`,valueToString:r=>encodeURIComponent(r.substring(1))},{code:443,name:"https"},{code:477,name:"ws"},{code:478,name:"wss"},{code:479,name:"p2p-websocket-star"},{code:277,name:"p2p-stardust"},{code:275,name:"p2p-webrtc-star"},{code:276,name:"p2p-webrtc-direct"},{code:280,name:"webrtc-direct"},{code:281,name:"webrtc"},{code:290,name:"p2p-circuit"},{code:777,name:"memory",size:Rt}];ML.forEach(r=>{Oo.addProtocol(r)});function Uw(r){let e=[],t=0;for(;t<r.length;){let n=Rr(r,t),o=Oo.getProtocol(n),i=ye(n),s=UL(o,r,t+i),a=0;s>0&&o.size===Rt&&(a=ye(s));let c=i+a+s,l={code:n,name:o.name,bytes:r.subarray(t,t+c)};if(s>0){let u=t+i+a,d=r.subarray(u,u+s);l.value=o.bytesToValue?.(d)??N(d)}e.push(l),t+=c}return e}function Fw(r){let e=0,t=[];for(let n of r){if(n.bytes==null){let o=Oo.getProtocol(n.code),i=ye(n.code),s,a=0,c=0;n.value!=null&&(s=o.valueToBytes?.(n.value)??C(n.value),a=s.byteLength,o.size===Rt&&(c=ye(a)));let l=new Uint8Array(i+c+a),u=0;Xn(n.code,l,u),u+=i,s!=null&&(o.size===Rt&&(Xn(a,l,u),u+=c),l.set(s,u)),n.bytes=l}t.push(n.bytes),e+=n.bytes.byteLength}return Ye(t,e)}function $w(r){if(r.charAt(0)!=="/")throw new Kt('String multiaddr must start with "/"');let e=[],t="protocol",n="",o="";for(let i=1;i<r.length;i++){let s=r.charAt(i);s!=="/"&&(t==="protocol"?o+=r.charAt(i):n+=r.charAt(i));let a=i===r.length-1;if(s==="/"||a){let c=Oo.getProtocol(o);if(t==="protocol"){if(c.size==null||c.size===0){e.push({code:c.code,name:c.name}),n="",o="",t="protocol";continue}else if(a)throw new Kt(`Component ${o} was missing value`);t="value"}else if(t==="value"){let l={code:c.code,name:c.name};if(c.size!=null&&c.size!==0){if(n==="")throw new Kt(`Component ${o} was missing value`);l.value=c.stringToValue?.(n)??n}e.push(l),n="",o="",t="protocol"}}}if(o!==""&&n!=="")throw new Kt("Incomplete multiaddr");return e}function Vw(r){return`/${r.flatMap(e=>{if(e.value==null)return e.name;let t=Oo.getProtocol(e.code);if(t==null)throw new Kt(`Unknown protocol code ${e.code}`);return[e.name,t.valueToString?.(e.value)??e.value]}).join("/")}`}function UL(r,e,t){return r.size==null||r.size===0?0:r.size>0?r.size/8:Rr(e,t)}var FL=Symbol.for("nodejs.util.inspect.custom"),E4=Symbol.for("@multiformats/multiaddr");function $L(r){if(r==null&&(r="/"),eo(r))return r.getComponents();if(r instanceof Uint8Array)return Uw(r);if(typeof r=="string")return r=r.replace(/\/(\/)+/,"/").replace(/(\/)+$/,""),r===""&&(r="/"),$w(r);if(Array.isArray(r))return r;throw new Kt("Must be a string, Uint8Array, Component[], or another Multiaddr")}var Eh=class r{[E4]=!0;#e;#t;#r;constructor(e="/",t={}){this.#e=$L(e),t.validate!==!1&&VL(this)}get bytes(){return this.#r==null&&(this.#r=Fw(this.#e)),this.#r}toString(){return this.#t==null&&(this.#t=Vw(this.#e)),this.#t}toJSON(){return this.toString()}getComponents(){return[...this.#e.map(e=>({...e}))]}encapsulate(e){let t=new r(e);return new r([...this.#e,...t.getComponents()],{validate:!1})}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new gh(`Address ${this.toString()} does not contain subaddress: ${t}`);return new r(n.slice(0,o),{validate:!1})}decapsulateCode(e){let t;for(let n=this.#e.length-1;n>-1;n--)if(this.#e[n].code===e){t=n;break}return new r(this.#e.slice(0,t),{validate:!1})}equals(e){return se(this.bytes,e.bytes)}[FL](){return`Multiaddr(${this.toString()})`}};function VL(r){r.getComponents().forEach(e=>{let t=Oo.getProtocol(e.code);e.value!=null&&t.validate?.(e.value)})}function eo(r){return!!r?.[E4]}function X(r){return new Eh(r)}var v4=class{readNext;haveNext;ended;nextResult;error;constructor(){this.ended=!1,this.readNext=Se(),this.haveNext=Se()}[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=Se(),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=Se(),await qe(this.readNext.promise,t?.signal,t)}};function Kw(){return new v4}function KL(r){return r[Symbol.asyncIterator]!=null}async function HL(r,e,t){try{await Promise.all(r.map(async n=>{for await(let o of n)await e.push(o,{signal:t}),t.throwIfAborted()})),await e.end(void 0,{signal:t})}catch(n){await e.end(n,{signal:t}).catch(()=>{})}}async function*qL(r){let e=new AbortController,t=Kw();HL(r,t,e.signal).catch(()=>{});try{yield*t}finally{e.abort()}}function*zL(r){for(let e of r)yield*e}function WL(...r){let e=[];for(let t of r)KL(t)||e.push(t);return e.length===r.length?zL(e):qL(r)}var fr=WL;function ac(r,...e){if(r==null)throw new Error("Empty pipeline");if(S4(r)){let n=r;r=()=>n.source}else if(qw(r)||Hw(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&S4(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++)S4(t[n])&&(t[n]=jL(t[n]));return GL(...t)}var GL=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},Hw=r=>r?.[Symbol.asyncIterator]!=null,qw=r=>r?.[Symbol.iterator]!=null,S4=r=>r==null?!1:r.sink!=null&&r.source!=null,jL=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=$t({objectMode:!0});t.then(()=>{n.end()},s=>{n.end(s)});let o,i=r.source;if(Hw(i))o=async function*(){yield*i,n.end()};else if(qw(i))o=function*(){yield*i,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return fr(n,o())}return r.source};var YL=4194304,vh=class extends Error{static name="UnwrappedError";name="UnwrappedError"},cu=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},T4=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},_4=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function XL(r){return typeof r?.closeRead=="function"}function QL(r){return typeof r?.close=="function"}function A4(r){return XL(r)?r.remoteWriteStatus!=="writable"&&r.readBufferLength===0:QL(r)?r.status!=="open":!1}function ZL(r){return r?.addEventListener!=null&&r?.removeEventListener!=null&&r?.send!=null&&r?.push!=null&&r?.log!=null}function Sh(r,e){let t=e?.maxBufferSize??YL,n=new ne,o,i=!1;if(!ZL(r))throw new _("Argument should be a Stream or a Multiaddr");let s=u=>{if(n.append(u.data),n.byteLength>t){let d=n.byteLength;n.consume(n.byteLength),o?.reject(new Error(`Read buffer overflow - ${d} > ${t}`))}o?.resolve()};r.addEventListener("message",s);let a=u=>{u.error!=null?o?.reject(u.error):o?.resolve()};r.addEventListener("close",a);let c=()=>{o?.resolve()};r.addEventListener("remoteCloseWrite",c);let l={readBuffer:n,async read(u){if(i===!0)throw new vh("Stream was unwrapped");if(A4(r)){if(n.byteLength===0&&u?.bytes==null)return null;if(u?.bytes!=null&&n.byteLength<u.bytes)throw r.log.error("closed after reading %d/%d bytes",n.byteLength,u.bytes),new Bs(`Unexpected EOF - stream closed after reading ${n.byteLength}/${u.bytes} bytes`)}let d=u?.bytes??1;for(o=Promise.withResolvers();;){if(n.byteLength>=d){o.resolve();break}if(await qe(o.promise,u?.signal),A4(r)){if(n.byteLength===0&&u?.bytes==null)return null;break}o=Promise.withResolvers()}let f=u?.bytes??n.byteLength;if(n.byteLength<f){if(A4(r))throw r.log.error("closed while reading %d/%d bytes",n.byteLength,f),new Bs(`Unexpected EOF - stream closed while reading ${n.byteLength}/${f} bytes`);return l.read(u)}let h=n.sublist(0,f);return n.consume(f),h},async write(u,d){if(i===!0)throw new vh("Stream was unwrapped");r.send(u)||await Le(r,"drain",{signal:d?.signal,rejectionEvents:["close"]})},unwrap(){return i||(i=!0,r.removeEventListener("message",s),r.removeEventListener("close",a),r.removeEventListener("remoteCloseWrite",c),n.byteLength>0&&(r.log("stream unwrapped with %d unread bytes",n.byteLength),r.push(n))),r}};return l}function Ii(r,e={}){let t=Sh(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=ye(e.maxDataLength));let n=e?.lengthDecoder??Rr,o=e?.lengthEncoder??Zt;return{async read(s){let a=-1,c=new ne;for(;;){let u=await t.read({...s,bytes:1});if(u==null)break;c.append(u);try{a=n(c)}catch(d){if(d instanceof RangeError)continue;throw d}if(a<0)throw new cu("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new _4(`Message length length too long - ${c.byteLength} > ${e.maxLengthLength}`);if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new T4(`Message length too long - ${a} > ${e.maxDataLength}`);let l=await t.read({...s,bytes:a});if(l==null)throw r.log.error("tried to read %d bytes but the stream closed",a),new Bs(`Unexpected EOF - tried to read ${a} bytes but the stream closed`);if(l.byteLength!==a)throw r.log.error("read %d/%d bytes before the stream closed",l.byteLength,a),new Bs(`Unexpected EOF - read ${l.byteLength}/${a} bytes before the stream closed`);return l},async write(s,a){await t.write(new ne(o(s.byteLength),s),a)},async writeV(s,a){let c=new ne(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap(){return t.unwrap()}}}function Qe(r,e){let t=Ii(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 JL=1024*1024*4,eD=1024*1024*4,Ah=class{buffer;maxBufferSize;lengthDecoder;maxDataLength;encodingLength;constructor(e={}){this.buffer=new ne,this.maxBufferSize=e.maxBufferSize??JL,this.maxDataLength=e.maxDataLength??eD,this.lengthDecoder=e.lengthDecoder??Rr,this.encodingLength=e.encodingLength??ye}*decode(e){if(this.buffer.append(e),this.buffer.byteLength>this.maxBufferSize)throw new _(`Buffer length limit exceeded - ${this.buffer.byteLength}/${this.maxBufferSize}`);for(;;){let t;try{t=this.lengthDecoder(this.buffer)}catch(i){if(i instanceof RangeError)break;throw i}if(t<0||t>this.maxDataLength)throw new cu("Invalid message length");let n=this.encodingLength(t),o=n+t;if(this.buffer.byteLength>=o){let i=this.buffer.sublist(n,o);this.buffer.consume(o),i.byteLength>0&&(yield i)}else break}}};var tD=["Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function I4(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(e==="string"||e==="number"||e==="bigint"||e==="symbol")return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(r instanceof Uint8Array)return"Uint8Array";if(r.constructor===Object)return"Object";let t=rD(r);return t||"Object"}function rD(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(tD.includes(e))return e}var k=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}static equals(e,t){return e===t||e.major===t.major&&e.name===t.name}};k.uint=new k(0,"uint",!0);k.negint=new k(1,"negint",!0);k.bytes=new k(2,"bytes",!0);k.string=new k(3,"string",!0);k.array=new k(4,"array",!1);k.map=new k(5,"map",!1);k.tag=new k(6,"tag",!1);k.float=new k(7,"float",!0);k.false=new k(7,"false",!0);k.true=new k(7,"true",!0);k.null=new k(7,"null",!0);k.undefined=new k(7,"undefined",!0);k.break=new k(7,"break",!0);var ee=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 lu=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",nD=new TextEncoder;function Th(r){return lu&&globalThis.Buffer.isBuffer(r)}function uu(r){return r instanceof Uint8Array?Th(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var oD=24,iD=200,_h=lu?r=>r.length>=oD?globalThis.Buffer.from(r):zw(r):r=>r.length>=iD?nD.encode(r):zw(r),to=r=>Uint8Array.from(r),Ww=lu?(r,e,t)=>Th(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),Gw=lu?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),uu(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},jw=lu?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function Ih(r,e){if(Th(r)&&Th(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 zw(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):(o>=55296&&o<=57343&&(o=65533),e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}var sD=256,du=class{constructor(e=sD){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=jw(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=Ww(n,0,this.cursor)}else t=Gw(this.chunks,this.cursor);return e&&this.reset(),t}},kh=class{constructor(e){this.dest=e,this.cursor=0,this.chunks=[e]}reset(){this.cursor=0}push(e){if(this.cursor+e.length>this.dest.length)throw new Error("write out of bounds, destination buffer is too small");this.dest.set(e,this.cursor),this.cursor+=e.length}toBytes(e=!1){let t=this.dest.subarray(0,this.cursor);return e&&this.reset(),t}};var be="CBOR decode error:",Ch="CBOR encode error:",fu=[];fu[23]=1;fu[24]=2;fu[25]=3;fu[26]=5;fu[27]=9;function Bo(r,e,t){if(r.length-e<t)throw new Error(`${be} not enough data for type`)}var Pt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function Lr(r,e,t){Bo(r,e,1);let n=r[e];if(t.strict===!0&&n<Pt[0])throw new Error(`${be} integer encoded in more bytes than necessary (strict decode)`);return n}function Dr(r,e,t){Bo(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<Pt[1])throw new Error(`${be} integer encoded in more bytes than necessary (strict decode)`);return n}function Nr(r,e,t){Bo(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(`${be} integer encoded in more bytes than necessary (strict decode)`);return n}function Or(r,e,t){Bo(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(`${be} 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(`${be} integers outside of the safe integer range are not supported`)}function Yw(r,e,t,n){return new ee(k.uint,Lr(r,e+1,n),2)}function Xw(r,e,t,n){return new ee(k.uint,Dr(r,e+1,n),3)}function Qw(r,e,t,n){return new ee(k.uint,Nr(r,e+1,n),5)}function Zw(r,e,t,n){return new ee(k.uint,Or(r,e+1,n),9)}function rn(r,e){return et(r,0,e.value)}function et(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(`${be} encountered BigInt larger than allowable range`)}}rn.encodedSize=function(e){return et.encodedSize(e.value)};et.encodedSize=function(e){return e<Pt[0]?1:e<Pt[1]?2:e<Pt[2]?3:e<Pt[3]?5:9};rn.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function Jw(r,e,t,n){return new ee(k.negint,-1-Lr(r,e+1,n),2)}function eb(r,e,t,n){return new ee(k.negint,-1-Dr(r,e+1,n),3)}function tb(r,e,t,n){return new ee(k.negint,-1-Nr(r,e+1,n),5)}var k4=BigInt(-1),rb=BigInt(1);function nb(r,e,t,n){let o=Or(r,e+1,n);if(typeof o!="bigint"){let i=-1-o;if(i>=Number.MIN_SAFE_INTEGER)return new ee(k.negint,i,9)}if(n.allowBigInt!==!0)throw new Error(`${be} integers outside of the safe integer range are not supported`);return new ee(k.negint,k4-BigInt(o),9)}function Rh(r,e){let t=e.value,n=typeof t=="bigint"?t*k4-rb:t*-1-1;et(r,e.type.majorEncoded,n)}Rh.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*k4-rb:t*-1-1;return n<Pt[0]?1:n<Pt[1]?2:n<Pt[2]?3:n<Pt[3]?5:9};Rh.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function hu(r,e,t,n){Bo(r,e,t+n);let o=r.slice(e+t,e+t+n);return new ee(k.bytes,o,t+n)}function ob(r,e,t,n){return hu(r,e,1,t)}function ib(r,e,t,n){return hu(r,e,2,Lr(r,e+1,n))}function sb(r,e,t,n){return hu(r,e,3,Dr(r,e+1,n))}function ab(r,e,t,n){return hu(r,e,5,Nr(r,e+1,n))}function cb(r,e,t,n){let o=Or(r,e+1,n);if(typeof o=="bigint")throw new Error(`${be} 64-bit integer bytes lengths not supported`);return hu(r,e,9,o)}function Ph(r){return r.encodedBytes===void 0&&(r.encodedBytes=k.equals(r.type,k.string)?_h(r.value):r.value),r.encodedBytes}function cc(r,e){let t=Ph(e);et(r,e.type.majorEncoded,t.length),r.push(t)}cc.encodedSize=function(e){let t=Ph(e);return et.encodedSize(t.length)+t.length};cc.compareTokens=function(e,t){return cD(Ph(e),Ph(t))};function cD(r,e){return r.length<e.length?-1:r.length>e.length?1:Ih(r,e)}var lb=new TextDecoder,uD=32;function dD(r,e,t){if(t-e<uD){let o="";for(let i=e;i<t;i++){let s=r[i];if(s&128)return lb.decode(r.subarray(e,t));o+=String.fromCharCode(s)}return o}return lb.decode(r.subarray(e,t))}function pu(r,e,t,n,o){let i=t+n;Bo(r,e,i);let s=new ee(k.string,dD(r,e+t,e+i),i);return o.retainStringBytes===!0&&(s.byteValue=r.slice(e+t,e+i)),s}function ub(r,e,t,n){return pu(r,e,1,t,n)}function db(r,e,t,n){return pu(r,e,2,Lr(r,e+1,n),n)}function fb(r,e,t,n){return pu(r,e,3,Dr(r,e+1,n),n)}function hb(r,e,t,n){return pu(r,e,5,Nr(r,e+1,n),n)}function pb(r,e,t,n){let o=Or(r,e+1,n);if(typeof o=="bigint")throw new Error(`${be} 64-bit integer string lengths not supported`);return pu(r,e,9,o,n)}var mb=cc;function lc(r,e,t,n){return new ee(k.array,n,t)}function gb(r,e,t,n){return lc(r,e,1,t)}function yb(r,e,t,n){return lc(r,e,2,Lr(r,e+1,n))}function wb(r,e,t,n){return lc(r,e,3,Dr(r,e+1,n))}function bb(r,e,t,n){return lc(r,e,5,Nr(r,e+1,n))}function xb(r,e,t,n){let o=Or(r,e+1,n);if(typeof o=="bigint")throw new Error(`${be} 64-bit integer array lengths not supported`);return lc(r,e,9,o)}function Eb(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${be} indefinite length items not allowed`);return lc(r,e,1,1/0)}function Lh(r,e){et(r,k.array.majorEncoded,e.value)}Lh.compareTokens=rn.compareTokens;Lh.encodedSize=function(e){return et.encodedSize(e.value)};function uc(r,e,t,n){return new ee(k.map,n,t)}function vb(r,e,t,n){return uc(r,e,1,t)}function Sb(r,e,t,n){return uc(r,e,2,Lr(r,e+1,n))}function Ab(r,e,t,n){return uc(r,e,3,Dr(r,e+1,n))}function Tb(r,e,t,n){return uc(r,e,5,Nr(r,e+1,n))}function _b(r,e,t,n){let o=Or(r,e+1,n);if(typeof o=="bigint")throw new Error(`${be} 64-bit integer map lengths not supported`);return uc(r,e,9,o)}function Ib(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${be} indefinite length items not allowed`);return uc(r,e,1,1/0)}function Dh(r,e){et(r,k.map.majorEncoded,e.value)}Dh.compareTokens=rn.compareTokens;Dh.encodedSize=function(e){return et.encodedSize(e.value)};function kb(r,e,t,n){return new ee(k.tag,t,1)}function Cb(r,e,t,n){return new ee(k.tag,Lr(r,e+1,n),2)}function Rb(r,e,t,n){return new ee(k.tag,Dr(r,e+1,n),3)}function Pb(r,e,t,n){return new ee(k.tag,Nr(r,e+1,n),5)}function Lb(r,e,t,n){return new ee(k.tag,Or(r,e+1,n),9)}function Nh(r,e){et(r,k.tag.majorEncoded,e.value)}Nh.compareTokens=rn.compareTokens;Nh.encodedSize=function(e){return et.encodedSize(e.value)};var C4=20,R4=21,P4=22,L4=23;function Db(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${be} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new ee(k.null,null,1):new ee(k.undefined,void 0,1)}function Nb(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${be} indefinite length items not allowed`);return new ee(k.break,void 0,1)}function D4(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${be} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${be} Infinity values are not supported`)}return new ee(k.float,r,e)}function Ob(r,e,t,n){return D4(N4(r,e+1),3,n)}function Bb(r,e,t,n){return D4(O4(r,e+1),5,n)}function Mb(r,e,t,n){return D4(Vb(r,e+1),9,n)}function mu(r,e,t){let n=e.value;if(n===!1)r.push([k.float.majorEncoded|C4]);else if(n===!0)r.push([k.float.majorEncoded|R4]);else if(n===null)r.push([k.float.majorEncoded|P4]);else if(n===void 0)r.push([k.float.majorEncoded|L4]);else{let o,i=!1;(!t||t.float64!==!0)&&(Fb(n),o=N4(In,1),n===o||Number.isNaN(n)?(In[0]=249,r.push(In.slice(0,3)),i=!0):($b(n),o=O4(In,1),n===o&&(In[0]=250,r.push(In.slice(0,5)),i=!0))),i||(gD(n),o=Vb(In,1),In[0]=251,r.push(In.slice(0,9)))}}mu.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){Fb(n);let o=N4(In,1);if(n===o||Number.isNaN(n))return 3;if($b(n),o=O4(In,1),n===o)return 5}return 9};var Ub=new ArrayBuffer(9),nn=new DataView(Ub,1),In=new Uint8Array(Ub,0);function Fb(r){if(r===1/0)nn.setUint16(0,31744,!1);else if(r===-1/0)nn.setUint16(0,64512,!1);else if(Number.isNaN(r))nn.setUint16(0,32256,!1);else{nn.setFloat32(0,r);let e=nn.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)nn.setUint16(0,31744,!1);else if(t===0)nn.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?nn.setUint16(0,0):o<-14?nn.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):nn.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function N4(r,e){if(r.length-e<2)throw new Error(`${be} 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 $b(r){nn.setFloat32(0,r,!1)}function O4(r,e){if(r.length-e<4)throw new Error(`${be} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function gD(r){nn.setFloat64(0,r,!1)}function Vb(r,e){if(r.length-e<8)throw new Error(`${be} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}mu.compareTokens=rn.compareTokens;function De(r,e,t){throw new Error(`${be} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function Oh(r){return()=>{throw new Error(`${be} ${r}`)}}var z=[];for(let r=0;r<=23;r++)z[r]=De;z[24]=Yw;z[25]=Xw;z[26]=Qw;z[27]=Zw;z[28]=De;z[29]=De;z[30]=De;z[31]=De;for(let r=32;r<=55;r++)z[r]=De;z[56]=Jw;z[57]=eb;z[58]=tb;z[59]=nb;z[60]=De;z[61]=De;z[62]=De;z[63]=De;for(let r=64;r<=87;r++)z[r]=ob;z[88]=ib;z[89]=sb;z[90]=ab;z[91]=cb;z[92]=De;z[93]=De;z[94]=De;z[95]=Oh("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)z[r]=ub;z[120]=db;z[121]=fb;z[122]=hb;z[123]=pb;z[124]=De;z[125]=De;z[126]=De;z[127]=Oh("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)z[r]=gb;z[152]=yb;z[153]=wb;z[154]=bb;z[155]=xb;z[156]=De;z[157]=De;z[158]=De;z[159]=Eb;for(let r=160;r<=183;r++)z[r]=vb;z[184]=Sb;z[185]=Ab;z[186]=Tb;z[187]=_b;z[188]=De;z[189]=De;z[190]=De;z[191]=Ib;for(let r=192;r<=215;r++)z[r]=kb;z[216]=Cb;z[217]=Rb;z[218]=Pb;z[219]=Lb;z[220]=De;z[221]=De;z[222]=De;z[223]=De;for(let r=224;r<=243;r++)z[r]=Oh("simple values are not supported");z[244]=De;z[245]=De;z[246]=De;z[247]=Db;z[248]=Oh("simple values are not supported");z[249]=Ob;z[250]=Bb;z[251]=Mb;z[252]=De;z[253]=De;z[254]=De;z[255]=Nb;var kn=[];for(let r=0;r<24;r++)kn[r]=new ee(k.uint,r,1);for(let r=-1;r>=-24;r--)kn[31-r]=new ee(k.negint,r,1);kn[64]=new ee(k.bytes,new Uint8Array(0),1);kn[96]=new ee(k.string,"",1);kn[128]=new ee(k.array,0,1);kn[160]=new ee(k.map,0,1);kn[244]=new ee(k.false,!1,1);kn[245]=new ee(k.true,!0,1);kn[246]=new ee(k.null,null,1);function B4(r){switch(r.type){case k.false:return to([244]);case k.true:return to([245]);case k.null:return to([246]);case k.bytes:return r.value.length?void 0:to([64]);case k.string:return r.value===""?to([96]):void 0;case k.array:return r.value===0?to([128]):void 0;case k.map:return r.value===0?to([160]):void 0;case k.uint:return r.value<24?to([Number(r.value)]):void 0;case k.negint:if(r.value>=-24)return to([31-Number(r.value)])}}var wD={float64:!1,mapSorter:ED,quickEncodeToken:B4},Wb=Object.freeze({float64:!0,mapSorter:vD,quickEncodeToken:B4});function bD(){let r=[];return r[k.uint.major]=rn,r[k.negint.major]=Rh,r[k.bytes.major]=cc,r[k.string.major]=mb,r[k.array.major]=Lh,r[k.map.major]=Dh,r[k.tag.major]=Nh,r[k.float.major]=mu,r}var dc=bD(),Bh=new du,yu=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(`${Ch} object contains circular references`);return new r(t,e)}},ki={null:new ee(k.null,null),undefined:new ee(k.undefined,void 0),true:new ee(k.true,!0),false:new ee(k.false,!1),emptyArray:new ee(k.array,0),emptyMap:new ee(k.map,0)},ro={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new ee(k.float,r):r>=0?new ee(k.uint,r):new ee(k.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new ee(k.uint,r):new ee(k.negint,r)},Uint8Array(r,e,t,n){return new ee(k.bytes,r)},string(r,e,t,n){return new ee(k.string,r)},boolean(r,e,t,n){return r?ki.true:ki.false},null(r,e,t,n){return ki.null},undefined(r,e,t,n){return ki.undefined},ArrayBuffer(r,e,t,n){return new ee(k.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new ee(k.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[ki.emptyArray,new ee(k.break)]:ki.emptyArray;n=yu.createCheck(n,r);let o=[],i=0;for(let s of r)o[i++]=Mh(s,t,n);return t.addBreakTokens?[new ee(k.array,r.length),o,new ee(k.break)]:[new ee(k.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,a;if(s){a=new Array(s),n=yu.createCheck(n,r);let c=!o&&t.ignoreUndefinedProperties,l=0;for(let u of i){let d=o?r.get(u):r[u];c&&d===void 0||(a[l++]=[Mh(u,t,n),Mh(d,t,n)])}l<s&&(a.length=l)}return a?.length?(xD(a,t),t.addBreakTokens?[new ee(k.map,a.length),a,new ee(k.break)]:[new ee(k.map,a.length),a]):t.addBreakTokens===!0?[ki.emptyMap,new ee(k.break)]:ki.emptyMap}};ro.Map=ro.Object;ro.Buffer=ro.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))ro[`${r}Array`]=ro.DataView;function Mh(r,e={},t){let n=I4(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||ro[n];if(typeof o=="function"){let s=o(r,n,e,t);if(s!=null)return s}let i=ro[n];if(!i)throw new Error(`${Ch} unsupported type: ${n}`);return i(r,n,e,t)}function xD(r,e){e.mapSorter&&r.sort(e.mapSorter)}function ED(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=dc[o].compareTokens(t,n);return i===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),i}function vD(r,e){if(r[0]instanceof ee&&e[0]instanceof ee){let t=r[0],n=e[0];return t._keyBytes||(t._keyBytes=Kb(t.value)),n._keyBytes||(n._keyBytes=Kb(n.value)),Ih(t._keyBytes,n._keyBytes)}throw new Error("rfc8949MapSorter: complex key types are not supported yet")}function Kb(r){return jb(r,dc,Wb)}function gu(r,e,t,n){if(Array.isArray(e))for(let o of e)gu(r,o,t,n);else t[e.type.major](r,e,n)}var Hb=k.uint.majorEncoded,qb=k.negint.majorEncoded,SD=k.bytes.majorEncoded,AD=k.string.majorEncoded,zb=k.array.majorEncoded,TD=k.float.majorEncoded|C4,_D=k.float.majorEncoded|R4,ID=k.float.majorEncoded|P4,kD=k.float.majorEncoded|L4,CD=BigInt(-1),RD=BigInt(1);function PD(r){return r.addBreakTokens!==!0}function Gb(r,e,t,n){let o=I4(e),i=t.typeEncoders&&t.typeEncoders[o];if(i){let s=i(e,o,t,n);if(s!=null){gu(r,s,dc,t);return}}switch(o){case"null":r.push([ID]);return;case"undefined":r.push([kD]);return;case"boolean":r.push([e?_D:TD]);return;case"number":!Number.isInteger(e)||!Number.isSafeInteger(e)?mu(r,new ee(k.float,e),t):e>=0?et(r,Hb,e):et(r,qb,e*-1-1);return;case"bigint":e>=BigInt(0)?et(r,Hb,e):et(r,qb,e*CD-RD);return;case"string":{let s=_h(e);et(r,AD,s.length),r.push(s);return}case"Uint8Array":et(r,SD,e.length),r.push(e);return;case"Array":if(!e.length){r.push([zb]);return}n=yu.createCheck(n,e),et(r,zb,e.length);for(let s of e)Gb(r,s,t,n);return;case"Object":case"Map":{let s=ro.Object(e,o,t,n);gu(r,s,dc,t)}return;default:{let s=ro[o];if(!s)throw new Error(`${Ch} unsupported type: ${o}`);let a=s(e,o,t,n);gu(r,a,dc,t)}}}function jb(r,e,t,n){let o=n instanceof Uint8Array,i=o?new kh(n):Bh,s=Mh(r,t);if(!Array.isArray(s)&&t.quickEncodeToken){let a=t.quickEncodeToken(s);if(a)return o?(i.push(a),i.toBytes()):a;let c=e[s.type.major];if(c.encodedSize){let l=c.encodedSize(s,t);if(o||(i=new du(l)),c(i,s,t),i.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${s} was wrong`);return o?i.toBytes():uu(i.chunks[0])}}return i.reset(),gu(i,s,e,t),i.toBytes(!0)}function fc(r,e){return e=Object.assign({},wD,e),PD(e)?(Bh.reset(),Gb(Bh,r,e,void 0),Bh.toBytes(!0)):jb(r,dc,e)}var LD={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},Uh=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=kn[e];if(t===void 0){let n=z[e];if(!n)throw new Error(`${be} 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}},wu=Symbol.for("DONE"),Fh=Symbol.for("BREAK");function DD(r,e,t){let n=[];for(let o=0;o<r.value;o++){let i=hc(e,t);if(i===Fh){if(r.value===1/0)break;throw new Error(`${be} got unexpected break to lengthed array`)}if(i===wu)throw new Error(`${be} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=i}return n}function ND(r,e,t){let n=t.useMaps===!0,o=t.rejectDuplicateMapKeys===!0,i=n?void 0:{},s=n?new Map:void 0;for(let a=0;a<r.value;a++){let c=hc(e,t);if(c===Fh){if(r.value===1/0)break;throw new Error(`${be} got unexpected break to lengthed map`)}if(c===wu)throw new Error(`${be} found map but not enough entries (got ${a} [no key], expected ${r.value})`);if(!n&&typeof c!="string")throw new Error(`${be} non-string keys not supported (got ${typeof c})`);if(o&&(n&&s.has(c)||!n&&Object.hasOwn(i,c)))throw new Error(`${be} found repeat map key "${c}"`);let l=hc(e,t);if(l===wu)throw new Error(`${be} found map but not enough entries (got ${a} [no value], expected ${r.value})`);n?s.set(c,l):i[c]=l}return n?s:i}function hc(r,e){if(r.done())return wu;let t=r.next();if(k.equals(t.type,k.break))return Fh;if(t.type.terminal)return t.value;if(k.equals(t.type,k.array))return DD(t,r,e);if(k.equals(t.type,k.map))return ND(t,r,e);if(k.equals(t.type,k.tag)){if(e.tags&&typeof e.tags[t.value]=="function"){let n=hc(r,e);return e.tags[t.value](n)}throw new Error(`${be} tag not supported (${t.value})`)}throw new Error("unsupported")}function Yb(r,e){if(!(r instanceof Uint8Array))throw new Error(`${be} data to decode must be a Uint8Array`);e=Object.assign({},LD,e);let t=uu(r),n=e.tokenizer||new Uh(t,e),o=hc(n,e);if(o===wu)throw new Error(`${be} did not find any content to decode`);if(o===Fh)throw new Error(`${be} got unexpected break`);return[o,r.subarray(n.pos())]}function Mo(r,e){let[t,n]=Yb(r,e);if(n.length>0)throw new Error(`${be} too many terminals, data makes no sense`);return t}var $h=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},pc=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Vh=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},bu=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function Kh(r){return r[Symbol.asyncIterator]!=null}function Qb(r,e){if(r.byteLength>e)throw new pc("Message length too long")}var qh=r=>{let e=ye(r),t=Re(e);return Zt(r,t),qh.bytes=e,t};qh.bytes=0;function Uo(r,e){e=e??{};let t=e.lengthEncoder??qh,n=e?.maxDataLength??4194304;function*o(i){Qb(i,n);let s=t(i.byteLength);s instanceof Uint8Array?yield s:yield*s,i instanceof Uint8Array?yield i:yield*i}return Kh(r)?(async function*(){for await(let i of r)yield*o(i)})():(function*(){for(let i of r)yield*o(i)})()}Uo.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??qh,n=e?.maxDataLength??4194304;return Qb(r,n),new ne(t(r.byteLength),r)};var $s;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})($s||($s={}));var M4=r=>{let e=Rr(r);return M4.bytes=ye(e),e};M4.bytes=0;function Vs(r,e){let t=new ne,n=$s.LENGTH,o=-1,i=e?.lengthDecoder??M4,s=e?.maxLengthLength??8,a=e?.maxDataLength??4194304;function*c(){for(;t.byteLength>0;){if(n===$s.LENGTH)try{if(o=i(t),o<0)throw new $h("Invalid message length");if(o>a)throw new pc("Message length too long");let l=i.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=$s.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>s)throw new Vh("Message length length too long");break}throw l}if(n===$s.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=$s.LENGTH}}}return Kh(r)?(async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new bu("Unexpected end of input")})():(function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new bu("Unexpected end of input")})()}Vs.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 Vs(n,{...e??{},onLength:i=>{t=i}})};function BD(r,e){if(typeof r=="string")return MD(r);if(typeof r=="number")return $D(r,e);throw Error(`Value provided to ms() must be a string or number. value=${JSON.stringify(r)}`)}var zh=BD;function MD(r){if(typeof r!="string"||r.length===0||r.length>100)throw Error(`Value provided to ms.parse() must be a string with length between 1 and 99. value=${JSON.stringify(r)}`);let e=/^(?<value>-?\d*\.?\d+) *(?<unit>milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|months?|mo|years?|yrs?|y)?$/i.exec(r);if(!e?.groups)return NaN;let{value:t,unit:n="ms"}=e.groups,o=parseFloat(t),i=n.toLowerCase();switch(i){case"years":case"year":case"yrs":case"yr":case"y":return o*315576e5;case"months":case"month":case"mo":return o*26298e5;case"weeks":case"week":case"w":return o*6048e5;case"days":case"day":case"d":return o*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return o*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return o*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return o*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return o;default:throw Error(`Unknown unit "${i}" provided to ms.parse(). value=${JSON.stringify(r)}`)}}function UD(r){let e=Math.abs(r);return e>=315576e5?`${Math.round(r/315576e5)}y`:e>=26298e5?`${Math.round(r/26298e5)}mo`:e>=6048e5?`${Math.round(r/6048e5)}w`: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 FD(r){let e=Math.abs(r);return e>=315576e5?Ks(r,e,315576e5,"year"):e>=26298e5?Ks(r,e,26298e5,"month"):e>=6048e5?Ks(r,e,6048e5,"week"):e>=864e5?Ks(r,e,864e5,"day"):e>=36e5?Ks(r,e,36e5,"hour"):e>=6e4?Ks(r,e,6e4,"minute"):e>=1e3?Ks(r,e,1e3,"second"):`${r} ms`}function $D(r,e){if(typeof r!="number"||!Number.isFinite(r))throw Error("Value provided to ms.format() must be of type number.");return e?.long?FD(r):UD(r)}function Ks(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function U4(r){t.debug=t,t.default=t,t.coerce=c,t.disable=i,t.enable=o,t.enabled=s,t.humanize=zh,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,d){let f,h=null,p,y;function g(...m){if(!g.enabled)return;let b=g,v=Number(new Date),L=v-(f||v);b.diff=L,b.prev=f,b.curr=v,f=v,m[0]=t.coerce(m[0]),typeof m[0]!="string"&&m.unshift("%O");let K=0;m[0]=m[0].replace(/%([a-zA-Z%])/g,(Y,T)=>{if(Y==="%%")return"%";K++;let S=t.formatters[T];if(typeof S=="function"){let B=m[K];Y=S.call(b,B),m.splice(K,1),K--}return Y}),t.formatArgs.call(b,m),d?.onLog!=null&&d.onLog(...m),(b.log||t.log).apply(b,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:()=>h!==null?h:(p!==t.namespaces&&(p=t.namespaces,y=t.enabled(u)),y),set:m=>{h=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 Wh=GD(),VD=["#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 KD(){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 HD(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+zh(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 qD=console.debug??console.log??(()=>{});function zD(r){try{r?Wh?.setItem("debug",r):Wh?.removeItem("debug")}catch{}}function WD(){let r;try{r=Wh?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function GD(){try{return localStorage}catch{}}function jD(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var Jb=U4({formatArgs:HD,save:zD,load:WD,useColors:KD,setupFormatters:jD,colors:VD,storage:Wh,log:qD});var br=Jb;br.formatters.b=r=>r==null?"undefined":Ge.baseEncode(r);br.formatters.t=r=>r==null?"undefined":_t.baseEncode(r);br.formatters.m=r=>r==null?"undefined":mt.baseEncode(r);br.formatters.p=r=>r==null?"undefined":r.toString();br.formatters.c=r=>r==null?"undefined":r.toString();br.formatters.k=r=>r==null?"undefined":r.toString();br.formatters.a=r=>r==null?"undefined":r.toString();function ex(r,e=""){let t=tx(r.message),n=tx(r.stack);return t!=null&&n!=null?n.includes(t)?`${n.split(`
4
4
  `).join(`
5
5
  ${e}`)}`:`${t}
6
6
  ${e}${n.split(`
7
7
  `).join(`
8
8
  ${e}`)}`:n!=null?`${n.split(`
9
9
  `).join(`
10
- ${e}`)}`:t!=null?`${t}`:`${r.toString()}`}function W_(r){return r instanceof AggregateError||r?.name==="AggregateError"&&Array.isArray(r.errors)}function Py(r,e=""){if(W_(r)){let t=ky(r,e);return r.errors.length>0?(e=`${e} `,t+=`
11
- ${e}${r.errors.map(n=>`${Py(n,`${e}`)}`).join(`
10
+ ${e}`)}`:t!=null?`${t}`:`${r.toString()}`}function YD(r){return r instanceof AggregateError||r?.name==="AggregateError"&&Array.isArray(r.errors)}function rx(r,e=""){if(YD(r)){let t=ex(r,e);return r.errors.length>0?(e=`${e} `,t+=`
11
+ ${e}${r.errors.map(n=>`${rx(n,`${e}`)}`).join(`
12
12
  ${e}`)}`):t+=`
13
- ${e}[Error list was empty]`,t.trim()}return ky(r,e)}rr.formatters.e=r=>r==null?"undefined":Py(r);function z_(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 ea(r){return{forComponent(e){return kr(e,r)}}}function kr(r,e){let t=z_(`${r}:trace`);return rr.enabled(`${r}:trace`)&&rr.names.map(n=>n.toString()).find(n=>n.includes(":trace"))!=null&&(t=rr(`${r}:trace`,e)),Object.assign(rr(r,e),{error:rr(`${r}:error`,e),trace:t,newScope:n=>kr(`${r}:${n}`,e)})}function Ry(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var Ly=Symbol.for("sindresorhus/unlimited-timeout#brand");function Dy(r,e,...t){if(typeof r!="function")throw new TypeError("Expected callback to be a function");e??=0,e=Number(e);let n=!1,o={[Ly]:!0,id:void 0,cleared:!1,ref(){return n=!1,o.id?.ref?.(),o},unref(){return n=!0,o.id?.unref?.(),o}};if(e===Number.POSITIVE_INFINITY||e>Number.MAX_SAFE_INTEGER)return o;(!Number.isFinite(e)||e<0)&&(e=0);let s=performance.now()+e,i=a=>{o.cleared||(a<=2147483647?(o.id=globalThis.setTimeout(()=>{o.cleared||r(...t)},a),n&&o.id?.unref?.()):(o.id=globalThis.setTimeout(()=>{let c=performance.now(),l=Math.max(0,s-c);i(l)},2147483647),n&&o.id?.unref?.()))};return i(e),o}function Ny(r){!r||typeof r!="object"||!r[Ly]||(r.cleared=!0,r.id!==void 0&&(globalThis.clearTimeout(r.id),r.id=void 0))}var G_=new WeakMap;function Y_({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(o.reason);let s,i,a,c=r??clearTimeout,l=()=>{c(s),a(o.reason)},d=()=>{o&&o.removeEventListener("abort",l)},u=new Promise((f,h)=>{i=()=>{d(),f(n)},a=h,s=(e??setTimeout)(i,t)});return o&&o.addEventListener("abort",l,{once:!0}),G_.set(u,()=>{c(s),s=null,i()}),u}}var X_=Y_({setTimeout:Dy,clearTimeout:Ny}),Oy=X_;var It=class extends At{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};var Xd=class extends At{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};var ta=class{memoryStorage;points;duration;blockDuration;keyPrefix;constructor(e={}){this.points=e.points??4,this.duration=e.duration??1,this.blockDuration=e.blockDuration??0,this.keyPrefix=e.keyPrefix??"rlflx",this.memoryStorage=new h3}consume(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,t,s);if(i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i.consumedPoints>this.points)throw this.blockDuration>0&&i.consumedPoints<=this.points+t&&(i=this.memoryStorage.set(o,i.consumedPoints,this.blockDuration)),new fd("Rate limit exceeded",i);return i}penalty(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,t,s);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}reward(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,-t,s);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}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)}},h3=class{storage;constructor(){this.storage=new Map}incrby(e,t,n){let o=this.storage.get(e);if(o!=null){let s=o.expiresAt!=null?o.expiresAt.getTime()-new Date().getTime():-1;return o.expiresAt==null||s>0?(o.value+=t,{remainingPoints:0,msBeforeNext:s,consumedPoints:o.value,isFirstInDuration:!1}):this.set(e,t,n)}return this.set(e,t,n)}set(e,t,n){let o=n*1e3,s=this.storage.get(e);s!=null&&clearTimeout(s.timeoutId);let i={value:t,expiresAt:o>0?new Date(Date.now()+o):void 0};return this.storage.set(e,i),o>0&&(i.timeoutId=setTimeout(()=>{this.storage.delete(e)},o),i.timeoutId.unref!=null&&i.timeoutId.unref()),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:i.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}};function ra(r,e,t){let n,o,s=!1;function i(){let l={signal:o.signal},d;t?.timeout!=null&&(d=le([o.signal,AbortSignal.timeout(t.timeout)]),l.signal=d),s=!0,Promise.resolve().then(async()=>{await r(l)}).catch(()=>{}).finally(()=>{d!=null&&(d.aborted?d.clear():d.addEventListener("abort",()=>{d.clear()},{once:!0})),s=!1,!o.signal.aborted&&(n=setTimeout(i,e))})}let a=qn(i,t?.debounce??100),c=!1;return{setInterval:l=>{e!==l&&(e=l,n!=null&&(clearTimeout(n),n=setTimeout(i,e)))},setTimeout:l=>{t??={},t.timeout=l},run:()=>{s||(clearTimeout(n),a())},start:()=>{c||(c=!0,o=new AbortController,o.signal,t?.runImmediately===!0?queueMicrotask(()=>{i()}):n=setTimeout(i,e))},stop:()=>{clearTimeout(n),o?.abort(),c=!1}}}var p3=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 st(r){let{name:e,metrics:t}=r,n;return t!=null?n=new p3({name:e,metrics:t}):n=new Map,n}var jn="/",By=new TextEncoder().encode(jn),Qd=By[0],$e=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=C(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]!==Qd)throw new Error("Invalid key")}toString(e="utf8"){return P(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(jn))}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=By),this._buf[0]!==Qd){let e=new Uint8Array(this._buf.byteLength+1);e.fill(Qd,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===Qd;)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 s=t[o],i=n[o];if(s<i)return!0;if(s>i)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(jn).slice(1)}type(){return Q_(this.baseNamespace())}name(){return j_(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(jn)||(e+=jn),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(jn):new r(e.slice(0,-1).join(jn))}child(e){return this.toString()===jn?e:e.toString()===jn?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(),...Z_(e.map(t=>t.namespaces()))])}};function Q_(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function j_(r){let e=r.split(":");return e[e.length-1]}function Z_(r){return[].concat(...r)}function J_(r){return r[Symbol.asyncIterator]!=null}function eC(r){if(J_(r))return(async()=>{let n=new Uint8Array(0);for await(let o of r)n=Be([n,o],n.length+o.length);return n})();let e=[],t=0;for(let n of r)e.push(n),t+=n.byteLength;return Be(e,t)}var jd=eC;function Zd({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*tC(r,e){if(e!=null&&typeof e=="object")if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t],s=G.asCID(n);s!=null?yield[o.join("/"),s]:typeof n=="object"&&(yield*m3(n,o))}else{let t=G.asCID(e);t!=null?yield[r.join("/"),t]:yield*m3(e,r)}}function*m3(r,e){if(r==null||r instanceof Uint8Array)return;let t=G.asCID(r);t!=null&&(yield[e.join("/"),t]);for(let[n,o]of Object.entries(r)){let s=[...e,n];yield*tC(s,o)}}function*rC(r,e){if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t];yield o.join("/"),typeof n=="object"&&G.asCID(n)==null&&(yield*g3(n,o))}else yield*g3(e,r)}function*g3(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"&&G.asCID(n)==null&&(yield*rC(o,n))}}function nC(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(i=>`[${JSON.stringify(i)}]`).join("")}`);let s=G.asCID(t);if(s!=null)return{value:s,remaining:e.slice(n+1).join("/")}}return{value:t}}var y3=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:Zd(),bytes:Zd(),value:Zd(),asBlock:Zd()})}links(){return m3(this.value,[])}tree(){return g3(this.value,[])}get(e="/"){return nC(this.value,e.split("/").filter(Boolean))}};function My({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 y3({cid:e,bytes:r,value:o})}var Jd=class extends Error{static name="AlreadyPinnedError";name="AlreadyPinnedError"},Jc=class extends Error{static name="BlockPinnedError";name="BlockPinnedError"},ef=class extends Error{static name="InvalidDatastoreVersionError";name="InvalidDatastoreVersionError"},Ks=class extends Error{static name="InvalidConfigurationError";name="InvalidConfigurationError"},tf=class extends AggregateError{static name="GetFailedError";name="GetFailedError"},rf=class extends AggregateError{static name="LoadBlockFailedError";name="LoadBlockFailedError"},el=class extends Error{static name="BlockNotFoundWhileOfflineError";name="BlockNotFoundWhileOfflineError"};var $y="/pin/",Uy="/pinned-block/",w3=Ar,Fy=1;function nf(r){return r.version===0&&(r=r.toV1()),new $e(`${$y}${r.toString(w3)}`)}var of=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=nf(e);if(await this.datastore.has(n))throw new Jd("Already pinned");let o=Math.round(t.depth??1/0);if(o<0)throw new A("Depth must be greater than or equal to 0");let s=new At({concurrency:Fy});for await(let a of this.#e(e,s,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>ee(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let i={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,Fo(i),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=await this.getCodec(e.code),s=await jd(this.blockstore.get(e,n)),i=My({bytes:s,cid:e,codec:o});yield e;for(let[,a]of i.links())yield*await t.add(async()=>this.#e(a,t,{...n,depth:n.depth-1}))}async#t(e,t,n){let o=new $e(`${Uy}${w3.encode(e.multihash.bytes)}`),s={pinCount:0,pinnedBy:[]};try{s=br(await this.datastore.get(o,n))}catch(a){if(a.name!=="NotFoundError")throw a}if(t(s)){if(s.pinCount===0&&await this.datastore.has(o)){await this.datastore.delete(o);return}await this.datastore.put(o,Fo(s),n),n.onProgress?.(new H("helia:pin:add",e))}}async*rm(e,t={}){let n=nf(e),o=await this.datastore.get(n,t),s=br(o);await this.datastore.delete(n,t);let i=new At({concurrency:Fy});for await(let a of this.#e(e,i,{...t,depth:s.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>ee(l,e.bytes)),!0),{...t,depth:s.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:$y+(e.cid!=null?`${e.cid.toString(Ar)}`:"")},e)){let o=G.parse(t.toString().substring(5),Ar),s=br(n);yield{cid:o,...s}}}async isPinned(e,t={}){let n=new $e(`${Uy}${w3.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=nf(e),o=await this.datastore.get(n,t);return br(o)}async setMetadata(e,t,n){let o=nf(e),s=await this.datastore.get(o,n),i=br(s);i.metadata=t??{},await this.datastore.put(o,Fo(i),n)}};var b3=1,E3=5,x3=100;var tl=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},$o=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},rl=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},nl=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}},v3=class extends Error{static name="InvalidCodecError";constructor(e="Invalid codec"){super(e),this.name="InvalidCodecError"}};var oC=5,sf=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??oC,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 ct(...this.routers)}async stop(){await ut(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new $o("No content routers available");let n=new It({concurrency:this.providerLookupConcurrency}),o=0,s=[],i=this,a=0;this.log("findProviders for %c start using routers %s",e,this.routers.map(l=>l.toString()).join(", "));let c=Vs(this.routers,"findProviders").map(async function*(l){let d=0;try{for await(let u of l.findProviders(e,t))d++,yield u}catch(u){s.push(u)}finally{i.log("router %s found %d providers for %c",l,d,e),a++,a===c.length&&n.size===0&&n.emitIdle()}});for await(let l of Xt(n.toGenerator(),...c))if(l!=null){if(l.multiaddrs.length===0){if(n.find(l.id)!=null)continue;n.add(async()=>{try{let d=await this.findPeer(l.id,t);return d.multiaddrs.length===0?null:{...d,protocols:l.protocols,routing:l.routing}}catch(d){return this.log.error("could not load multiaddrs for peer %p - %e",l.id,d),null}},{peerId:l.id,signal:t.signal}).catch(d=>{this.log.error("could not load multiaddrs for peer %p - %e",l.id,d)});continue}o++,yield l}this.log("findProviders finished, found %d providers for %c",o,e)}async provide(e,t={}){if(this.routers.length===0)throw new $o("No content routers available");await Promise.all(Vs(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){await Promise.all(Vs(this.routers,"cancelReprovide").map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){await Promise.all(Vs(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){let n=[],o;try{o=await Promise.any(Vs(this.routers,"get").map(async s=>{try{return await s.get(e,t)}catch(i){this.log("router %s failed with %e",s,i),n.push(i)}}))}catch{}if(o==null)throw new tf(n,`Failed to get value key ${P(e,"base58btc")}`);return o}async findPeer(e,t){if(this.routers.length===0)throw new $o("No peer routers available");let n=this,o=Xt(...Vs(this.routers,"findPeer").map(s=>(async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error(i)}})()));for await(let s of o)if(s!=null)return s;throw new De("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new $o("No peer routers available");for await(let n of Xt(...Vs(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function Vs(r,e){return r.filter(t=>t[e]!=null)}var Er=class extends Error{static name="AbortError";name="AbortError";constructor(e="The operation was aborted",...t){super(e,...t)}};async function Qt(r,e,t,n){let o=new Er(n?.errorMessage);n?.errorCode!=null&&(o.code=n.errorCode);let s=n?.errorEvent??"error";return t?.aborted===!0?Promise.reject(o):new Promise((i,a)=>{function c(){A3(t,"abort",u),A3(r,e,l),A3(r,s,d)}let l=f=>{try{if(n?.filter?.(f)===!1)return}catch(h){c(),a(h);return}c(),i(f)},d=f=>{if(c(),f instanceof Error){a(f);return}a(f.detail??n?.error??new Error(`The "${n?.errorEvent}" event was emitted but the event had no '.detail' field. Pass an 'error' option to race-event to change this message.`))},u=()=>{c(),a(o)};S3(t,"abort",u),S3(r,e,l),S3(r,s,d)})}function S3(r,e,t){r!=null&&(Ky(r)?r.addEventListener(e,t):r.addListener(e,t))}function A3(r,e,t){r!=null&&(Ky(r)?r.removeEventListener(e,t):r.removeListener(e,t))}function Ky(r){return typeof r.addEventListener=="function"&&typeof r.removeEventListener=="function"}var af=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var cf=class{deferred;signal;constructor(e){this.signal=e,this.deferred=Promise.withResolvers(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new Er)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function sC(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var lf=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=sC(),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 Er),this.cleanup())}async join(e={}){let t=new cf(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 Pe(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)})}};function T3(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 ol=class extends ie{concurrency;maxSize;queue;pending;sort;autoStart;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,this.autoStart=e.autoStart??!0,this.sort=e.sort,this.queue=[],this.emitEmpty=T3(this.emitEmpty.bind(this),1),this.emitIdle=T3(this.emitIdle.bind(this),1)}[Symbol.asyncIterator](){return this.toGenerator()}emitEmpty(){this.size===0&&this.safeDispatchEvent("empty")}emitIdle(){this.running===0&&this.safeDispatchEvent("idle")}tryToStartAnother(){if(this.size===0)return this.emitEmpty(),this.running===0&&this.emitIdle(),!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.safeDispatchEvent("next"),this.autoStart&&this.tryToStartAnother()}),!0)}return!1}enqueue(e){this.queue.push(e),this.sort!=null&&this.queue.sort(this.sort)}start(){this.autoStart===!1&&(this.autoStart=!0,this.tryToStartAnother())}pause(){this.autoStart=!1}async add(e,t){if(t?.signal?.throwIfAborted(),this.size===this.maxSize)throw new af;let n=new lf(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.autoStart&&this.tryToStartAnother(),n.join(t).then(o=>(this.safeDispatchEvent("success",{detail:{job:n,result:o}}),o)).catch(o=>{if(n.status==="queued"){for(let s=0;s<this.queue.length;s++)if(this.queue[s]===n){this.queue.splice(s,1);break}}throw 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 Er)}),this.clear()}async onEmpty(e){this.size!==0&&await Qt(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await Qt(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await Qt(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=St({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail.result)},s=c=>{n(c.detail.error)},i=()=>{n()},a=()=>{n(new Er("Queue aborted"))};this.addEventListener("success",o),this.addEventListener("failure",s),this.addEventListener("idle",i),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("success",o),this.removeEventListener("failure",s),this.removeEventListener("idle",i),e?.signal?.removeEventListener("abort",a),n()}}};var uf="lock:worker:request-read",df="lock:worker:abort-read-request",ff="lock:worker:release-read",hf="lock:master:grant-read",pf="lock:master:error-read",mf="lock:worker:request-write",gf="lock:worker:abort-write-request",yf="lock:worker:release-write",wf="lock:master:grant-write",bf="lock:master:error-write",Ef="lock:worker:finalize",xf="mortice",Vy={singleProcess:!1};var I3=(r,e,t,n,o,s,i,a,c)=>l=>{if(l.data==null)return;let d={type:l.data.type,name:l.data.name,identifier:l.data.identifier};d.type===o&&r.safeDispatchEvent(t,{detail:{name:d.name,identifier:d.identifier,handler:async()=>{e.postMessage({type:c,name:d.name,identifier:d.identifier}),await new Promise(u=>{let f=h=>{if(h?.data==null)return;let p={type:h.data.type,name:h.data.name,identifier:h.data.identifier};p.type===a&&p.identifier===d.identifier&&(e.removeEventListener("message",f),u())};e.addEventListener("message",f)})},onError:u=>{e.postMessage({type:i,name:d.name,identifier:d.identifier,error:{message:u.message,name:u.name,stack:u.stack}})}}}),d.type===s&&r.safeDispatchEvent(n,{detail:{name:d.name,identifier:d.identifier}}),d.type===Ef&&r.safeDispatchEvent("finalizeRequest",{detail:{name:d.name}})};var Hy=(r=10)=>Math.random().toString().substring(2,r+2);var vf=class{name;channel;constructor(e){this.name=e,this.channel=new BroadcastChannel(xf)}readLock(e){return this.sendRequest(uf,df,hf,pf,ff,e)}writeLock(e){return this.sendRequest(mf,gf,wf,bf,yf,e)}finalize(){this.channel.postMessage({type:Ef,name:this.name}),this.channel.close()}async sendRequest(e,t,n,o,s,i){i?.signal?.throwIfAborted();let a=Hy();return this.channel.postMessage({type:e,identifier:a,name:this.name}),new Promise((c,l)=>{let d=()=>{this.channel.postMessage({type:t,identifier:a,name:this.name})};i?.signal?.addEventListener("abort",d,{once:!0});let u=f=>{if(f.data?.identifier===a&&(f.data?.type===n&&(this.channel.removeEventListener("message",u),i?.signal?.removeEventListener("abort",d),c(()=>{this.channel.postMessage({type:s,identifier:a,name:this.name})})),f.data.type===o)){this.channel.removeEventListener("message",u),i?.signal?.removeEventListener("abort",d);let h=new Error;f.data.error!=null&&(h.message=f.data.error.message,h.name=f.data.error.name,h.stack=f.data.error.stack),l(h)}};this.channel.addEventListener("message",u)})}};var qy=r=>{if(r=Object.assign({},Vy,r),!!globalThis.document||r.singleProcess){let t=new BroadcastChannel(xf),n=new ie;return t.addEventListener("message",I3(n,t,"requestReadLock","abortReadLockRequest",uf,df,pf,ff,hf)),t.addEventListener("message",I3(n,t,"requestWriteLock","abortWriteLockRequest",mf,gf,bf,yf,wf)),n}return new vf(r.name)};var Hs=new Map,sl;function Wy(r){return typeof r?.readLock=="function"&&typeof r?.writeLock=="function"}function iC(r){if(sl==null&&(sl=qy(r),!Wy(sl))){let e=sl;e.addEventListener("requestReadLock",t=>{let n=t.detail.name,o=t.detail.identifier,s=Hs.get(n);if(s==null)return;let i=new AbortController,a=c=>{c.detail.name!==n||c.detail.identifier!==o||i.abort()};e.addEventListener("abortReadLockRequest",a),s.readLock({signal:i.signal}).then(async c=>{await t.detail.handler().finally(()=>{c()})}).catch(c=>{t.detail.onError(c)}).finally(()=>{e.removeEventListener("abortReadLockRequest",a)})}),e.addEventListener("requestWriteLock",t=>{let n=t.detail.name,o=t.detail.identifier,s=Hs.get(n);if(s==null)return;let i=new AbortController,a=c=>{c.detail.name!==n||c.detail.identifier!==o||i.abort()};e.addEventListener("abortWriteLockRequest",a),s.writeLock({signal:i.signal}).then(async c=>{await t.detail.handler().finally(()=>{c()})}).catch(c=>{t.detail.onError(c)}).finally(()=>{e.removeEventListener("abortWriteLockRequest",a)})}),e.addEventListener("finalizeRequest",t=>{let n=t.detail.name,o=Hs.get(n);o?.finalize()})}return sl}async function _3(r,e){let t,n,o=new Promise((i,a)=>{t=i,n=a}),s=()=>{n(new Er)};return e?.signal?.addEventListener("abort",s,{once:!0}),r.add(async()=>{await new Promise(i=>{t(()=>{e?.signal?.removeEventListener("abort",s),i()})})},{signal:e?.signal}).catch(i=>{n(i)}),o}var zy=(r,e)=>{let t=Hs.get(r);if(t!=null)return t;let n=iC(e);if(Wy(n))return t=n,Hs.set(r,t),t;let o=new ol({concurrency:1}),s;return t={async readLock(i){if(s!=null)return _3(s,i);s=new ol({concurrency:e.concurrency,autoStart:!1});let a=s,c=_3(s,i);return o.add(async()=>{a.start(),await a.onIdle().then(()=>{s===a&&(s=null)})}),c},async writeLock(i){return s=null,_3(o,i)},finalize:()=>{Hs.delete(r)},queue:o},Hs.set(r,t),e.autoFinalize===!0&&o.addEventListener("idle",()=>{t.finalize()},{once:!0}),t};var aC={name:"lock",concurrency:1/0,singleProcess:!1,autoFinalize:!1};function il(r){let e=Object.assign({},aC,r);return zy(e.name,e)}var Sf=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=il({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await ct(this.child),this.started=!0}async stop(){await ut(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{yield*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 Jc("Block was pinned - please unpin and try again");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 s of e){if(await o.pins.isPinned(s))throw new Jc("Block was pinned - please unpin and try again");yield s}})(),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 C3=new $e("/version"),Gy=1;async function Yy(r){if(!await r.has(C3)){await r.put(C3,C(`${Gy}`));return}let e=await r.get(C3),t=P(e);if(parseInt(t,10)!==Gy)throw new ef("Invalid datastore version, a datastore migration may be required")}var P3={};tt(P3,{code:()=>R3,decode:()=>yC,decodeOptions:()=>pC,encode:()=>gC,encodeOptions:()=>fC,name:()=>mC,toByteView:()=>Qy});var Xy=42;function Qy(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function cC(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=G.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new N(y.tag,Xy),new N(y.bytes,t)]}function lC(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function uC(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}function dC(r){for(let e of r.keys())if(typeof e!="string"||e.length===0)throw new Error("Non-string Map keys are not supported by the IPLD Data Model and cannot be encoded");return null}var k3={float64:!0,typeEncoders:{Map:dC,Object:cC,undefined:lC,number:uC}},fC={...k3,typeEncoders:{...k3.typeEncoders}};function hC(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return G.decode(r.subarray(1))}var Af={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Af.tags[Xy]=hC;var pC={...Af,tags:Af.tags.slice()},mC="dag-cbor",R3=113,gC=r=>Fo(r,k3),yC=r=>br(Qy(r),Af);var U3={};tt(U3,{code:()=>M3,decode:()=>Zy,encode:()=>jy,format:()=>CC,name:()=>_C,parse:()=>RC,stringify:()=>CC});var L3=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(y.equals(t.type,y.array)&&(t.elements++,t.elements!==1&&e.push([44])),y.equals(t.type,y.map)&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[y.uint.major](e,t){this.prefix(e);let n=String(t.value),o=[];for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s);e.push(o)}[y.negint.major](e,t){this[y.uint.major](e,t)}[y.bytes.major](e,t){throw new Error(`${wn} unsupported type: Uint8Array`)}[y.string.major](e,t){this.prefix(e);let n=Gi(JSON.stringify(t.value));e.push(n.length>32?Bs(n):n)}[y.array.major](e,t){this.prefix(e),this.inRecursive.push({type:y.array,elements:0}),e.push([91])}[y.map.major](e,t){this.prefix(e),this.inRecursive.push({type:y.map,elements:0}),e.push([123])}[y.tag.major](e,t){}[y.float.major](e,t){if(t.type.name==="break"){let i=this.inRecursive.pop();if(i){if(y.equals(i.type,y.array))e.push([93]);else if(y.equals(i.type,y.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(`${wn} 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=[],s=!1;for(let i=0;i<n.length;i++)o[i]=n.charCodeAt(i),!s&&(o[i]===46||o[i]===101||o[i]===69)&&(s=!0);s||(o.push(46),o.push(48)),e.push(o)}};function wC(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${wn} complex map keys are not supported`);let t=r[0],n=e[0];if(t.type!==y.string||n.type!==y.string)throw new Error(`${wn} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${wn} unexpected duplicate map keys, this is not supported`)}var bC={addBreakTokens:!0,mapSorter:wC};function D3(r,e){return e=Object.assign({},bC,e),Fd(r,new L3,e)}var na=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 N(y.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 s=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),i=parseFloat(s);return n?new N(y.float,i,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(i)?new N(i>=0?y.uint:y.negint,i,this._pos-e):new N(i>=0?y.uint:y.negint,BigInt(s),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 s=this._pos,i=0;s<this.data.length&&i<65536;s++,i++){let a=this.data[s];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,s));return this._pos=s+1,new N(y.string,c,i)}}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 s=0;for(let i=0;i<4;i++){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}`);s=s*16+a,this._pos++}return s},o=()=>{let s=this.ch(),i=null,a=s>239?4:s>223?3:s>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${J} unexpected unicode sequence at position ${this._pos}`);let c,l,d,u;switch(a){case 1:s<128&&(i=s);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(u=(s&31)<<6|c&63,u>127&&(i=u));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(u=(s&15)<<12|(c&63)<<6|l&63,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],d=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(d&192)===128&&(u=(s&15)<<18|(c&63)<<12|(l&63)<<6|d&63,u>65535&&u<1114112&&(i=u))}i===null?(i=65533,a=1):i>65535&&(i-=65536,t.push(i>>>10&1023|55296),i=56320|i&1023),t.push(i),this._pos+=a};for(;!this.done();){let s=this.ch(),i;switch(s){case 92:if(this._pos++,this.done())throw new Error(`${J} unexpected string termination at position ${this._pos}`);switch(i=this.ch(),this._pos++,i){case 34:case 39:case 92:case 47:t.push(i);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 N(y.string,I7(t),this._pos-e);default:if(s<32)throw new Error(`${J} invalid control character at position ${this._pos}`);s<128?(t.push(s),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 N(y.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new N(y.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new N(y.null,null,4);case 102:return this.expect([102,97,108,115,101]),new N(y.false,!1,5);case 116:return this.expect([116,114,117,101]),new N(y.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 N(y.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 N(y.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 N(y.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 N(y.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 N3(r,e){return e=Object.assign({tokenizer:new na(r,e)},e),br(r,e)}function xC(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function vC(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=G.asCID(r);if(!e)return null;let t=e.toString();return[new N(y.map,1/0,1),new N(y.string,"/",1),new N(y.string,t,t.length),new N(y.break,void 0,1)]}function Tf(r){let e=nt.encode(r).slice(1);return[new N(y.map,1/0,1),new N(y.string,"/",1),new N(y.map,1/0,1),new N(y.string,"bytes",5),new N(y.string,e,e.length),new N(y.break,void 0,1),new N(y.break,void 0,1)]}function Qr(r){return Tf(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function SC(r){return Tf(new Uint8Array(r))}function AC(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function TC(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 IC={typeEncoders:{Object:vC,Buffer:Tf,Uint8Array:Tf,Int8Array:Qr,Uint16Array:Qr,Int16Array:Qr,Uint32Array:Qr,Int32Array:Qr,Float32Array:Qr,Float64Array:Qr,Uint8ClampedArray:Qr,BigInt64Array:Qr,BigUint64Array:Qr,DataView:Qr,ArrayBuffer:SC,undefined:AC,number:TC}},O3=class extends na{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(y.equals(e.type,y.map)){let t=this._next();if(y.equals(t.type,y.string)&&t.value==="/"){let n=this._next();if(y.equals(n.type,y.string)){let o=this._next();if(!y.equals(o.type,y.break))throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new N(y.tag,42,0)}if(y.equals(n.type,y.map)){let o=this._next();if(y.equals(o.type,y.string)&&o.value==="bytes"){let s=this._next();if(y.equals(s.type,y.string)){for(let a=0;a<2;a++){let c=this._next();if(!y.equals(c.type,y.break))throw new Error("Invalid encoded Bytes form")}let i=nt.decode(`m${s.value}`);return new N(y.bytes,i,s.value.length)}this.tokenBuffer.push(s)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},B3={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};B3.tags[42]=G.parse;var _C="dag-json",M3=297,jy=r=>D3(r,IC),Zy=r=>{let e=xC(r),t=Object.assign(B3,{tokenizer:new O3(e,B3)});return N3(e,t)},CC=r=>kC.decode(jy(r));var kC=new TextDecoder,RC=r=>Zy(PC.encode(r)),PC=new TextEncoder;var q3={};tt(q3,{code:()=>H3,createLink:()=>c9,createNode:()=>a9,decode:()=>qC,encode:()=>HC,name:()=>VC,prepare:()=>K3,validate:()=>V3});var LC=new TextDecoder;function F3(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 If(r,e){let t;[t,e]=F3(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 Jy(r,e){let t;return[t,e]=F3(r,e),[t&7,t>>3,e]}function DC(r){let e={},t=r.length,n=0;for(;n<t;){let o,s;if([o,s,n]=Jy(r,n),s===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]=If(r,n)}else if(s===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 i;[i,n]=If(r,n),e.Name=LC.decode(i)}else if(s===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]=F3(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${s}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function e9(r){let e=r.length,t=0,n,o=!1,s;for(;t<e;){let a,c;if([a,c,t]=Jy(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(s)throw new Error("protobuf: (PBNode) duplicate Data section");[s,t]=If(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]=If(r,t),n.push(DC(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 i={};return s&&(i.Data=s),i.Links=n||[],i}var r9=new TextEncoder,t9=2**32,NC=2**31;function OC(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=al(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=r9.encode(r.Name);t-=n.length,e.set(n,t),t=al(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=al(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function n9(r){let e=MC(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=al(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let s=OC(r.Links[o],t.subarray(0,n));n-=s,n=al(t,n,s)-1,t[n]=18}return t}function BC(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+oa(t)}if(typeof r.Name=="string"){let t=r9.encode(r.Name).length;e+=1+t+oa(t)}return typeof r.Tsize=="number"&&(e+=1+oa(r.Tsize)),e}function MC(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+oa(t)}if(r.Links)for(let t of r.Links){let n=BC(t);e+=1+n+oa(n)}return e}function al(r,e,t){e-=oa(t);let n=e;for(;t>=NC;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function oa(r){return r%2===0&&r++,Math.floor((UC(r)+6)/7)}function UC(r){let e=0;return r>=t9&&(r=Math.floor(r/t9),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+FC[r]}var FC=[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 $C=["Data","Links"],KC=["Hash","Name","Tsize"],$3=new TextEncoder;function s9(r,e){if(r===e)return 0;let t=r.Name?$3.encode(r.Name):[],n=e.Name?$3.encode(e.Name):[],o=t.length,s=n.length;for(let i=0,a=Math.min(o,s);i<a;++i)if(t[i]!==n[i]){o=t[i],s=n[i];break}return o<s?-1:s<o?1:0}function o9(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function i9(r){if(typeof r.asCID=="object"){let t=G.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=G.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=G.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=G.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 K3(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=$3.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(i9),e.Links.sort(s9);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function V3(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!o9(r,$C))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(!o9(t,KC))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&&s9(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function a9(r,e=[]){return K3({Data:r,Links:e})}function c9(r,e,t){return i9({Hash:t,Name:r,Tsize:e})}function l9(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var VC="dag-pb",H3=112;function HC(r){V3(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),n9(e)}function qC(r){let e=l9(r),t=e9(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let s={};try{s.Hash=G.decode(o.Hash)}catch{}if(!s.Hash)throw new Error("Invalid Hash field found in link, expected CID");return o.Name!==void 0&&(s.Name=o.Name),o.Tsize!==void 0&&(s.Tsize=o.Tsize),s})),n}function sa(r){return r?.then!=null}function u9(r=[],e){let t={[H3]:q3,[On]:us,[R3]:P3,[M3]:U3,[a2]:Lu};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let s=e(n);sa(s)?o=await s:o=s,t[o.code]=o}if(o!=null)return o;throw new nl(`Could not load codec for ${n}`)}}function d9(r=[],e){let t={[Ge.code]:Ge,[Nu.code]:Nu,[ft.code]:ft};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let s=e(n);sa(s)?o=await s:o=s,t[o.code]=o}if(o!=null)return o;throw new rl(`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 Zn=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,bytes:o}of e)await this.put(n,o,t),yield n}get(e,t){throw new Error(".get is not implemented")}async*getMany(e,t){for await(let n of e)yield{cid:n,bytes: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 _f=0,ia=class extends Error{static name="IdentityHashDigestTooLongError";name="IdentityHashDigestTooLongError"},Cf=class extends Zn{child;maxDigestLength;constructor(e,t){super(),this.child=e,this.maxDigestLength=t?.maxDigestLength}put(e,t,n){if(e.multihash.code===_f){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ia(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);return n?.signal?.throwIfAborted(),e}return this.child==null?(n?.signal?.throwIfAborted(),e):this.child.put(e,t,n)}async*get(e,t){if(e.multihash.code===_f){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ia(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);t?.signal?.throwIfAborted(),yield e.multihash.digest;return}if(this.child==null)throw t?.signal?.throwIfAborted(),new Rr;yield*this.child.get(e,t)}has(e,t){if(e.multihash.code===_f){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ia(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);return t?.signal?.throwIfAborted(),!0}return this.child==null?(t?.signal?.throwIfAborted(),!1):this.child.has(e,t)}delete(e,t){if(e.code===_f){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ia(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);t?.signal?.throwIfAborted();return}if(this.child!=null)return this.child.delete(e,t)}async*getAll(e){this.child!=null&&(yield*this.child.getAll(e)),e?.signal?.throwIfAborted()}};function WC(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 aa=WC;function zC(r){return r[Symbol.asyncIterator]!=null}function GC(r,e){let t=0;if(zC(r))return(async function*(){for await(let c of r)await e(c,t++)&&(yield c)})();let n=aa(r),{value:o,done:s}=n.next();if(s===!0)return(function*(){})();let i=e(o,t++);if(typeof i.then=="function")return(async function*(){await i&&(yield o);for(let c of n)await e(c,t++)&&(yield c)})();let a=e;return(function*(){i===!0&&(yield o);for(let c of n)a(c,t++)&&(yield c)})()}var jr=GC;function YC(r){return r[Symbol.asyncIterator]!=null}function f9(r){return r?.then!=null}function XC(r,e){let t=0;if(YC(r))return(async function*(){for await(let c of r){let l=e(c,t++);f9(l)&&await l,yield c}})();let n=aa(r),{value:o,done:s}=n.next();if(s===!0)return(function*(){})();let i=e(o,t++);if(typeof i?.then=="function")return(async function*(){await i,yield o;for(let c of n){let l=e(c,t++);f9(l)&&await l,yield c}})();let a=e;return(function*(){yield o;for(let c of n)a(c,t++),yield c})()}var W3=XC;var QC=128,ca=class{child;getHasher;log;logger;blockBrokers;constructor(e,t={}){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.blockBrokers=e.blockBrokers,this.child=new Cf(e.blockstore,{maxDigestLength:t.maxIdentityHashDigestLength??QC}),this.getHasher=e.getHasher}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new H("blocks:put:duplicate",e)),e):(n.onProgress?.(new H("blocks:put:providers:notify",e)),await Promise.all(this.blockBrokers.map(async o=>o.announce?.(e,n))),n.onProgress?.(new H("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=jr(e,async({cid:s})=>{let i=await this.child.has(s,t);return i&&t.onProgress?.(new H("blocks:put-many:duplicate",s)),!i}),o=W3(n,async({cid:s})=>{t.onProgress?.(new H("blocks:put-many:providers:notify",s)),await Promise.all(this.blockBrokers.map(async i=>i.announce?.(s,t)))});t.onProgress?.(new H("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(o,t)}async*get(e,t={}){let n=await this.child.has(e,t),o=t.offline===!0;if(!n){if(o)throw new el("The block was present in the blockstore and the node is running offline so cannot fetch it");let s=await this.getHasher(e.multihash.code);t?.signal?.throwIfAborted(),t.onProgress?.(new H("blocks:get:providers:get",e));let i=await h9(e,this.blockBrokers,s,{...t,log:this.log});t.onProgress?.(new H("blocks:get:blockstore:put",e)),await this.child.put(e,i,t),t.onProgress?.(new H("blocks:get:providers:notify",e)),await Promise.all(this.blockBrokers.map(async a=>a.announce?.(e,t))),yield i;return}t.onProgress?.(new H("blocks:get:blockstore:get",e)),yield*this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new H("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(W3(e,async n=>{let o=await this.child.has(n,t),s=t.offline===!0;if(!o){if(s)throw new el("The block was present in the blockstore and the node is running offline so cannot fetch it");let i=await this.getHasher(n.multihash.code);t?.signal?.throwIfAborted(),t.onProgress?.(new H("blocks:get-many:providers:get",n));let a=await h9(n,this.blockBrokers,i,{...t,log:this.log});t.onProgress?.(new H("blocks:get-many:blockstore:put",n)),await this.child.put(n,a,t),t.onProgress?.(new H("blocks:get-many:providers:notify",n)),await Promise.all(this.blockBrokers.map(async c=>c.announce?.(n,t)))}}))}async delete(e,t={}){t.onProgress?.(new H("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new H("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 H("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}};async function h9(r,e,t,n){let o=ZC(r,t),s=new AbortController,i=le([s.signal,n.signal]);s.signal;let a=[];for(let c of e)jC(c)&&a.push(c);if(a.length===0)throw new Ks(`No block brokers capable of retrieving blocks are configured, the CID ${r} cannot be fetched from the network`);try{return await Promise.any(a.map(async c=>{try{let l=!1,d=await c.retrieve(r,{...n,signal:i,validateFn:async u=>{await o(u),n.signal?.throwIfAborted(),l=!0}});return l||(await o(d),n.signal?.throwIfAborted()),d}catch(l){throw n.log.error("could not retrieve verified block for %c from %s - %e",r,c.name,l),l}}))}catch(c){throw new rf(c.errors,`Failed to load block for ${r}`)}finally{s.abort(),i.clear()}}function jC(r){return typeof r.retrieve=="function"}var ZC=(r,e)=>{if(e==null)throw new A(`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,{truncate:r.multihash.digest.byteLength});if(sa(o)?n=await o:n=o,!ee(n.digest,r.multihash.digest))throw new yo("Hash of downloaded block did not match multihash from passed CID")}};var kf=class extends ca{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 addPeer(e,t){await Promise.all(this.blockBrokers.map(n=>n.addPeer(e,t)))}async put(e,t,n={}){let o=le([this.closeController.signal,n.signal]);try{return await super.put(e,t,{...n,signal:o})}finally{o.clear()}}async*putMany(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async*get(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=le([this.closeController.signal,t.signal]);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=le([this.closeController.signal,t.signal]);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=le([this.closeController.signal,e.signal]);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};var Rf=class extends ca{started;constructor(e,t={}){super(e,t),this.started=!1}isStarted(){return this.started}async start(){await ct(this.child,...this.blockBrokers),this.started=!0}async stop(){await ut(this.child,...this.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){if(this.blockBrokers.length===0)throw new Ks("No block brokers configured");let n=this.blockBrokers.map(o=>o.createSession?.(t)).filter(o=>o!=null);if(n.length===0)throw new Ks(`No configured block brokers support sessions - tried ${this.blockBrokers.map(o=>o.name).join(", ")}`);return new kf({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}};var qs=class extends ie{initialPeerSearchComplete;requests;logName;log;logger;minProviders;maxProviders;providers;evictionFilter;initialProviders;cidPeerFilterSize;constructor(e,t){super(),this.logName=t.name,this.logger=e.logger,this.log=e.logger.forComponent(this.logName),this.requests=new Map,this.minProviders=t.minProviders??1,this.maxProviders=t.maxProviders??5,this.cidPeerFilterSize=t.cidPeerFilterSize??100,this.providers=[],this.evictionFilter=xt(this.maxProviders),this.initialProviders=[...t.providers??[]]}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.observers++,o.promise;let s=fe(),i={promise:s.promise,observers:1,queryFilter:xt(this.cidPeerFilterSize)};this.requests.set(n,i);let a=!1;this.initialPeerSearchComplete==null&&(a=!0,this.log=this.logger.forComponent(`${this.logName}:${e}`),this.initialPeerSearchComplete=this.findProviders(e,this.minProviders,t));let c=!1,l=new At({concurrency:this.maxProviders});l.addEventListener("failure",f=>{this.log.error("error querying provider %s, evicting from session - %e",f.detail.job.options.provider,f.detail.error),this.evict(f.detail.job.options.provider)}),l.addEventListener("success",f=>{c=!0,s.resolve(f.detail.result)}),l.addEventListener("idle",()=>{if(c){this.log.trace("session idle, found block");return}if(t.signal?.aborted===!0){this.log.trace("session idle, signal aborted");return}Promise.resolve().then(async()=>{this.log("no session peers had block for for %c, finding new providers",e);for(let f=0;f<this.minProviders&&this.providers.length!==0;f++){let h=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(h)}await this.findProviders(e,this.minProviders,t),this.log("found new providers re-retrieving %c",e),this.requests.delete(n),s.resolve(await this.retrieve(e,t))}).catch(f=>{this.log.error("could not find new providers for %c - %e",e,f),s.reject(f)})});let d=f=>{let h=this.toFilterKey(f.detail);i.queryFilter.has(h)||(i.queryFilter.add(h),this.emitFoundProviderProgressEvent(e,f.detail,t),l.add(async()=>this.queryProvider(e,f.detail,t),{provider:f.detail}).catch(p=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c - %e",e,p)}))};if(this.addEventListener("provider",d),a)try{await Pe(this.initialPeerSearchComplete,t.signal),a&&this.log("found initial session peers for %c",e)}catch(f){throw a&&this.log("failed to find initial session peers for %c - %e",e,f),this.requests.delete(n),i.observers>1&&s.reject(f),f}Promise.all([...this.providers].filter(f=>{let h=this.toFilterKey(f),p=i.queryFilter.has(h);return p||i.queryFilter.add(this.toFilterKey(f)),!p}).map(async f=>l.add(async()=>this.queryProvider(e,f,t),{provider:f}))).catch(f=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c - %e",e,f)});let u=()=>{s.reject(new Ht(t.signal?.reason??"Session aborted")),l.abort()};t.signal?.addEventListener("abort",u);try{return await Pe(s.promise,t.signal)}finally{this.removeEventListener("provider",d),t.signal?.removeEventListener("abort",u),l.clear(),this.requests.delete(n)}}evict(e){this.evictionFilter.add(this.toFilterKey(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.toFilterKey(e))}hasProvider(e){return!!(this.providers.find(t=>this.equals(t,e))!=null||this.isEvicted(e))}async addPeer(e,t){let n=await this.convertToProvider(e,"manually-added",t);n==null||this.hasProvider(n)||(this.providers.push(n),this.safeDispatchEvent("provider",{detail:n}))}async findProviders(e,t,n){let o=fe(),s=0;return Promise.resolve().then(async()=>{if(this.log("finding %d-%d new provider(s) for %c - %d initial providers",t,this.maxProviders,e,this.initialProviders.length),this.initialProviders.length>0)for(;s<t&&this.initialProviders.length>0;){let i=this.initialProviders.pop();if(i==null)break;let a=await this.convertToProvider(i,"manual",n);if(n.signal?.aborted===!0)break;if(a!=null&&!this.hasProvider(a)&&(this.log("found %d/%d new providers",s,this.maxProviders),this.providers.push(a),this.safeDispatchEvent("provider",{detail:a}),s++,s===t&&(this.log("session is ready with %d peer(s), only initial peers present",t),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",s);break}}if(s<this.maxProviders)for await(let i of this.findNewProviders(e,n)){if(s===this.maxProviders||n.signal?.aborted===!0)break;if(!this.hasProvider(i)&&(this.log("found %d/%d new providers",s,this.maxProviders),this.providers.push(i),this.safeDispatchEvent("provider",{detail:i}),s++,s===t&&(this.log("session is ready with %d peer(s), new peers present",t),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",s);break}}if(this.log("found %d/%d new session peers",s,this.maxProviders),s<t)throw new tl(`Found ${s} of ${t} ${this.name} providers for ${e}`)}).catch(i=>{this.log.error("error searching routing for potential session peers for %c - %e",e,i),o.reject(i)}),o.promise}};var Pf=class{libp2p;blockstore;datastore;events;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??e.libp2p.logger,this.log=this.logger.forComponent("helia"),this.getHasher=d9(e.hashers,e.loadHasher),this.getCodec=u9(e.codecs,e.loadCodec),this.dns=e.dns??Uu(),this.metrics=e.metrics,this.libp2p=e.libp2p,this.events=new ie;let t={blockstore:e.blockstore,datastore:e.datastore,logger:this.logger,libp2p:this.libp2p,blockBrokers:[],getHasher:this.getHasher,getCodec:this.getCodec,dns:this.dns,metrics:this.metrics,...e.components??{}};this.routing=t.routing=new sf(t,{routers:(e.routers??[]).flatMap(o=>{typeof o=="function"&&(o=o(t));let s=[o],i=JC(o);i!=null&&s.push(i);let a=ek(o);return a!=null&&s.push(a),s}),providerLookupConcurrency:e.providerLookupConcurrency}),t.blockBrokers=e.blockBrokers.map(o=>o(t));let n=new Rf(t,e);this.pins=new of(e.datastore,n,this.getCodec),this.blockstore=new Sf(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore}async start(){await Yy(this.datastore),await ct(this.blockstore,this.datastore,this.routing,this.libp2p),this.events.dispatchEvent(new CustomEvent("start",{detail:this}))}async stop(){await ut(this.blockstore,this.datastore,this.routing,this.libp2p),this.events.dispatchEvent(new CustomEvent("stop",{detail:this}))}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,o=this.blockstore.unwrap();this.log("gc start"),await er(o.deleteMany((async function*(){for await(let{cid:s}of o.getAll())try{if(await n.pins.isPinned(s,e))continue;yield s,e.onProgress?.(new H("helia:gc:deleted",s))}catch(i){n.log.error("error during gc - %e",i),e.onProgress?.(new H("helia:gc:error",i))}})()))}finally{t()}this.log("gc finished")}};function JC(r){return r?.[Ln]}function ek(r){return r?.[Nn]}function tk(r){return r[Symbol.asyncIterator]!=null}function rk(r,e){let t=0;if(tk(r))return(async function*(){for await(let c of r)yield e(c,t++)})();let n=aa(r),{value:o,done:s}=n.next();if(s===!0)return(function*(){})();let i=e(o,t++);if(typeof i.then=="function")return(async function*(){yield await i;for(let c of n)yield e(c,t++)})();let a=e;return(function*(){yield i;for(let c of n)yield a(c,t++)})()}var Pr=rk;function nk(r){return r[Symbol.asyncIterator]!=null}function ok(r,e){return nk(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 Ko=ok;var cl="/ipfs/bitswap/1.2.0";var Xe;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(Xe||(Xe={}));var z3;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(z3||(z3={}));(function(r){r.codec=()=>ze(z3)})(Xe||(Xe={}));var la;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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),Xe.codec().encode(t.wantType,n)),t.sendDontHave!=null&&(n.uint32(40),n.bool(t.sendDontHave)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={cid:ae(0),priority:0},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.cid=t.bytes();break}case 2:{s.priority=t.int32();break}case 3:{s.cancel=t.bool();break}case 4:{s.wantType=Xe.codec().decode(t);break}case 5:{s.sendDontHave=t.bool();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(la||(la={}));var Lf;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let s of t.entries)n.uint32(10),la.codec().encode(s,n);t.full!=null&&(n.uint32(16),n.bool(t.full)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={entries:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.entries!=null&&s.entries.length===o.limits.entries)throw new Oe('Decode error - map field "entries" had too many elements');s.entries.push(la.codec().decode(t,t.uint32(),{limits:o.limits?.entries$}));break}case 2:{s.full=t.bool();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Lf||(Lf={}));var ua;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={prefix:ae(0),data:ae(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.prefix=t.bytes();break}case 2:{s.data=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(ua||(ua={}));var Lr;(function(r){r.HaveBlock="HaveBlock",r.DoNotHaveBlock="DoNotHaveBlock"})(Lr||(Lr={}));var Df;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DoNotHaveBlock=1]="DoNotHaveBlock"})(Df||(Df={}));(function(r){r.codec=()=>ze(Df)})(Lr||(Lr={}));var da;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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&&Df[t.type]!==0&&(n.uint32(16),Lr.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={cid:ae(0),type:Lr.HaveBlock},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.cid=t.bytes();break}case 2:{s.type=Lr.codec().decode(t);break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(da||(da={}));var Ws;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),Lf.codec().encode(t.wantlist,n)),t.blocks!=null)for(let s of t.blocks)n.uint32(26),ua.codec().encode(s,n);if(t.blockPresences!=null)for(let s of t.blockPresences)n.uint32(34),da.codec().encode(s,n);t.pendingBytes!=null&&t.pendingBytes!==0&&(n.uint32(40),n.int32(t.pendingBytes)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={blocks:[],blockPresences:[],pendingBytes:0},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.wantlist=Lf.codec().decode(t,t.uint32(),{limits:o.limits?.wantlist});break}case 3:{if(o.limits?.blocks!=null&&s.blocks.length===o.limits.blocks)throw new Oe('Decode error - map field "blocks" had too many elements');s.blocks.push(ua.codec().decode(t,t.uint32(),{limits:o.limits?.blocks$}));break}case 4:{if(o.limits?.blockPresences!=null&&s.blockPresences.length===o.limits.blockPresences)throw new Oe('Decode error - map field "blockPresences" had too many elements');s.blockPresences.push(da.codec().decode(t,t.uint32(),{limits:o.limits?.blockPresences$}));break}case 5:{s.pendingBytes=t.int32();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ws||(Ws={}));function p9(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 Nf=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var sk=4193648,ik=sk+16;function*m9(r,e){let t=[...r.wantlist.values()],n=[...r.blockPresences.values()],o=[...r.blocks.values()],s=0,i=0,a=0,c=!1;for(;;){let l={wantlist:{full:r.full??!1,entries:[]},blockPresences:[],blocks:[],pendingBytes:0},d=Ws.encode(l).byteLength,{added:u,hasMore:f,newSize:h}=G3(o,l.blocks,a,e,d,ak);a+=u,d=h;let p=f;({added:u,hasMore:f,newSize:h}=G3(n,l.blockPresences,i,e,d,ck)),i+=u,d=h;let g=f;if({added:u,hasMore:f,newSize:h}=G3(t,l.wantlist.entries,s,e,d,lk),s+=u,d=h,c=!p&&!g&&!f,c||(l.wantlist.full=!1),yield Ws.encode(l),c)break}}function G3(r,e,t,n,o,s){let i=0,a=!1;for(let c=t;c<r.length;c++){let l=r[c],d=s(l);if(d>ik)throw new Nf("Cannot send block as after encoding it is over the max message size");let u=o+d;if(u>n){a=!0;break}e.push(l),i++,o=u}return{hasMore:a,added:i,newSize:o}}function ak(r){return Y3(3,ua.encode(r))}function ck(r){return Y3(4,da.encode(r))}function lk(r){return Y3(1,la.encode(r))}function Y3(r,e){let t=he(r),n=he(e.byteLength);return t+n+e.byteLength}var Of=class extends ie{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??[cl],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 It({concurrency:t.messageSendConcurrency??50,metrics:e.metrics,metricName:"helia_bitswap_message_send_queue"})}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,t){this.running&&Promise.resolve().then(async()=>{this.log("incoming new bitswap %s stream from %p",e.protocol,t.remotePeer);let n=()=>{e.status==="open"?e.abort(new ln(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",e.status)},o=AbortSignal.timeout(this.messageReceiveTimeout);o.addEventListener("abort",n),await e.close({signal:o});let s=St();e.addEventListener("message",i=>{s.push(i.data)}),e.addEventListener("remoteCloseWrite",()=>{s.end()}),e.addEventListener("close",i=>{i.error!=null&&s.end(i.error)});for await(let i of Fs(s,{maxDataLength:this.maxIncomingMessageSize}))try{let a=Ws.decode(i);this.log("incoming new bitswap %s message from %p on stream",e.protocol,t.remotePeer,e.id),this.safeDispatchEvent("bitswap:message",{detail:{peer:t.remotePeer,message:a}}),o.removeEventListener("abort",n),o=AbortSignal.timeout(this.messageReceiveTimeout),o.addEventListener("abort",n)}catch(a){this.log.error("error reading incoming bitswap message from %p on stream - %e",t.remotePeer,e.id,a),e.abort(a);break}}).catch(n=>{this.log.error("error handling incoming stream from %p - %e",t.remotePeer,n),e.abort(n)})}async*findProviders(e,t){t?.onProgress?.(new H("bitswap:find-providers",e));for await(let n of this.routing.findProviders(e,t)){if(!await this.libp2p.isDialable(n.multiaddrs,{runOnLimitedConnection:this.runOnLimitedConnections})){this.log("skipping peer %p as they are not dialable - %a",n.id,n.multiaddrs);continue}t?.onProgress?.(new H("bitswap:found-provider",{type:"bitswap",cid:e,provider:n,routing:n.routing})),yield n}}async findAndConnect(e,t){t?.providers!=null&&await Promise.all(t.providers.map(async n=>this.connectTo(n).catch(o=>{this.log.error("could not connect to supplied provider - %e",o)}))),await er(Pr(Ko(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(s=>e.equals(s.options.peerId)&&s.status==="queued");if(o!=null){o.options.message=p9(o.options.message,t),await o.join({signal:n?.signal});return}await this.sendQueue.add(async s=>{let i=s?.message;if(i==null)throw new A("No message to send");this.log("sendMessage to %p",e),s?.onProgress?.(new H("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,cl,s);await a.closeRead();try{for(let c of m9(i,this.maxOutgoingMessageSize))a.send(Qn.single(c))||await a.onDrain(s);await a.close(s)}catch(c){s?.onProgress?.(new H("bitswap:network:send-wantlist:error",{peer:e,error:c})),this.log.error("error sending message to %p - %e",e,c),a.abort(c)}this._updateSentStats(i.blocks)},{peerId:e,signal:n?.signal,message:t})}async connectTo(e,t){if(!this.running)throw new Mr("Network isn't running");t?.onProgress?.(new H("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),Qt(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(cl))return!0;throw new fi(`${e} did not support ${cl}`)}})]);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)}};var g9=Symbol.for("nodejs.util.inspect.custom"),wk=114,ll=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()})`}[_u]=!0;toString(){return this.string==null&&(this.string=Ne.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return G.createV1(wk,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return ee(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return ee(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[g9](){return`PeerId(${this.toString()})`}},ul=class extends ll{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},dl=class extends ll{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},fl=class extends ll{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},bk=2336,hl=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=ft.digest(C(this.url))}[g9](){return`PeerId(${this.url})`}[_u]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return G.createV1(bk,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=P(e)),e.toString()===this.toString())}};var Ek=114,y9=2336;function Me(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=Re(Ne.decode(`z${r}`));else{if(r.startsWith("k51qzi5uqu5")||r.startsWith("kzwfwjn5ji4")||r.startsWith("k2k4r8")||r.startsWith("bafz"))return Zr(G.parse(r));if(e==null)throw new A('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=Re(e.decode(r))}return Je(t)}function En(r){if(r.type==="Ed25519")return new dl({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new fl({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new ul({multihash:r.toCID().multihash,publicKey:r});throw new Ur}function w9(r){return En(r.publicKey)}function Je(r){if(vk(r))return new ul({multihash:r});if(xk(r))try{let e=nd(r);if(e.type==="Ed25519")return new dl({multihash:r,publicKey:e});if(e.type==="secp256k1")return new fl({multihash:r,publicKey:e})}catch{let t=P(r.digest);return new hl(new URL(t))}throw new yo("Supplied PeerID Multihash is invalid")}function Zr(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==Ek&&r.code!==y9)throw new vu("Supplied PeerID CID is invalid");if(r.code===y9){let e=P(r.multihash.digest);return new hl(new URL(e))}return Je(r.multihash)}function xk(r){return r.code===ft.code}function vk(r){return r.code===Ge.code}function zs(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 Bf(r){let e=Re(Ne.decode(`z${r}`));return Je(e)}var Ft=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 zs(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 zs(this.map.values(),e=>e.key)}values(){return zs(this.map.values(),e=>e.value)}get size(){return this.map.size}};var xr=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 zs(this.set.entries(),e=>{let t=Bf(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=Bf(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return zs(this.set.values(),e=>Bf(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 X3(){return new xr}var Mf=class{filter;constructor(e,t){this.filter=xt(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 Q3(r,e=.001){return new Mf(r,e)}var j3=class extends Ft{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 Jn(r){let{name:e,metrics:t}=r,n;return t!=null?n=new j3({name:e,metrics:t}):n=new Ft,n}var eo=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 Sk(r){let e=new Uint8Array(r.reduce((n,o)=>n+he(o),0)),t=0;for(let n of r)e=Mt(n,e,t),t+=he(n);return e}var b9=Sk;function Z3(r){return b9([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var Uf=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;log;doNotResendBlockWindow;maxWantListSize;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,this.doNotResendBlockWindow=t.doNotResendBlockWindow??5e3,this.maxWantListSize=t.maxWantListSize??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)}removeExpiredWants(){this.wants.forEach((e,t)=>{e.expires!=null&&e.expires<Date.now()&&this.wants.delete(t)})}addWants(e){if(e==null)return;e.full===!0&&this.wants.forEach((n,o)=>{n.status==="want"&&this.wants.delete(o)});for(let n of e.entries){let o=G.decode(n.cid),s=P(o.multihash.bytes,"base64");if(n.cancel===!0)this.log("peer %p cancelled want of block for %c",this.peerId,o),this.wants.delete(s);else{n.wantType===Xe.WantHave?this.log("peer %p wanted block presence for %c",this.peerId,o):this.log("peer %p wanted block for %c",this.peerId,o);let i=this.wants.get(s);if(i!=null){let a=i.status==="sent"||i.status==="sending",c=i.wantType===Xe.WantHave&&(n.wantType==null||n.wantType===Xe.WantBlock);a&&c&&(i.status="want"),i.priority=n.priority,i.wantType=n.wantType??Xe.WantBlock,i.sendDontHave=n.sendDontHave??!1;continue}this.wants.set(s,{cid:o,priority:n.priority,wantType:n.wantType??Xe.WantBlock,sendDontHave:n.sendDontHave??!1,status:"want",created:Date.now()})}}let t=[...this.wants.entries()].filter(([n,o])=>o.status==="want");t.length>this.maxWantListSize&&this.truncateWants(t)}truncateWants(e){e=e.sort((n,o)=>n[1].created<o[1].created?-1:o[1].created<n[1].created?1:0).sort((n,o)=>n[1].haveBlock===!1?-1:o[1].haveBlock===!1?1:0).sort((n,o)=>n[1].priority<o[1].priority?-1:o[1].priority<n[1].priority?1:0);let t=e.length-this.maxWantListSize;for(let n=0;n<t;n++)this.wants.delete(e[n][0])}getWants(){return[...this.wants.values()]}hasWant(e){let t=P(e.multihash.bytes,"base64");return this.wants.has(t)}async sendBlocksToPeer(e){let t=new eo,n=new Set;this.removeExpiredWants();let o=[...this.wants.entries()].filter(([s,i])=>i.status==="want");o.forEach(([s,i])=>{i.status="sending"});for(let[s,i]of o)try{let a=await jd(this.blockstore.get(i.cid,e));if(i.status!=="sending")continue;i.wantType===Xe.WantHave?a.byteLength<this.maxSizeReplaceHasWithBlock?(this.log("sending have and block for %c",i.cid),n.add(s),t.addBlock(i.cid,{data:a,prefix:Z3(i.cid)})):(this.log("sending have for %c",i.cid),t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Lr.HaveBlock})):(this.log("sending block for %c",i.cid),n.add(s),t.addBlock(i.cid,{data:a,prefix:Z3(i.cid)})),i.status="sent",i.expires=Date.now()+this.doNotResendBlockWindow}catch(a){if(a.name!=="NotFoundError")throw a;if(i.status="want",i.haveBlock=!1,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:Lr.DoNotHaveBlock})}(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((s,i)=>s+i.data.byteLength,0)))}};var Ff=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;doNotResendBlockWindow;maxWantListSize;log;logger;constructor(e,t={}){this.blockstore=e.blockstore,this.network=e.network,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock,this.doNotResendBlockWindow=t.doNotResendBlockWindow,this.maxWantListSize=t.maxWantListSize,this.log=e.logger.forComponent("helia:bitswap:peer-want-lists"),this.logger=e.logger,this.ledgerMap=Jn({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 - %e",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.removeExpiredWants(),t.getWants()}peers(){return Array.from(this.ledgerMap.values()).map(e=>e.peerId)}async receiveMessage(e,t){let n=this.ledgerMap.get(e);n==null&&(n=new Uf({peerId:e,blockstore:this.blockstore,network:this.network,logger:this.logger},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock,doNotResendBlockWindow:this.doNotResendBlockWindow,maxWantListSize:this.maxWantListSize}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((o,s)=>o+s.data.byteLength,0)??0),n.removeExpiredWants(),n.addWants(t.wantlist),this.log("send blocks to peer"),await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=[];for(let o of this.ledgerMap.values())o.hasWant(e)&&n.push(o);await Promise.all(n.map(async o=>o.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};var J3=class extends qs{name="bitswap-session";wantList;network;libp2p;constructor(e,t){super(e,{...t,name:"helia:bitswap:session"}),this.wantList=e.wantList,this.network=e.network,this.libp2p=e.libp2p}async queryProvider(e,t,n){this.log("sending WANT-BLOCK for %c to %p",e,t);let o=await this.wantList.wantSessionBlock(e,t.peerId,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{peerId:n.id,routing:n.routing,toString:()=>`Bitswap(${n.id})`}}toFilterKey(e){return e.peerId.toMultihash().bytes}equals(e,t){return e.peerId.equals(t.peerId)}async convertToProvider(e,t,n){if(Lt(e))return{peerId:e,routing:t,toString:()=>`Bitswap(${e})`};if(await this.libp2p.isDialable(e)!==!1)try{let o=await this.libp2p.dial(e,n);return{peerId:o.remotePeer,routing:t,toString:()=>`Bitswap(${o.remotePeer})`}}catch{}}emitFoundProviderProgressEvent(e,t,n){n?.onProgress?.(new H("bitswap:found-provider",{type:"bitswap",cid:e,provider:{id:t.peerId,multiaddrs:[],routing:t.routing},routing:t.routing}))}};function E9(r,e){return new J3(r,e)}var $f=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)}};function Ak(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=hr(r);e.push(t),r=r.slice(he(t))}return e}var x9=Ak;var Kf=class extends ie{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),this.peers=Jn({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=st({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 - %e",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 - %e",n.detail,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}async addEntry(e,t){let n=P(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,priority:t.priority??1,wantType:t.wantType??Xe.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,o)),o.wantType===Xe.WantHave&&t.wantType===Xe.WantBlock&&(o.wantType=Xe.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===Xe.WantBlock?(await Qt(this,"block",t?.signal,{filter:a=>ee(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await Qt(this,"presence",t?.signal,{filter:i=>ee(e.multihash.digest,i.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",e)})},this.sendMessagesDelay)}async sendMessages(){this.sendingMessages=fe(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new eo;for(let[s,i]of this.wants.entries())t.has(s)||i.cancel||(n.add(s),o.addWantlistEntry(i.cid,{cid:i.cid.bytes,priority:i.priority,wantType:i.wantType,cancel:i.cancel,sendDontHave:i.sendDontHave}));if(o.wantlist.size!==0)try{await this.network.sendMessage(e,o);for(let s of n)t.add(s)}catch(s){this.log.error("error sending full wantlist to new peer - %e",s)}})).catch(e=>{this.log.error("error sending messages - %e",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=P(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new eo;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Xe.WantHave,priority:1}),await this.network.sendMessage(t,o),(await Qt(this,"presence",n.signal,{filter:i=>t.equals(i.detail.sender)&&ee(e.multihash.digest,i.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:Xe.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new eo;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Xe.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await Qt(this,"presence",n.signal,{filter:i=>t.equals(i.detail.sender)&&ee(e.multihash.digest,i.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=P(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 s=x9(o.prefix),i=s[0],a=s[1],c=s[2],l=s[3],d=c===Ge.code?Ge:await this.hashLoader?.getHasher(c);if(d==null){this.log.error("unknown hash algorithm",c);continue}let u=d.digest(o.data,{truncate:l});u.then!=null&&(u=await u);let f=G.create(i===0?0:1,a,u);this.log("received block from %p for %c",e,f),this.safeDispatchEvent("block",{detail:{sender:e,cid:f,block:o.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:f,has:!0,block:o.data}});let h=P(f.multihash.bytes,"base64"),p=this.wants.get(h);p!=null&&(p.cancel=!0,n=!0)}for(let{cid:o,type:s}of t.blockPresences){let i=G.decode(o);this.log("received %s from %p for %c",s,e,i),this.safeDispatchEvent("presence",{detail:{sender:e,cid:i,has:s===Lr.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new eo(!0);for(let[o,s]of this.wants.entries())s.cancel||(t.add(o),n.addWantlistEntry(s.cid,{cid:s.cid.bytes,priority:1,wantType:Xe.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",e,o)}}peerDisconnected(e){this.peers.delete(e)}start(){}stop(){this.peers.clear(),clearTimeout(this.sendMessagesTimeout)}};var Vf=class{log;logger;stats;network;blockstore;peerWantLists;wantList;libp2p;constructor(e,t={}){this.logger=e.logger,this.log=e.logger.forComponent("helia:bitswap"),this.blockstore=e.blockstore,this.libp2p=e.libp2p,this.stats=new $f(e),this.network=new Of(e,t),this.peerWantLists=new Ff({...e,network:this.network},t),this.wantList=new Kf({...e,network:this.network},t)}createSession(e={}){return E9({wantList:this.wantList,network:this.network,logger:this.logger,libp2p:this.libp2p},e)}async want(e,t={}){let n=new AbortController,o=le([n.signal,t.signal]);n.signal,this.network.findAndConnect(e,{...t,signal:o}).catch(s=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c - %e",e,s)});try{let s=await this.wantList.wantBlock(e,{...t,signal:o});return t.onProgress?.(new H("bitswap:block",{cid:e,sender:s.sender})),s.block}finally{n.abort(),o.clear()}}async notify(e,t={}){await Promise.all([this.peerWantLists.receivedBlock(e,t),this.wantList.receivedBlock(e,t)])}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 v9=(r,e={})=>new Vf(r,e);var eg=class{name="bitswap";bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=v9(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){await this.bitswap.notify(e,t)}async retrieve(e,t={}){return this.bitswap.want(e,t)}createSession(e){let t=this.bitswap.createSession(e);return{name:"bitswap-session",addPeer:async(n,o)=>{await t.addPeer(n,o)},announce:async(n,o)=>{await this.bitswap.notify(n,o)},retrieve:async(n,o)=>t.retrieve(n,o)}}};function tg(r={}){return e=>new eg(e,r)}var Tk=[6,53,56,54,55];function S9(r){return I9("sni",r)?.value}function A9(r){let e=I9("tcp",r)?.value;return e==null?"":`:${e}`}function I9(r,e){return e.find(t=>t.name===r)}function T9(r){return r.some(({code:e})=>e===448)}function Jr(r,e){let t=_9[r.name];if(t==null)throw new Error(`Can't interpret protocol ${r.name}`);let n=t(r,e);return r.code===41?`[${n}]`:n}var _9={ip4:(r,e)=>r.value,ip6:(r,e)=>e.length===0?r.value:`[${r.value}]`,tcp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`tcp://${Jr(t,e)}:${r.value}`},udp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`udp://${Jr(t,e)}:${r.value}`},dnsaddr:(r,e)=>r.value,dns4:(r,e)=>r.value,dns6:(r,e)=>r.value,dns:(r,e)=>r.value,ipfs:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${Jr(t,e)}`},p2p:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${Jr(t,e)}`},http:(r,e)=>{let t=T9(e),n=S9(e),o=A9(e);if(t&&n!=null)return`https://${n}${o}`;let s=t?"https://":"http://",i=e.pop();if(i==null)throw new Error("Unexpected end of multiaddr");let a=Jr(i,e);return a=a?.replace("tcp://",""),`${s}${a}`},"http-path":(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Jr(t,e),o=decodeURIComponent(r.value??"");return`${n}${o}`},tls:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return Jr(t,e)},sni:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return Jr(t,e)},https:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Jr(t,e);return n=n?.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=T9(e),n=S9(e),o=A9(e);if(t&&n!=null)return`wss://${n}${o}`;let s=t?"wss://":"ws://",i=e.pop();if(i==null)throw new Error("Unexpected end of multiaddr");let a=Jr(i,e);return a=a?.replace("tcp://",""),`${s}${a}`},wss:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Jr(t,e);return n=n?.replace("tcp://",""),`wss://${n}`}};function Vo(r,e){let n=q(r).getComponents(),o=n.pop();if(o==null)throw new Error("Unexpected end of multiaddr");let s=_9[o.name];if(s==null)throw new Error(`No interpreter found for ${o.name}`);let i=s(o,n)??"";return e?.assumeHttp!==!1&&Tk.includes(o.code)&&(i=i.replace(/^.*:\/\//,""),o.value==="443"?i=`https://${i}`:i=`http://${i}`),(i.startsWith("http://")||i.startsWith("https://")||i.startsWith("ws://")||i.startsWith("wss://"))&&(i=new URL(i).toString(),i.endsWith("/")&&(i=i.substring(0,i.length-1))),i}var Ce=r=>({match:e=>{let t=e[0];return t==null||t.code!==r||t.value!=null?!1:e.slice(1)}}),se=(r,e)=>({match:t=>{let n=t[0];return n?.code!==r||n.value==null||e!=null&&n.value!==e?!1:t.slice(1)}}),C9=r=>({match:e=>r.match(e)===!1?e:!1}),ge=r=>({match:e=>{let t=r.match(e);return t===!1?e:t}}),$t=(...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}}),Se=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e}});function ke(...r){function e(o){if(o==null)return!1;let s=o.getComponents();for(let i of r){let a=i.match(s);if(a===!1)return!1;s=a}return s}function t(o){return e(o)!==!1}function n(o){let s=e(o);return s===!1?!1:s.length===0}return{matchers:r,matches:t,exactMatch:n}}var Ik=se(421),k9=ke(Ik),qf=se(54),Wf=se(55),zf=se(56),ng=se(53),JX=ke(qf,ge(se(421))),eQ=ke(Wf,ge(se(421))),tQ=ke(zf,ge(se(421))),Gf=ke($t(ng,zf,qf,Wf),ge(se(421))),R9=Se(se(4),ge(se(43))),P9=Se(ge(se(42)),se(41),ge(se(43))),og=$t(R9,P9),Gs=$t(og,ng,qf,Wf,zf),L9=ke($t(og,Se($t(ng,zf,qf,Wf),ge(se(421))))),sg=ke(R9),ig=ke(P9),D9=ke(og),ag=Se(Gs,se(6)),pl=Se(Gs,se(273)),Ys=ke(Se(ag,ge(se(421)))),rQ=ke(pl),cg=Se(pl,Ce(460),ge(se(421))),Yf=Se(pl,Ce(461),ge(se(421))),_k=$t(cg,Yf),nQ=ke(cg),N9=ke(Yf),rg=$t(Gs,ag,pl,cg,Yf),O9=$t(Se(rg,Ce(477),ge(se(421)))),to=ke(O9),B9=$t(Se(rg,Ce(478),ge(se(421))),Se(rg,Ce(448),ge(se(449)),Ce(477),ge(se(421)))),Xs=ke(B9),M9=Se(pl,Ce(280),ge(se(466)),ge(se(466)),ge(se(421))),ml=ke(M9),U9=Se(Yf,Ce(465),ge(se(466)),ge(se(466)),ge(se(421))),lg=ke(U9),Hf=$t(O9,B9,Se(ag,ge(se(421))),Se(_k,ge(se(421))),Se(Gs,ge(se(421))),M9,U9,se(421)),fa=ke(Hf),Ck=Se(ge(Hf),Ce(290),C9(Ce(281)),ge(se(421))),wt=ke(Ck),kk=$t(Se(Hf,Ce(290),Ce(281),ge(se(421))),Se(Hf,Ce(281),ge(se(421))),Se(Ce(281),ge(se(421)))),gl=ke(kk),Rk=$t(Se(Gs,se(6),Ce(480),ge(se(421))),Se(Gs,Ce(480),ge(se(421)))),F9=ke(Rk),Pk=Se(Gs,$t(Se(se(6,"443"),Ce(480)),Se(se(6),Ce(443)),Se(se(6),Ce(448),Ce(480)),Se(Ce(448),Ce(480)),Ce(448),Ce(443)),ge(se(421))),$9=ke(Pk),Lk=$t(Se(se(777),ge(se(421)))),oQ=ke(Lk),Dk=$t(Se(se(400),ge(se(421)))),sQ=ke(Dk);function ug(r,e,t){return r.filter(n=>{if($9.matches(n)||e&&F9.matches(n))return t||Gf.matches(n)?!0:Ze(n)===!1;if(!e&&t){let{host:o}=oe(n);if(o==="127.0.0.1"||o==="localhost"||o.endsWith(".localhost"))return!0}return!1})}async function*Xf(r,e,t,n,o,s={}){for await(let i of e.findProviders(r,s)){let a=ug(i.multiaddrs,n,o);if(a.length===0)continue;let c=new URL(Vo(a[0]));yield new ha(c,{logger:t,transformRequestInit:s.transformRequestInit,routing:i.routing})}}async function K9(r,e,t){let{signal:n,log:o}=t??{},s=r.headers.get("content-length");if(s!=null){let c=parseInt(s,10);if(c>e)throw o?.error("content-length header (%d) is greater than the limit (%d)",c,e),r.body!=null&&await r.body.cancel().catch(l=>{o?.error("error cancelling response body after content-length check - %e",l)}),new Error(`Content-Length header (${c}) is greater than the limit (${e}).`)}let i=r.body?.getReader();if(i==null)throw new Error("Response body is not readable");let a=new Q;try{for(;;){if(n?.aborted===!0)throw new Error("Response body read was aborted.");let{done:c,value:l}=await i.read();if(c)break;if(a.append(l),a.byteLength>e)throw new Error(`Response body is greater than the limit (${e}), received ${a.byteLength} bytes.`)}}finally{i.cancel().catch(c=>{o?.error("error cancelling reader - %e",c)}).finally(()=>{i.releaseLock()})}return a.subarray()}var ha=class{url;#e=0;#t=0;#r=0;#a=0;#c=new Map;log;transformRequestInit;routing;constructor(e,{logger:t,transformRequestInit:n,routing:o}){this.url=e instanceof URL?e:new URL(e),this.transformRequestInit=n,this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.host}`),this.routing=o}#m(e){let t=e.multihash.bytes;return nt.encode(t)}async getRawBlock(e,{signal:t,maxSize:n=V9}={}){let o=new URL(this.url.toString());if(o.pathname=`/ipfs/${e.toString()}`,o.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 s=this.#m(e),i=new AbortController,a=()=>{i.abort()};t?.addEventListener("abort",a);try{let c=this.#c.get(s);if(c==null){this.#e++;let l={signal:i.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"},d=this.transformRequestInit!=null?await this.transformRequestInit(l):l,u=new Headers(d.headers);this.log(`sending request
13
+ ${e}[Error list was empty]`,t.trim()}return ex(r,e)}br.formatters.e=r=>r==null?"undefined":rx(r);function XD(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 mc(r){return{forComponent(e){return on(e,r)}}}function on(r,e){let t=XD(`${r}:trace`);return br.enabled(`${r}:trace`)&&br.names.map(n=>n.toString()).find(n=>n.includes(":trace"))!=null&&(t=br(`${r}:trace`,e)),Object.assign(br(r,e),{error:br(`${r}:error`,e),trace:t,newScope:n=>on(`${r}:${n}`,e)})}function tx(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var nx=Symbol.for("sindresorhus/unlimited-timeout#brand");function ox(r,e,...t){if(typeof r!="function")throw new TypeError("Expected callback to be a function");e??=0,e=Number(e);let n=!1,o={[nx]:!0,id:void 0,cleared:!1,ref(){return n=!1,o.id?.ref?.(),o},unref(){return n=!0,o.id?.unref?.(),o}};if(e===Number.POSITIVE_INFINITY||e>Number.MAX_SAFE_INTEGER)return o;(!Number.isFinite(e)||e<0)&&(e=0);let i=performance.now()+e,s=a=>{o.cleared||(a<=2147483647?(o.id=globalThis.setTimeout(()=>{o.cleared||r(...t)},a),n&&o.id?.unref?.()):(o.id=globalThis.setTimeout(()=>{let c=performance.now(),l=Math.max(0,i-c);s(l)},2147483647),n&&o.id?.unref?.()))};return s(e),o}function ix(r){!r||typeof r!="object"||!r[nx]||(r.cleared=!0,r.id!==void 0&&(globalThis.clearTimeout(r.id),r.id=void 0))}var QD=new WeakMap;function ZD({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(o.reason);let i,s,a,c=r??clearTimeout,l=()=>{c(i),a(o.reason)},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}),QD.set(d,()=>{c(i),i=null,s()}),d}}var JD=ZD({setTimeout:ox,clearTimeout:ix}),sx=JD;var Ht=class extends Vt{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};var Gh=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})}};var gc=class{memoryStorage;points;duration;blockDuration;keyPrefix;constructor(e={}){this.points=e.points??4,this.duration=e.duration??1,this.blockDuration=e.blockDuration??0,this.keyPrefix=e.keyPrefix??"rlflx",this.memoryStorage=new F4}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 lh("Rate limit exceeded",s);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)}},F4=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}};function yc(r,e,t){let n,o,i=!1;function s(){let l={signal:o.signal},u;t?.timeout!=null&&(u=we([o.signal,AbortSignal.timeout(t.timeout)]),l.signal=u),i=!0,Promise.resolve().then(async()=>{await r(l)}).catch(()=>{}).finally(()=>{u!=null&&(u.aborted?u.clear():u.addEventListener("abort",()=>{u.clear()},{once:!0})),i=!1,!o.signal.aborted&&(n=setTimeout(s,e))})}let a=Po(s,t?.debounce??100),c=!1;return{setInterval:l=>{e!==l&&(e=l,n!=null&&(clearTimeout(n),n=setTimeout(s,e)))},setTimeout:l=>{t??={},t.timeout=l},run:()=>{i||(clearTimeout(n),a())},start:()=>{c||(c=!0,o=new AbortController,o.signal,t?.runImmediately===!0?queueMicrotask(()=>{s()}):n=setTimeout(s,e))},stop:()=>{clearTimeout(n),o?.abort(),c=!1}}}var $4=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 wt(r){let{name:e,metrics:t}=r,n;return t!=null?n=new $4({name:e,metrics:t}):n=new Map,n}var Fo="/",ax=new TextEncoder().encode(Fo),jh=ax[0],Ze=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=C(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]!==jh)throw new Error("Invalid key")}toString(e="utf8"){return N(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Fo))}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=ax),this._buf[0]!==jh){let e=new Uint8Array(this._buf.byteLength+1);e.fill(jh,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===jh;)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(Fo).slice(1)}type(){return eN(this.baseNamespace())}name(){return tN(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Fo)||(e+=Fo),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Fo):new r(e.slice(0,-1).join(Fo))}child(e){return this.toString()===Fo?e:e.toString()===Fo?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(),...rN(e.map(t=>t.namespaces()))])}};function eN(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function tN(r){let e=r.split(":");return e[e.length-1]}function rN(r){return[].concat(...r)}function nN(r){return r[Symbol.asyncIterator]!=null}function oN(r){if(nN(r))return(async()=>{let n=new Uint8Array(0);for await(let o of r)n=Ye([n,o],n.length+o.length);return n})();let e=[],t=0;for(let n of r)e.push(n),t+=n.byteLength;return Ye(e,t)}var Yh=oN;function Xh({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*iN(r,e){if(e!=null&&typeof e=="object")if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t],i=Z.asCID(n);i!=null?yield[o.join("/"),i]:typeof n=="object"&&(yield*V4(n,o))}else{let t=Z.asCID(e);t!=null?yield[r.join("/"),t]:yield*V4(e,r)}}function*V4(r,e){if(r==null||r instanceof Uint8Array)return;let t=Z.asCID(r);t!=null&&(yield[e.join("/"),t]);for(let[n,o]of Object.entries(r)){let i=[...e,n];yield*iN(i,o)}}function*sN(r,e){if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t];yield o.join("/"),typeof n=="object"&&Z.asCID(n)==null&&(yield*K4(n,o))}else yield*K4(e,r)}function*K4(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"&&Z.asCID(n)==null&&(yield*sN(o,n))}}function aN(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=Z.asCID(t);if(i!=null)return{value:i,remaining:e.slice(n+1).join("/")}}return{value:t}}var H4=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:Xh(),bytes:Xh(),value:Xh(),asBlock:Xh()})}links(){return V4(this.value,[])}tree(){return K4(this.value,[])}get(e="/"){return aN(this.value,e.split("/").filter(Boolean))}};function cx({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 H4({cid:e,bytes:r,value:o})}var Qh=class extends Error{static name="AlreadyPinnedError";name="AlreadyPinnedError"},xu=class extends Error{static name="BlockPinnedError";name="BlockPinnedError"},Zh=class extends Error{static name="InvalidDatastoreVersionError";name="InvalidDatastoreVersionError"},Hs=class extends Error{static name="InvalidConfigurationError";name="InvalidConfigurationError"},Jh=class extends AggregateError{static name="GetFailedError";name="GetFailedError"},e1=class extends AggregateError{static name="LoadBlockFailedError";name="LoadBlockFailedError"},Eu=class extends Error{static name="BlockNotFoundWhileOfflineError";name="BlockNotFoundWhileOfflineError"};var dx="/pin/",lx="/pinned-block/",q4=Jr,ux=1;function t1(r){return r.version===0&&(r=r.toV1()),new Ze(`${dx}${r.toString(q4)}`)}var r1=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=t1(e);if(await this.datastore.has(n))throw new Qh("Already pinned");let o=Math.round(t.depth??1/0);if(o<0)throw new _("Depth must be greater than or equal to 0");let i=new Vt({concurrency:ux});for await(let a of this.#e(e,i,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>se(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,fc(s),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=await this.getCodec(e.code),i=await Yh(this.blockstore.get(e,n)),s=cx({bytes:i,cid:e,codec:o});yield e;for(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 Ze(`${lx}${q4.encode(e.multihash.bytes)}`),i={pinCount:0,pinnedBy:[]};try{i=Mo(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,fc(i),n),n.onProgress?.(new O("helia:pin:add",e))}}async*rm(e,t={}){let n=t1(e),o=await this.datastore.get(n,t),i=Mo(o);await this.datastore.delete(n,t);let s=new Vt({concurrency:ux});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=>se(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:dx+(e.cid!=null?`${e.cid.toString(Jr)}`:"")},e)){let o=Z.parse(t.toString().substring(5),Jr),i=Mo(n);yield{cid:o,...i}}}async isPinned(e,t={}){let n=new Ze(`${lx}${q4.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=t1(e),o=await this.datastore.get(n,t);return Mo(o)}async setMetadata(e,t,n){let o=t1(e),i=await this.datastore.get(o,n),s=Mo(i);s.metadata=t??{},await this.datastore.put(o,fc(s),n)}};var z4=1,W4=5,G4=100;var vu=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},Ci=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},Su=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},Au=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}},j4=class extends Error{static name="InvalidCodecError";constructor(e="Invalid codec"){super(e),this.name="InvalidCodecError"}};var cN=5,n1=class{name;log;routers;providerLookupConcurrency;constructor(e,t){this.name="helia",this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??cN,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 Et(...this.routers)}async stop(){await Tt(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new Ci("No content routers available");let n=new Ht({concurrency:this.providerLookupConcurrency}),o=0,i=[],s=this,a=0;this.log("findProviders for %c start using routers %s",e,this.routers.map(l=>l.toString()).join(", "));let c=qs(this.routers,"findProviders").map(async function*(l){let u=0;t?.onProgress?.(new O("helia:routing:find-providers:start",{routing:l.name,cid:e}));try{for await(let d of l.findProviders(e,t))u++,t?.onProgress?.(new O("helia:routing:find-providers:provider",{routing:l.name,cid:e,provider:d})),yield d}catch(d){i.push(d)}finally{s.log("router %s found %d providers for %c",l,u,e),t?.onProgress?.(new O("helia:routing:find-providers:end",{routing:l.name,cid:e,found:u})),a++,a===c.length&&n.size===0&&n.emitIdle()}});for await(let l of fr(n.toGenerator(),...c))if(l!=null){if(l.multiaddrs.length===0){if(n.find(l.id)!=null)continue;n.add(async()=>{try{let u=await this.findPeer(l.id,t);return u.multiaddrs.length===0?null:{...u,protocols:l.protocols,routing:l.routing}}catch(u){return this.log.error("could not load multiaddrs for peer %p - %e",l.id,u),null}},{peerId:l.id,signal:t.signal}).catch(u=>{this.log.error("could not load multiaddrs for peer %p - %e",l.id,u)});continue}o++,yield l}this.log("findProviders finished, found %d providers for %c",o,e)}async provide(e,t={}){if(this.routers.length===0)throw new Ci("No content routers available");await Promise.all(qs(this.routers,"provide").map(async n=>{t?.onProgress?.(new O("helia:routing:provide:start",{routing:n.name,cid:e})),await n.provide(e,t),t?.onProgress?.(new O("helia:routing:provide:end",{routing:n.name,cid:e}))}))}async cancelReprovide(e,t={}){await Promise.all(qs(this.routers,"cancelReprovide").map(async n=>{t?.onProgress?.(new O("helia:routing:cancel-reprovide:start",{routing:n.name,cid:e})),await n.cancelReprovide(e,t),t?.onProgress?.(new O("helia:routing:cancel-reprovide:end",{routing:n.name,cid:e}))}))}async put(e,t,n){await Promise.all(qs(this.routers,"put").map(async o=>{n?.onProgress?.(new O("helia:routing:put:start",{routing:o.name,key:e,value:t})),await o.put(e,t,n),n?.onProgress?.(new O("helia:routing:put:end",{routing:o.name,key:e,value:t}))}))}async get(e,t){let n=[],o;try{o=await Promise.any(qs(this.routers,"get").map(async i=>{t?.onProgress?.(new O("helia:routing:get:start",{routing:i.name,key:e}));try{return await i.get(e,t)}catch(s){this.log("router %s failed with %e",i,s),n.push(s)}finally{t?.onProgress?.(new O("helia:routing:get:end",{routing:i.name,key:e}))}}))}catch{}if(o==null)throw new Jh(n,`Failed to get value key ${N(e,"base58btc")}`);return o}async findPeer(e,t){if(this.routers.length===0)throw new Ci("No peer routers available");let n=this,o=fr(...qs(this.routers,"findPeer").map(i=>(async function*(){t?.onProgress?.(new O("helia:routing:find-peer:start",{routing:i.name,peerId:e}));try{yield await i.findPeer(e,t)}catch(s){n.log.error(s)}finally{t?.onProgress?.(new O("helia:routing:find-peer:end",{routing:i.name,peerId:e}))}})()));for await(let i of o)if(i!=null)return i;throw new We("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Ci("No peer routers available");for await(let n of fr(...qs(this.routers,"getClosestPeers").map(async function*(o){t?.onProgress?.(new O("helia:routing:get-closest-peers:start",{routing:o.name,key:e}));try{yield*o.getClosestPeers(e,t)}finally{t?.onProgress?.(new O("helia:routing:get-closest-peers:end",{routing:o.name,key:e}))}})))n!=null&&(yield n)}};function qs(r,e){return r.filter(t=>t[e]!=null)}var Br=class extends Error{static name="AbortError";name="AbortError";constructor(e="The operation was aborted",...t){super(e,...t)}};async function hr(r,e,t,n){let o=new Br(n?.errorMessage);n?.errorCode!=null&&(o.code=n.errorCode);let i=n?.errorEvent??"error";return t?.aborted===!0?Promise.reject(o):new Promise((s,a)=>{function c(){X4(t,"abort",d),X4(r,e,l),X4(r,i,u)}let l=f=>{try{if(n?.filter?.(f)===!1)return}catch(h){c(),a(h);return}c(),s(f)},u=f=>{if(c(),f instanceof Error){a(f);return}a(f.detail??n?.error??new Error(`The "${n?.errorEvent}" event was emitted but the event had no '.detail' field. Pass an 'error' option to race-event to change this message.`))},d=()=>{c(),a(o)};Y4(t,"abort",d),Y4(r,e,l),Y4(r,i,u)})}function Y4(r,e,t){r!=null&&(fx(r)?r.addEventListener(e,t):r.addListener(e,t))}function X4(r,e,t){r!=null&&(fx(r)?r.removeEventListener(e,t):r.removeListener(e,t))}function fx(r){return typeof r.addEventListener=="function"&&typeof r.removeEventListener=="function"}var o1=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var i1=class{deferred;signal;constructor(e){this.signal=e,this.deferred=Promise.withResolvers(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new Br)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function lN(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var s1=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=lN(),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 Br),this.cleanup())}async join(e={}){let t=new i1(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 qe(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)})}};function Q4(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 Tu=class extends ue{concurrency;maxSize;queue;pending;sort;autoStart;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,this.autoStart=e.autoStart??!0,this.sort=e.sort,this.queue=[],this.emitEmpty=Q4(this.emitEmpty.bind(this),1),this.emitIdle=Q4(this.emitIdle.bind(this),1)}[Symbol.asyncIterator](){return this.toGenerator()}emitEmpty(){this.size===0&&this.safeDispatchEvent("empty")}emitIdle(){this.running===0&&this.safeDispatchEvent("idle")}tryToStartAnother(){if(this.size===0)return this.emitEmpty(),this.running===0&&this.emitIdle(),!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.safeDispatchEvent("next"),this.autoStart&&this.tryToStartAnother()}),!0)}return!1}enqueue(e){this.queue.push(e),this.sort!=null&&this.queue.sort(this.sort)}start(){this.autoStart===!1&&(this.autoStart=!0,this.tryToStartAnother())}pause(){this.autoStart=!1}async add(e,t){if(t?.signal?.throwIfAborted(),this.size===this.maxSize)throw new o1;let n=new s1(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.autoStart&&this.tryToStartAnother(),n.join(t).then(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("failure",{detail:{job:n,error:o}}),o})}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new Br)}),this.clear()}async onEmpty(e){this.size!==0&&await hr(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await hr(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await hr(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=$t({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail.result)},i=c=>{n(c.detail.error)},s=()=>{n()},a=()=>{n(new Br("Queue aborted"))};this.addEventListener("success",o),this.addEventListener("failure",i),this.addEventListener("idle",s),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("success",o),this.removeEventListener("failure",i),this.removeEventListener("idle",s),e?.signal?.removeEventListener("abort",a),n()}}};var a1="lock:worker:request-read",c1="lock:worker:abort-read-request",l1="lock:worker:release-read",u1="lock:master:grant-read",d1="lock:master:error-read",f1="lock:worker:request-write",h1="lock:worker:abort-write-request",p1="lock:worker:release-write",m1="lock:master:grant-write",g1="lock:master:error-write",y1="lock:worker:finalize",w1="mortice",hx={singleProcess:!1};var Z4=(r,e,t,n,o,i,s,a,c)=>l=>{if(l.data==null)return;let u={type:l.data.type,name:l.data.name,identifier:l.data.identifier};u.type===o&&r.safeDispatchEvent(t,{detail:{name:u.name,identifier:u.identifier,handler:async()=>{e.postMessage({type:c,name:u.name,identifier:u.identifier}),await new Promise(d=>{let f=h=>{if(h?.data==null)return;let p={type:h.data.type,name:h.data.name,identifier:h.data.identifier};p.type===a&&p.identifier===u.identifier&&(e.removeEventListener("message",f),d())};e.addEventListener("message",f)})},onError:d=>{e.postMessage({type:s,name:u.name,identifier:u.identifier,error:{message:d.message,name:d.name,stack:d.stack}})}}}),u.type===i&&r.safeDispatchEvent(n,{detail:{name:u.name,identifier:u.identifier}}),u.type===y1&&r.safeDispatchEvent("finalizeRequest",{detail:{name:u.name}})};var px=(r=10)=>Math.random().toString().substring(2,r+2);var b1=class{name;channel;constructor(e){this.name=e,this.channel=new BroadcastChannel(w1)}readLock(e){return this.sendRequest(a1,c1,u1,d1,l1,e)}writeLock(e){return this.sendRequest(f1,h1,m1,g1,p1,e)}finalize(){this.channel.postMessage({type:y1,name:this.name}),this.channel.close()}async sendRequest(e,t,n,o,i,s){s?.signal?.throwIfAborted();let a=px();return this.channel.postMessage({type:e,identifier:a,name:this.name}),new Promise((c,l)=>{let u=()=>{this.channel.postMessage({type:t,identifier:a,name:this.name})};s?.signal?.addEventListener("abort",u,{once:!0});let d=f=>{if(f.data?.identifier===a&&(f.data?.type===n&&(this.channel.removeEventListener("message",d),s?.signal?.removeEventListener("abort",u),c(()=>{this.channel.postMessage({type:i,identifier:a,name:this.name})})),f.data.type===o)){this.channel.removeEventListener("message",d),s?.signal?.removeEventListener("abort",u);let h=new Error;f.data.error!=null&&(h.message=f.data.error.message,h.name=f.data.error.name,h.stack=f.data.error.stack),l(h)}};this.channel.addEventListener("message",d)})}};var mx=r=>{if(r=Object.assign({},hx,r),!!globalThis.document||r.singleProcess){let t=new BroadcastChannel(w1),n=new ue;return t.addEventListener("message",Z4(n,t,"requestReadLock","abortReadLockRequest",a1,c1,d1,l1,u1)),t.addEventListener("message",Z4(n,t,"requestWriteLock","abortWriteLockRequest",f1,h1,g1,p1,m1)),n}return new b1(r.name)};var zs=new Map,_u;function gx(r){return typeof r?.readLock=="function"&&typeof r?.writeLock=="function"}function uN(r){if(_u==null&&(_u=mx(r),!gx(_u))){let e=_u;e.addEventListener("requestReadLock",t=>{let n=t.detail.name,o=t.detail.identifier,i=zs.get(n);if(i==null)return;let s=new AbortController,a=c=>{c.detail.name!==n||c.detail.identifier!==o||s.abort()};e.addEventListener("abortReadLockRequest",a),i.readLock({signal:s.signal}).then(async c=>{await t.detail.handler().finally(()=>{c()})}).catch(c=>{t.detail.onError(c)}).finally(()=>{e.removeEventListener("abortReadLockRequest",a)})}),e.addEventListener("requestWriteLock",t=>{let n=t.detail.name,o=t.detail.identifier,i=zs.get(n);if(i==null)return;let s=new AbortController,a=c=>{c.detail.name!==n||c.detail.identifier!==o||s.abort()};e.addEventListener("abortWriteLockRequest",a),i.writeLock({signal:s.signal}).then(async c=>{await t.detail.handler().finally(()=>{c()})}).catch(c=>{t.detail.onError(c)}).finally(()=>{e.removeEventListener("abortWriteLockRequest",a)})}),e.addEventListener("finalizeRequest",t=>{let n=t.detail.name,o=zs.get(n);o?.finalize()})}return _u}async function J4(r,e){let t,n,o=new Promise((s,a)=>{t=s,n=a}),i=()=>{n(new Br)};return e?.signal?.addEventListener("abort",i,{once:!0}),r.add(async()=>{await new Promise(s=>{t(()=>{e?.signal?.removeEventListener("abort",i),s()})})},{signal:e?.signal}).catch(s=>{n(s)}),o}var yx=(r,e)=>{let t=zs.get(r);if(t!=null)return t;let n=uN(e);if(gx(n))return t=n,zs.set(r,t),t;let o=new Tu({concurrency:1}),i;return t={async readLock(s){if(i!=null)return J4(i,s);i=new Tu({concurrency:e.concurrency,autoStart:!1});let a=i,c=J4(i,s);return o.add(async()=>{a.start(),await a.onIdle().then(()=>{i===a&&(i=null)})}),c},async writeLock(s){return i=null,J4(o,s)},finalize:()=>{zs.delete(r)},queue:o},zs.set(r,t),e.autoFinalize===!0&&o.addEventListener("idle",()=>{t.finalize()},{once:!0}),t};var dN={name:"lock",concurrency:1/0,singleProcess:!1,autoFinalize:!1};function Iu(r){let e=Object.assign({},dN,r);return yx(e.name,e)}var x1=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=Iu({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await Et(this.child),this.started=!0}async stop(){await Tt(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{yield*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 xu("Block was pinned - please unpin and try again");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 xu("Block was pinned - please unpin and try again");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 e6=new Ze("/version"),wx=1;async function bx(r){if(!await r.has(e6)){await r.put(e6,C(`${wx}`));return}let e=await r.get(e6),t=N(e);if(parseInt(t,10)!==wx)throw new Zh("Invalid datastore version, a datastore migration may be required")}var g6={};ht(g6,{code:()=>m6,decode:()=>oO,decodeOptions:()=>tO,encode:()=>nO,encodeOptions:()=>JN,name:()=>rO,toByteView:()=>_E});var fN=["Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array","Tagged"];function t6(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(e==="string"||e==="number"||e==="bigint"||e==="symbol")return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(r instanceof Uint8Array)return"Uint8Array";if(r.constructor===Object)return"Object";let t=hN(r);return t||"Object"}function hN(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(fN.includes(e))return e}var I=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}static equals(e,t){return e===t||e.major===t.major&&e.name===t.name}};I.uint=new I(0,"uint",!0);I.negint=new I(1,"negint",!0);I.bytes=new I(2,"bytes",!0);I.string=new I(3,"string",!0);I.array=new I(4,"array",!1);I.map=new I(5,"map",!1);I.tag=new I(6,"tag",!1);I.float=new I(7,"float",!0);I.false=new I(7,"false",!0);I.true=new I(7,"true",!0);I.null=new I(7,"null",!0);I.undefined=new I(7,"undefined",!0);I.break=new I(7,"break",!0);var j=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 ku=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",pN=new TextEncoder;function E1(r){return ku&&globalThis.Buffer.isBuffer(r)}function Cu(r){return r instanceof Uint8Array?E1(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var mN=24,gN=200,v1=ku?r=>r.length>=mN?globalThis.Buffer.from(r):xx(r):r=>r.length>=gN?pN.encode(r):xx(r),no=r=>Uint8Array.from(r),Ex=ku?(r,e,t)=>E1(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),vx=ku?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),Cu(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},Sx=ku?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function S1(r,e){if(E1(r)&&E1(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 xx(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):(o>=55296&&o<=57343&&(o=65533),e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}var yN=256,Ru=class{constructor(e=yN){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=Sx(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=Ex(n,0,this.cursor)}else t=vx(this.chunks,this.cursor);return e&&this.reset(),t}},A1=class{constructor(e){this.dest=e,this.cursor=0,this.chunks=[e]}reset(){this.cursor=0}push(e){if(this.cursor+e.length>this.dest.length)throw new Error("write out of bounds, destination buffer is too small");this.dest.set(e,this.cursor),this.cursor+=e.length}toBytes(e=!1){let t=this.dest.subarray(0,this.cursor);return e&&this.reset(),t}};var ae="CBOR decode error:",T1="CBOR encode error:",Pu=[];Pu[23]=1;Pu[24]=2;Pu[25]=3;Pu[26]=5;Pu[27]=9;function $o(r,e,t){if(r.length-e<t)throw new Error(`${ae} not enough data for type`)}var Lt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function Mr(r,e,t){$o(r,e,1);let n=r[e];if(t.strict===!0&&n<Lt[0])throw new Error(`${ae} integer encoded in more bytes than necessary (strict decode)`);return n}function Ur(r,e,t){$o(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<Lt[1])throw new Error(`${ae} integer encoded in more bytes than necessary (strict decode)`);return n}function Fr(r,e,t){$o(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<Lt[2])throw new Error(`${ae} integer encoded in more bytes than necessary (strict decode)`);return n}function $r(r,e,t){$o(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<Lt[3])throw new Error(`${ae} 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(`${ae} integers outside of the safe integer range are not supported`)}function Ax(r,e,t,n){return new j(I.uint,Mr(r,e+1,n),2)}function Tx(r,e,t,n){return new j(I.uint,Ur(r,e+1,n),3)}function _x(r,e,t,n){return new j(I.uint,Fr(r,e+1,n),5)}function Ix(r,e,t,n){return new j(I.uint,$r(r,e+1,n),9)}function sn(r,e){return tt(r,0,e.value)}function tt(r,e,t){if(t<Lt[0]){let n=Number(t);r.push([e|n])}else if(t<Lt[1]){let n=Number(t);r.push([e|24,n])}else if(t<Lt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<Lt[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<Lt[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(`${ae} encountered BigInt larger than allowable range`)}}sn.encodedSize=function(e){return tt.encodedSize(e.value)};tt.encodedSize=function(e){return e<Lt[0]?1:e<Lt[1]?2:e<Lt[2]?3:e<Lt[3]?5:9};sn.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function kx(r,e,t,n){return new j(I.negint,-1-Mr(r,e+1,n),2)}function Cx(r,e,t,n){return new j(I.negint,-1-Ur(r,e+1,n),3)}function Rx(r,e,t,n){return new j(I.negint,-1-Fr(r,e+1,n),5)}var r6=BigInt(-1),Px=BigInt(1);function Lx(r,e,t,n){let o=$r(r,e+1,n);if(typeof o!="bigint"){let i=-1-o;if(i>=Number.MIN_SAFE_INTEGER)return new j(I.negint,i,9)}if(n.allowBigInt!==!0)throw new Error(`${ae} integers outside of the safe integer range are not supported`);return new j(I.negint,r6-BigInt(o),9)}function _1(r,e){let t=e.value,n=typeof t=="bigint"?t*r6-Px:t*-1-1;tt(r,e.type.majorEncoded,n)}_1.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*r6-Px:t*-1-1;return n<Lt[0]?1:n<Lt[1]?2:n<Lt[2]?3:n<Lt[3]?5:9};_1.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function Lu(r,e,t,n){$o(r,e,t+n);let o=r.slice(e+t,e+t+n);return new j(I.bytes,o,t+n)}function Dx(r,e,t,n){return Lu(r,e,1,t)}function Nx(r,e,t,n){return Lu(r,e,2,Mr(r,e+1,n))}function Ox(r,e,t,n){return Lu(r,e,3,Ur(r,e+1,n))}function Bx(r,e,t,n){return Lu(r,e,5,Fr(r,e+1,n))}function Mx(r,e,t,n){let o=$r(r,e+1,n);if(typeof o=="bigint")throw new Error(`${ae} 64-bit integer bytes lengths not supported`);return Lu(r,e,9,o)}function I1(r){return r.encodedBytes===void 0&&(r.encodedBytes=I.equals(r.type,I.string)?v1(r.value):r.value),r.encodedBytes}function wc(r,e){let t=I1(e);tt(r,e.type.majorEncoded,t.length),r.push(t)}wc.encodedSize=function(e){let t=I1(e);return tt.encodedSize(t.length)+t.length};wc.compareTokens=function(e,t){return bN(I1(e),I1(t))};function bN(r,e){return r.length<e.length?-1:r.length>e.length?1:S1(r,e)}var Ux=new TextDecoder,EN=32;function vN(r,e,t){if(t-e<EN){let o="";for(let i=e;i<t;i++){let s=r[i];if(s&128)return Ux.decode(r.subarray(e,t));o+=String.fromCharCode(s)}return o}return Ux.decode(r.subarray(e,t))}function Du(r,e,t,n,o){let i=t+n;$o(r,e,i);let s=new j(I.string,vN(r,e+t,e+i),i);return o.retainStringBytes===!0&&(s.byteValue=r.slice(e+t,e+i)),s}function Fx(r,e,t,n){return Du(r,e,1,t,n)}function $x(r,e,t,n){return Du(r,e,2,Mr(r,e+1,n),n)}function Vx(r,e,t,n){return Du(r,e,3,Ur(r,e+1,n),n)}function Kx(r,e,t,n){return Du(r,e,5,Fr(r,e+1,n),n)}function Hx(r,e,t,n){let o=$r(r,e+1,n);if(typeof o=="bigint")throw new Error(`${ae} 64-bit integer string lengths not supported`);return Du(r,e,9,o,n)}var qx=wc;function bc(r,e,t,n){return new j(I.array,n,t)}function zx(r,e,t,n){return bc(r,e,1,t)}function Wx(r,e,t,n){return bc(r,e,2,Mr(r,e+1,n))}function Gx(r,e,t,n){return bc(r,e,3,Ur(r,e+1,n))}function jx(r,e,t,n){return bc(r,e,5,Fr(r,e+1,n))}function Yx(r,e,t,n){let o=$r(r,e+1,n);if(typeof o=="bigint")throw new Error(`${ae} 64-bit integer array lengths not supported`);return bc(r,e,9,o)}function Xx(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${ae} indefinite length items not allowed`);return bc(r,e,1,1/0)}function k1(r,e){tt(r,I.array.majorEncoded,e.value)}k1.compareTokens=sn.compareTokens;k1.encodedSize=function(e){return tt.encodedSize(e.value)};function xc(r,e,t,n){return new j(I.map,n,t)}function Qx(r,e,t,n){return xc(r,e,1,t)}function Zx(r,e,t,n){return xc(r,e,2,Mr(r,e+1,n))}function Jx(r,e,t,n){return xc(r,e,3,Ur(r,e+1,n))}function eE(r,e,t,n){return xc(r,e,5,Fr(r,e+1,n))}function tE(r,e,t,n){let o=$r(r,e+1,n);if(typeof o=="bigint")throw new Error(`${ae} 64-bit integer map lengths not supported`);return xc(r,e,9,o)}function rE(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${ae} indefinite length items not allowed`);return xc(r,e,1,1/0)}function C1(r,e){tt(r,I.map.majorEncoded,e.value)}C1.compareTokens=sn.compareTokens;C1.encodedSize=function(e){return tt.encodedSize(e.value)};function nE(r,e,t,n){return new j(I.tag,t,1)}function oE(r,e,t,n){return new j(I.tag,Mr(r,e+1,n),2)}function iE(r,e,t,n){return new j(I.tag,Ur(r,e+1,n),3)}function sE(r,e,t,n){return new j(I.tag,Fr(r,e+1,n),5)}function aE(r,e,t,n){return new j(I.tag,$r(r,e+1,n),9)}function R1(r,e){tt(r,I.tag.majorEncoded,e.value)}R1.compareTokens=sn.compareTokens;R1.encodedSize=function(e){return tt.encodedSize(e.value)};var n6=20,o6=21,i6=22,s6=23;function cE(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${ae} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new j(I.null,null,1):new j(I.undefined,void 0,1)}function lE(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${ae} indefinite length items not allowed`);return new j(I.break,void 0,1)}function a6(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${ae} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${ae} Infinity values are not supported`)}return new j(I.float,r,e)}function uE(r,e,t,n){return a6(c6(r,e+1),3,n)}function dE(r,e,t,n){return a6(l6(r,e+1),5,n)}function fE(r,e,t,n){return a6(gE(r,e+1),9,n)}function Nu(r,e,t){let n=e.value;if(n===!1)r.push([I.float.majorEncoded|n6]);else if(n===!0)r.push([I.float.majorEncoded|o6]);else if(n===null)r.push([I.float.majorEncoded|i6]);else if(n===void 0)r.push([I.float.majorEncoded|s6]);else{let o,i=!1;(!t||t.float64!==!0)&&(pE(n),o=c6(Cn,1),n===o||Number.isNaN(n)?(Cn[0]=249,r.push(Cn.slice(0,3)),i=!0):(mE(n),o=l6(Cn,1),n===o&&(Cn[0]=250,r.push(Cn.slice(0,5)),i=!0))),i||(IN(n),o=gE(Cn,1),Cn[0]=251,r.push(Cn.slice(0,9)))}}Nu.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){pE(n);let o=c6(Cn,1);if(n===o||Number.isNaN(n))return 3;if(mE(n),o=l6(Cn,1),n===o)return 5}return 9};var hE=new ArrayBuffer(9),an=new DataView(hE,1),Cn=new Uint8Array(hE,0);function pE(r){if(r===1/0)an.setUint16(0,31744,!1);else if(r===-1/0)an.setUint16(0,64512,!1);else if(Number.isNaN(r))an.setUint16(0,32256,!1);else{an.setFloat32(0,r);let e=an.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)an.setUint16(0,31744,!1);else if(t===0)an.setUint16(0,(e&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?an.setUint16(0,0):o<-14?an.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):an.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function c6(r,e){if(r.length-e<2)throw new Error(`${ae} 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 mE(r){an.setFloat32(0,r,!1)}function l6(r,e){if(r.length-e<4)throw new Error(`${ae} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function IN(r){an.setFloat64(0,r,!1)}function gE(r,e){if(r.length-e<8)throw new Error(`${ae} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}Nu.compareTokens=sn.compareTokens;function Ne(r,e,t){throw new Error(`${ae} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function P1(r){return()=>{throw new Error(`${ae} ${r}`)}}var W=[];for(let r=0;r<=23;r++)W[r]=Ne;W[24]=Ax;W[25]=Tx;W[26]=_x;W[27]=Ix;W[28]=Ne;W[29]=Ne;W[30]=Ne;W[31]=Ne;for(let r=32;r<=55;r++)W[r]=Ne;W[56]=kx;W[57]=Cx;W[58]=Rx;W[59]=Lx;W[60]=Ne;W[61]=Ne;W[62]=Ne;W[63]=Ne;for(let r=64;r<=87;r++)W[r]=Dx;W[88]=Nx;W[89]=Ox;W[90]=Bx;W[91]=Mx;W[92]=Ne;W[93]=Ne;W[94]=Ne;W[95]=P1("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)W[r]=Fx;W[120]=$x;W[121]=Vx;W[122]=Kx;W[123]=Hx;W[124]=Ne;W[125]=Ne;W[126]=Ne;W[127]=P1("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)W[r]=zx;W[152]=Wx;W[153]=Gx;W[154]=jx;W[155]=Yx;W[156]=Ne;W[157]=Ne;W[158]=Ne;W[159]=Xx;for(let r=160;r<=183;r++)W[r]=Qx;W[184]=Zx;W[185]=Jx;W[186]=eE;W[187]=tE;W[188]=Ne;W[189]=Ne;W[190]=Ne;W[191]=rE;for(let r=192;r<=215;r++)W[r]=nE;W[216]=oE;W[217]=iE;W[218]=sE;W[219]=aE;W[220]=Ne;W[221]=Ne;W[222]=Ne;W[223]=Ne;for(let r=224;r<=243;r++)W[r]=P1("simple values are not supported");W[244]=Ne;W[245]=Ne;W[246]=Ne;W[247]=cE;W[248]=P1("simple values are not supported");W[249]=uE;W[250]=dE;W[251]=fE;W[252]=Ne;W[253]=Ne;W[254]=Ne;W[255]=lE;var Rn=[];for(let r=0;r<24;r++)Rn[r]=new j(I.uint,r,1);for(let r=-1;r>=-24;r--)Rn[31-r]=new j(I.negint,r,1);Rn[64]=new j(I.bytes,new Uint8Array(0),1);Rn[96]=new j(I.string,"",1);Rn[128]=new j(I.array,0,1);Rn[160]=new j(I.map,0,1);Rn[244]=new j(I.false,!1,1);Rn[245]=new j(I.true,!0,1);Rn[246]=new j(I.null,null,1);function u6(r){switch(r.type){case I.false:return no([244]);case I.true:return no([245]);case I.null:return no([246]);case I.bytes:return r.value.length?void 0:no([64]);case I.string:return r.value===""?no([96]):void 0;case I.array:return r.value===0?no([128]):void 0;case I.map:return r.value===0?no([160]):void 0;case I.uint:return r.value<24?no([Number(r.value)]):void 0;case I.negint:if(r.value>=-24)return no([31-Number(r.value)])}}var CN={float64:!1,mapSorter:LN,quickEncodeToken:u6},EE=Object.freeze({float64:!0,mapSorter:DN,quickEncodeToken:u6});function RN(){let r=[];return r[I.uint.major]=sn,r[I.negint.major]=_1,r[I.bytes.major]=wc,r[I.string.major]=qx,r[I.array.major]=k1,r[I.map.major]=C1,r[I.tag.major]=R1,r[I.float.major]=Nu,r}var vc=RN(),L1=new Ru,Bu=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(`${T1} object contains circular references`);return new r(t,e)}},Ri={null:new j(I.null,null),undefined:new j(I.undefined,void 0),true:new j(I.true,!0),false:new j(I.false,!1),emptyArray:new j(I.array,0),emptyMap:new j(I.map,0)},oo={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new j(I.float,r):r>=0?new j(I.uint,r):new j(I.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new j(I.uint,r):new j(I.negint,r)},Uint8Array(r,e,t,n){return new j(I.bytes,r)},string(r,e,t,n){return new j(I.string,r)},boolean(r,e,t,n){return r?Ri.true:Ri.false},null(r,e,t,n){return Ri.null},undefined(r,e,t,n){return Ri.undefined},ArrayBuffer(r,e,t,n){return new j(I.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new j(I.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[Ri.emptyArray,new j(I.break)]:Ri.emptyArray;n=Bu.createCheck(n,r);let o=[],i=0;for(let s of r)o[i++]=Ec(s,t,n);return t.addBreakTokens?[new j(I.array,r.length),o,new j(I.break)]:[new j(I.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,a;if(s){a=new Array(s),n=Bu.createCheck(n,r);let c=!o&&t.ignoreUndefinedProperties,l=0;for(let u of i){let d=o?r.get(u):r[u];c&&d===void 0||(a[l++]=[Ec(u,t,n),Ec(d,t,n)])}l<s&&(a.length=l)}return a?.length?(PN(a,t),t.addBreakTokens?[new j(I.map,a.length),a,new j(I.break)]:[new j(I.map,a.length),a]):t.addBreakTokens===!0?[Ri.emptyMap,new j(I.break)]:Ri.emptyMap},Tagged(r,e,t,n){return[new j(I.tag,r.tag),Ec(r.value,t,n)]}};oo.Map=oo.Object;oo.Buffer=oo.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))oo[`${r}Array`]=oo.DataView;function Ec(r,e={},t){let n=t6(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||oo[n];if(typeof o=="function"){let s=o(r,n,e,t);if(s!=null)return s}let i=oo[n];if(!i)throw new Error(`${T1} unsupported type: ${n}`);return i(r,n,e,t)}function PN(r,e){e.mapSorter&&r.sort(e.mapSorter)}function LN(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=vc[o].compareTokens(t,n);return i===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),i}function DN(r,e){if(r[0]instanceof j&&e[0]instanceof j){let t=r[0],n=e[0];return t._keyBytes||(t._keyBytes=yE(t.value)),n._keyBytes||(n._keyBytes=yE(n.value)),S1(t._keyBytes,n._keyBytes)}throw new Error("rfc8949MapSorter: complex key types are not supported yet")}function yE(r){return SE(r,vc,EE)}function Ou(r,e,t,n){if(Array.isArray(e))for(let o of e)Ou(r,o,t,n);else t[e.type.major](r,e,n)}var wE=I.uint.majorEncoded,bE=I.negint.majorEncoded,NN=I.bytes.majorEncoded,ON=I.string.majorEncoded,xE=I.array.majorEncoded,BN=I.float.majorEncoded|n6,MN=I.float.majorEncoded|o6,UN=I.float.majorEncoded|i6,FN=I.float.majorEncoded|s6,$N=BigInt(-1),VN=BigInt(1);function KN(r){return r.addBreakTokens!==!0}function vE(r,e,t,n){let o=t6(e),i=t.typeEncoders&&t.typeEncoders[o];if(i){let s=i(e,o,t,n);if(s!=null){Ou(r,s,vc,t);return}}switch(o){case"null":r.push([UN]);return;case"undefined":r.push([FN]);return;case"boolean":r.push([e?MN:BN]);return;case"number":!Number.isInteger(e)||!Number.isSafeInteger(e)?Nu(r,new j(I.float,e),t):e>=0?tt(r,wE,e):tt(r,bE,e*-1-1);return;case"bigint":e>=BigInt(0)?tt(r,wE,e):tt(r,bE,e*$N-VN);return;case"string":{let s=v1(e);tt(r,ON,s.length),r.push(s);return}case"Uint8Array":tt(r,NN,e.length),r.push(e);return;case"Array":if(!e.length){r.push([xE]);return}n=Bu.createCheck(n,e),tt(r,xE,e.length);for(let s of e)vE(r,s,t,n);return;case"Object":case"Map":{let s=oo.Object(e,o,t,n);Ou(r,s,vc,t)}return;default:{let s=oo[o];if(!s)throw new Error(`${T1} unsupported type: ${o}`);let a=s(e,o,t,n);Ou(r,a,vc,t)}}}function SE(r,e,t,n){let o=n instanceof Uint8Array,i=o?new A1(n):L1,s=Ec(r,t);if(!Array.isArray(s)&&t.quickEncodeToken){let a=t.quickEncodeToken(s);if(a)return o?(i.push(a),i.toBytes()):a;let c=e[s.type.major];if(c.encodedSize){let l=c.encodedSize(s,t);if(o||(i=new Ru(l)),c(i,s,t),i.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${s} was wrong`);return o?i.toBytes():Cu(i.chunks[0])}}return i.reset(),Ou(i,s,e,t),i.toBytes(!0)}function d6(r,e){return e=Object.assign({},CN,e),KN(e)?(L1.reset(),vE(L1,r,e,void 0),L1.toBytes(!0)):SE(r,vc,e)}var HN={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},D1=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=Rn[e];if(t===void 0){let n=W[e];if(!n)throw new Error(`${ae} 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}},Pi=Symbol.for("DONE"),Sc=Symbol.for("BREAK");function qN(r,e,t){let n=[];for(let o=0;o<r.value;o++){let i=Li(e,t);if(i===Sc){if(r.value===1/0)break;throw new Error(`${ae} got unexpected break to lengthed array`)}if(i===Pi)throw new Error(`${ae} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=i}return n}function zN(r,e,t){let n=t.useMaps===!0,o=t.rejectDuplicateMapKeys===!0,i=n?void 0:{},s=n?new Map:void 0;for(let a=0;a<r.value;a++){let c=Li(e,t);if(c===Sc){if(r.value===1/0)break;throw new Error(`${ae} got unexpected break to lengthed map`)}if(c===Pi)throw new Error(`${ae} found map but not enough entries (got ${a} [no key], expected ${r.value})`);if(!n&&typeof c!="string")throw new Error(`${ae} non-string keys not supported (got ${typeof c})`);if(o&&(n&&s.has(c)||!n&&Object.hasOwn(i,c)))throw new Error(`${ae} found repeat map key "${c}"`);let l=Li(e,t);if(l===Pi)throw new Error(`${ae} found map but not enough entries (got ${a} [no value], expected ${r.value})`);n?s.set(c,l):i[c]=l}return n?s:i}function*WN(r,e,t){for(let n=0;n<r.value;n++){let o=Li(e,t);if(o===Sc){if(r.value===1/0)break;throw new Error(`${ae} got unexpected break to lengthed map`)}if(o===Pi)throw new Error(`${ae} found map but not enough entries (got ${n} [no key], expected ${r.value})`);let i=Li(e,t);if(i===Pi)throw new Error(`${ae} found map but not enough entries (got ${n} [no value], expected ${r.value})`);yield[o,i]}}function GN(r,e){let t=!1,n=function(){if(t)throw new Error(`${ae} tag decode() may only be called once`);t=!0;let o=Li(r,e);if(o===Pi)throw new Error(`${ae} tag content missing`);if(o===Sc)throw new Error(`${ae} got unexpected break in tag content`);return o};return n.entries=function(){if(t)throw new Error(`${ae} tag decode() may only be called once`);t=!0;let o=r.next();if(!I.equals(o.type,I.map))throw new Error(`${ae} entries() requires map content, got ${o.type.name}`);let i=[];for(let s of WN(o,r,e))i.push(s);return i},Object.defineProperty(n,"_called",{get(){return t},enumerable:!1}),n}function Li(r,e){if(r.done())return Pi;let t=r.next();if(I.equals(t.type,I.break))return Sc;if(t.type.terminal)return t.value;if(I.equals(t.type,I.array))return qN(t,r,e);if(I.equals(t.type,I.map))return zN(t,r,e);if(I.equals(t.type,I.tag)){if(e.tags&&typeof e.tags[t.value]=="function"){let n=GN(r,e),o=e.tags[t.value](n);if(!n._called)throw new Error(`${ae} tag decoder must call decode() or entries()`);return o}throw new Error(`${ae} tag not supported (${t.value})`)}throw new Error("unsupported")}function AE(r,e){if(!(r instanceof Uint8Array))throw new Error(`${ae} data to decode must be a Uint8Array`);e=Object.assign({},HN,e);let t=Cu(r),n=e.tokenizer||new D1(t,e),o=Li(n,e);if(o===Pi)throw new Error(`${ae} did not find any content to decode`);if(o===Sc)throw new Error(`${ae} got unexpected break`);return[o,r.subarray(n.pos())]}function f6(r,e){let[t,n]=AE(r,e);if(n.length>0)throw new Error(`${ae} too many terminals, data makes no sense`);return t}var N1=class r{constructor(e,t){if(typeof e!="number"||!Number.isInteger(e)||e<0)throw new TypeError("Tagged: tag must be a non-negative integer");this.tag=e,this.value=t}static decoder(e){return t=>new r(e,t())}static preserve(...e){let t={};for(let n of e)t[n]=r.decoder(n);return t}};Object.defineProperty(N1.prototype,Symbol.toStringTag,{value:"Tagged"});var TE=42;function _E(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function YN(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=Z.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new j(I.tag,TE),new j(I.bytes,t)]}function XN(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function QN(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}function ZN(r){for(let e of r.keys())if(typeof e!="string"||e.length===0)throw new Error("Non-string Map keys are not supported by the IPLD Data Model and cannot be encoded");return null}var h6={float64:!0,typeEncoders:{Map:ZN,Object:YN,undefined:XN,number:QN}},JN={...h6,typeEncoders:{...h6.typeEncoders}};function eO(r){let e=r();if(e[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return Z.decode(e.subarray(1))}var p6={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:{[TE]:eO}},tO={...p6,tags:{...p6.tags}},rO="dag-cbor",m6=113,nO=r=>d6(r,h6),oO=r=>f6(_E(r),p6);var D6={};ht(D6,{code:()=>L6,decode:()=>Dv,encode:()=>Lv,format:()=>KO,name:()=>VO,parse:()=>qO,stringify:()=>KO});var iO=["Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array","Tagged"];function IE(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(e==="string"||e==="number"||e==="bigint"||e==="symbol")return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(r instanceof Uint8Array)return"Uint8Array";if(r.constructor===Object)return"Object";let t=sO(r);return t||"Object"}function sO(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(iO.includes(e))return e}var w=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}static equals(e,t){return e===t||e.major===t.major&&e.name===t.name}};w.uint=new w(0,"uint",!0);w.negint=new w(1,"negint",!0);w.bytes=new w(2,"bytes",!0);w.string=new w(3,"string",!0);w.array=new w(4,"array",!1);w.map=new w(5,"map",!1);w.tag=new w(6,"tag",!1);w.float=new w(7,"float",!0);w.false=new w(7,"false",!0);w.true=new w(7,"true",!0);w.null=new w(7,"null",!0);w.undefined=new w(7,"undefined",!0);w.break=new w(7,"break",!0);var F=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 Mu=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",aO=new TextEncoder;function O1(r){return Mu&&globalThis.Buffer.isBuffer(r)}function Gs(r){return r instanceof Uint8Array?O1(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var cO=24,lO=200,Uu=Mu?r=>r.length>=cO?globalThis.Buffer.from(r):kE(r):r=>r.length>=lO?aO.encode(r):kE(r),io=r=>Uint8Array.from(r),RE=Mu?(r,e,t)=>O1(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),PE=Mu?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),Gs(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},LE=Mu?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function B1(r,e){if(O1(r)&&O1(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 kE(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):(o>=55296&&o<=57343&&(o=65533),e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}var CE=4096;function DE(r){let e=r.length;if(e<=CE)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=CE));return t}var uO=256,Fu=class{constructor(e=uO){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=LE(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=RE(n,0,this.cursor)}else t=PE(this.chunks,this.cursor);return e&&this.reset(),t}},M1=class{constructor(e){this.dest=e,this.cursor=0,this.chunks=[e]}reset(){this.cursor=0}push(e){if(this.cursor+e.length>this.dest.length)throw new Error("write out of bounds, destination buffer is too small");this.dest.set(e,this.cursor),this.cursor+=e.length}toBytes(e=!1){let t=this.dest.subarray(0,this.cursor);return e&&this.reset(),t}};var J="CBOR decode error:",Vo="CBOR encode error:",$u=[];$u[23]=1;$u[24]=2;$u[25]=3;$u[26]=5;$u[27]=9;function Ko(r,e,t){if(r.length-e<t)throw new Error(`${J} not enough data for type`)}var Dt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function Vr(r,e,t){Ko(r,e,1);let n=r[e];if(t.strict===!0&&n<Dt[0])throw new Error(`${J} integer encoded in more bytes than necessary (strict decode)`);return n}function Kr(r,e,t){Ko(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<Dt[1])throw new Error(`${J} integer encoded in more bytes than necessary (strict decode)`);return n}function Hr(r,e,t){Ko(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<Dt[2])throw new Error(`${J} integer encoded in more bytes than necessary (strict decode)`);return n}function qr(r,e,t){Ko(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<Dt[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 NE(r,e,t,n){return new F(w.uint,Vr(r,e+1,n),2)}function OE(r,e,t,n){return new F(w.uint,Kr(r,e+1,n),3)}function BE(r,e,t,n){return new F(w.uint,Hr(r,e+1,n),5)}function ME(r,e,t,n){return new F(w.uint,qr(r,e+1,n),9)}function cn(r,e){return Nt(r,0,e.value)}function Nt(r,e,t){if(t<Dt[0]){let n=Number(t);r.push([e|n])}else if(t<Dt[1]){let n=Number(t);r.push([e|24,n])}else if(t<Dt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<Dt[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<Dt[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`)}}cn.encodedSize=function(e){return Nt.encodedSize(e.value)};Nt.encodedSize=function(e){return e<Dt[0]?1:e<Dt[1]?2:e<Dt[2]?3:e<Dt[3]?5:9};cn.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function UE(r,e,t,n){return new F(w.negint,-1-Vr(r,e+1,n),2)}function FE(r,e,t,n){return new F(w.negint,-1-Kr(r,e+1,n),3)}function $E(r,e,t,n){return new F(w.negint,-1-Hr(r,e+1,n),5)}var y6=BigInt(-1),VE=BigInt(1);function KE(r,e,t,n){let o=qr(r,e+1,n);if(typeof o!="bigint"){let i=-1-o;if(i>=Number.MIN_SAFE_INTEGER)return new F(w.negint,i,9)}if(n.allowBigInt!==!0)throw new Error(`${J} integers outside of the safe integer range are not supported`);return new F(w.negint,y6-BigInt(o),9)}function U1(r,e){let t=e.value,n=typeof t=="bigint"?t*y6-VE:t*-1-1;Nt(r,e.type.majorEncoded,n)}U1.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*y6-VE:t*-1-1;return n<Dt[0]?1:n<Dt[1]?2:n<Dt[2]?3:n<Dt[3]?5:9};U1.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function Vu(r,e,t,n){Ko(r,e,t+n);let o=r.slice(e+t,e+t+n);return new F(w.bytes,o,t+n)}function HE(r,e,t,n){return Vu(r,e,1,t)}function qE(r,e,t,n){return Vu(r,e,2,Vr(r,e+1,n))}function zE(r,e,t,n){return Vu(r,e,3,Kr(r,e+1,n))}function WE(r,e,t,n){return Vu(r,e,5,Hr(r,e+1,n))}function GE(r,e,t,n){let o=qr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${J} 64-bit integer bytes lengths not supported`);return Vu(r,e,9,o)}function F1(r){return r.encodedBytes===void 0&&(r.encodedBytes=w.equals(r.type,w.string)?Uu(r.value):r.value),r.encodedBytes}function Ac(r,e){let t=F1(e);Nt(r,e.type.majorEncoded,t.length),r.push(t)}Ac.encodedSize=function(e){let t=F1(e);return Nt.encodedSize(t.length)+t.length};Ac.compareTokens=function(e,t){return fO(F1(e),F1(t))};function fO(r,e){return r.length<e.length?-1:r.length>e.length?1:B1(r,e)}var jE=new TextDecoder,pO=32;function mO(r,e,t){if(t-e<pO){let o="";for(let i=e;i<t;i++){let s=r[i];if(s&128)return jE.decode(r.subarray(e,t));o+=String.fromCharCode(s)}return o}return jE.decode(r.subarray(e,t))}function Ku(r,e,t,n,o){let i=t+n;Ko(r,e,i);let s=new F(w.string,mO(r,e+t,e+i),i);return o.retainStringBytes===!0&&(s.byteValue=r.slice(e+t,e+i)),s}function YE(r,e,t,n){return Ku(r,e,1,t,n)}function XE(r,e,t,n){return Ku(r,e,2,Vr(r,e+1,n),n)}function QE(r,e,t,n){return Ku(r,e,3,Kr(r,e+1,n),n)}function ZE(r,e,t,n){return Ku(r,e,5,Hr(r,e+1,n),n)}function JE(r,e,t,n){let o=qr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${J} 64-bit integer string lengths not supported`);return Ku(r,e,9,o,n)}var ev=Ac;function Tc(r,e,t,n){return new F(w.array,n,t)}function tv(r,e,t,n){return Tc(r,e,1,t)}function rv(r,e,t,n){return Tc(r,e,2,Vr(r,e+1,n))}function nv(r,e,t,n){return Tc(r,e,3,Kr(r,e+1,n))}function ov(r,e,t,n){return Tc(r,e,5,Hr(r,e+1,n))}function iv(r,e,t,n){let o=qr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${J} 64-bit integer array lengths not supported`);return Tc(r,e,9,o)}function sv(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${J} indefinite length items not allowed`);return Tc(r,e,1,1/0)}function $1(r,e){Nt(r,w.array.majorEncoded,e.value)}$1.compareTokens=cn.compareTokens;$1.encodedSize=function(e){return Nt.encodedSize(e.value)};function _c(r,e,t,n){return new F(w.map,n,t)}function av(r,e,t,n){return _c(r,e,1,t)}function cv(r,e,t,n){return _c(r,e,2,Vr(r,e+1,n))}function lv(r,e,t,n){return _c(r,e,3,Kr(r,e+1,n))}function uv(r,e,t,n){return _c(r,e,5,Hr(r,e+1,n))}function dv(r,e,t,n){let o=qr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${J} 64-bit integer map lengths not supported`);return _c(r,e,9,o)}function fv(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${J} indefinite length items not allowed`);return _c(r,e,1,1/0)}function V1(r,e){Nt(r,w.map.majorEncoded,e.value)}V1.compareTokens=cn.compareTokens;V1.encodedSize=function(e){return Nt.encodedSize(e.value)};function hv(r,e,t,n){return new F(w.tag,t,1)}function pv(r,e,t,n){return new F(w.tag,Vr(r,e+1,n),2)}function mv(r,e,t,n){return new F(w.tag,Kr(r,e+1,n),3)}function gv(r,e,t,n){return new F(w.tag,Hr(r,e+1,n),5)}function yv(r,e,t,n){return new F(w.tag,qr(r,e+1,n),9)}function K1(r,e){Nt(r,w.tag.majorEncoded,e.value)}K1.compareTokens=cn.compareTokens;K1.encodedSize=function(e){return Nt.encodedSize(e.value)};var w6=20,b6=21,x6=22,E6=23;function wv(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${J} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new F(w.null,null,1):new F(w.undefined,void 0,1)}function bv(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${J} indefinite length items not allowed`);return new F(w.break,void 0,1)}function v6(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 F(w.float,r,e)}function xv(r,e,t,n){return v6(S6(r,e+1),3,n)}function Ev(r,e,t,n){return v6(A6(r,e+1),5,n)}function vv(r,e,t,n){return v6(_v(r,e+1),9,n)}function H1(r,e,t){let n=e.value;if(n===!1)r.push([w.float.majorEncoded|w6]);else if(n===!0)r.push([w.float.majorEncoded|b6]);else if(n===null)r.push([w.float.majorEncoded|x6]);else if(n===void 0)r.push([w.float.majorEncoded|E6]);else{let o,i=!1;(!t||t.float64!==!0)&&(Av(n),o=S6(Pn,1),n===o||Number.isNaN(n)?(Pn[0]=249,r.push(Pn.slice(0,3)),i=!0):(Tv(n),o=A6(Pn,1),n===o&&(Pn[0]=250,r.push(Pn.slice(0,5)),i=!0))),i||(xO(n),o=_v(Pn,1),Pn[0]=251,r.push(Pn.slice(0,9)))}}H1.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){Av(n);let o=S6(Pn,1);if(n===o||Number.isNaN(n))return 3;if(Tv(n),o=A6(Pn,1),n===o)return 5}return 9};var Sv=new ArrayBuffer(9),ln=new DataView(Sv,1),Pn=new Uint8Array(Sv,0);function Av(r){if(r===1/0)ln.setUint16(0,31744,!1);else if(r===-1/0)ln.setUint16(0,64512,!1);else if(Number.isNaN(r))ln.setUint16(0,32256,!1);else{ln.setFloat32(0,r);let e=ln.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)ln.setUint16(0,31744,!1);else if(t===0)ln.setUint16(0,(e&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?ln.setUint16(0,0):o<-14?ln.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):ln.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function S6(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 Tv(r){ln.setFloat32(0,r,!1)}function A6(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 xO(r){ln.setFloat64(0,r,!1)}function _v(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)}H1.compareTokens=cn.compareTokens;function Oe(r,e,t){throw new Error(`${J} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function q1(r){return()=>{throw new Error(`${J} ${r}`)}}var G=[];for(let r=0;r<=23;r++)G[r]=Oe;G[24]=NE;G[25]=OE;G[26]=BE;G[27]=ME;G[28]=Oe;G[29]=Oe;G[30]=Oe;G[31]=Oe;for(let r=32;r<=55;r++)G[r]=Oe;G[56]=UE;G[57]=FE;G[58]=$E;G[59]=KE;G[60]=Oe;G[61]=Oe;G[62]=Oe;G[63]=Oe;for(let r=64;r<=87;r++)G[r]=HE;G[88]=qE;G[89]=zE;G[90]=WE;G[91]=GE;G[92]=Oe;G[93]=Oe;G[94]=Oe;G[95]=q1("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)G[r]=YE;G[120]=XE;G[121]=QE;G[122]=ZE;G[123]=JE;G[124]=Oe;G[125]=Oe;G[126]=Oe;G[127]=q1("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)G[r]=tv;G[152]=rv;G[153]=nv;G[154]=ov;G[155]=iv;G[156]=Oe;G[157]=Oe;G[158]=Oe;G[159]=sv;for(let r=160;r<=183;r++)G[r]=av;G[184]=cv;G[185]=lv;G[186]=uv;G[187]=dv;G[188]=Oe;G[189]=Oe;G[190]=Oe;G[191]=fv;for(let r=192;r<=215;r++)G[r]=hv;G[216]=pv;G[217]=mv;G[218]=gv;G[219]=yv;G[220]=Oe;G[221]=Oe;G[222]=Oe;G[223]=Oe;for(let r=224;r<=243;r++)G[r]=q1("simple values are not supported");G[244]=Oe;G[245]=Oe;G[246]=Oe;G[247]=wv;G[248]=q1("simple values are not supported");G[249]=xv;G[250]=Ev;G[251]=vv;G[252]=Oe;G[253]=Oe;G[254]=Oe;G[255]=bv;var Ln=[];for(let r=0;r<24;r++)Ln[r]=new F(w.uint,r,1);for(let r=-1;r>=-24;r--)Ln[31-r]=new F(w.negint,r,1);Ln[64]=new F(w.bytes,new Uint8Array(0),1);Ln[96]=new F(w.string,"",1);Ln[128]=new F(w.array,0,1);Ln[160]=new F(w.map,0,1);Ln[244]=new F(w.false,!1,1);Ln[245]=new F(w.true,!0,1);Ln[246]=new F(w.null,null,1);function Iv(r){switch(r.type){case w.false:return io([244]);case w.true:return io([245]);case w.null:return io([246]);case w.bytes:return r.value.length?void 0:io([64]);case w.string:return r.value===""?io([96]):void 0;case w.array:return r.value===0?io([128]):void 0;case w.map:return r.value===0?io([160]):void 0;case w.uint:return r.value<24?io([Number(r.value)]):void 0;case w.negint:if(r.value>=-24)return io([31-Number(r.value)])}}var Cv=Object.freeze({float64:!0,mapSorter:_O,quickEncodeToken:Iv});function vO(){let r=[];return r[w.uint.major]=cn,r[w.negint.major]=U1,r[w.bytes.major]=Ac,r[w.string.major]=ev,r[w.array.major]=$1,r[w.map.major]=V1,r[w.tag.major]=K1,r[w.float.major]=H1,r}var SO=vO(),AO=new Fu,z1=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(`${Vo} object contains circular references`);return new r(t,e)}},Di={null:new F(w.null,null),undefined:new F(w.undefined,void 0),true:new F(w.true,!0),false:new F(w.false,!1),emptyArray:new F(w.array,0),emptyMap:new F(w.map,0)},Ni={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new F(w.float,r):r>=0?new F(w.uint,r):new F(w.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new F(w.uint,r):new F(w.negint,r)},Uint8Array(r,e,t,n){return new F(w.bytes,r)},string(r,e,t,n){return new F(w.string,r)},boolean(r,e,t,n){return r?Di.true:Di.false},null(r,e,t,n){return Di.null},undefined(r,e,t,n){return Di.undefined},ArrayBuffer(r,e,t,n){return new F(w.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new F(w.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[Di.emptyArray,new F(w.break)]:Di.emptyArray;n=z1.createCheck(n,r);let o=[],i=0;for(let s of r)o[i++]=Ic(s,t,n);return t.addBreakTokens?[new F(w.array,r.length),o,new F(w.break)]:[new F(w.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,a;if(s){a=new Array(s),n=z1.createCheck(n,r);let c=!o&&t.ignoreUndefinedProperties,l=0;for(let u of i){let d=o?r.get(u):r[u];c&&d===void 0||(a[l++]=[Ic(u,t,n),Ic(d,t,n)])}l<s&&(a.length=l)}return a?.length?(TO(a,t),t.addBreakTokens?[new F(w.map,a.length),a,new F(w.break)]:[new F(w.map,a.length),a]):t.addBreakTokens===!0?[Di.emptyMap,new F(w.break)]:Di.emptyMap},Tagged(r,e,t,n){return[new F(w.tag,r.tag),Ic(r.value,t,n)]}};Ni.Map=Ni.Object;Ni.Buffer=Ni.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))Ni[`${r}Array`]=Ni.DataView;function Ic(r,e={},t){let n=IE(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||Ni[n];if(typeof o=="function"){let s=o(r,n,e,t);if(s!=null)return s}let i=Ni[n];if(!i)throw new Error(`${Vo} unsupported type: ${n}`);return i(r,n,e,t)}function TO(r,e){e.mapSorter&&r.sort(e.mapSorter)}function _O(r,e){if(r[0]instanceof F&&e[0]instanceof F){let t=r[0],n=e[0];return t._keyBytes||(t._keyBytes=kv(t.value)),n._keyBytes||(n._keyBytes=kv(n.value)),B1(t._keyBytes,n._keyBytes)}throw new Error("rfc8949MapSorter: complex key types are not supported yet")}function kv(r){return T6(r,SO,Cv)}function Rv(r,e,t,n){if(Array.isArray(e))for(let o of e)Rv(r,o,t,n);else t[e.type.major](r,e,n)}var Fte=w.uint.majorEncoded,$te=w.negint.majorEncoded,Vte=w.bytes.majorEncoded,Kte=w.string.majorEncoded,Hte=w.array.majorEncoded,qte=w.float.majorEncoded|w6,zte=w.float.majorEncoded|b6,Wte=w.float.majorEncoded|x6,Gte=w.float.majorEncoded|E6,jte=BigInt(-1),Yte=BigInt(1);function T6(r,e,t,n){let o=n instanceof Uint8Array,i=o?new M1(n):AO,s=Ic(r,t);if(!Array.isArray(s)&&t.quickEncodeToken){let a=t.quickEncodeToken(s);if(a)return o?(i.push(a),i.toBytes()):a;let c=e[s.type.major];if(c.encodedSize){let l=c.encodedSize(s,t);if(o||(i=new Fu(l)),c(i,s,t),i.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${s} was wrong`);return o?i.toBytes():Gs(i.chunks[0])}}return i.reset(),Rv(i,s,e,t),i.toBytes(!0)}var IO={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},W1=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=Ln[e];if(t===void 0){let n=G[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}},Oi=Symbol.for("DONE"),kc=Symbol.for("BREAK");function kO(r,e,t){let n=[];for(let o=0;o<r.value;o++){let i=Bi(e,t);if(i===kc){if(r.value===1/0)break;throw new Error(`${J} got unexpected break to lengthed array`)}if(i===Oi)throw new Error(`${J} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=i}return n}function CO(r,e,t){let n=t.useMaps===!0,o=t.rejectDuplicateMapKeys===!0,i=n?void 0:{},s=n?new Map:void 0;for(let a=0;a<r.value;a++){let c=Bi(e,t);if(c===kc){if(r.value===1/0)break;throw new Error(`${J} got unexpected break to lengthed map`)}if(c===Oi)throw new Error(`${J} found map but not enough entries (got ${a} [no key], expected ${r.value})`);if(!n&&typeof c!="string")throw new Error(`${J} non-string keys not supported (got ${typeof c})`);if(o&&(n&&s.has(c)||!n&&Object.hasOwn(i,c)))throw new Error(`${J} found repeat map key "${c}"`);let l=Bi(e,t);if(l===Oi)throw new Error(`${J} found map but not enough entries (got ${a} [no value], expected ${r.value})`);n?s.set(c,l):i[c]=l}return n?s:i}function*RO(r,e,t){for(let n=0;n<r.value;n++){let o=Bi(e,t);if(o===kc){if(r.value===1/0)break;throw new Error(`${J} got unexpected break to lengthed map`)}if(o===Oi)throw new Error(`${J} found map but not enough entries (got ${n} [no key], expected ${r.value})`);let i=Bi(e,t);if(i===Oi)throw new Error(`${J} found map but not enough entries (got ${n} [no value], expected ${r.value})`);yield[o,i]}}function PO(r,e){let t=!1,n=function(){if(t)throw new Error(`${J} tag decode() may only be called once`);t=!0;let o=Bi(r,e);if(o===Oi)throw new Error(`${J} tag content missing`);if(o===kc)throw new Error(`${J} got unexpected break in tag content`);return o};return n.entries=function(){if(t)throw new Error(`${J} tag decode() may only be called once`);t=!0;let o=r.next();if(!w.equals(o.type,w.map))throw new Error(`${J} entries() requires map content, got ${o.type.name}`);let i=[];for(let s of RO(o,r,e))i.push(s);return i},Object.defineProperty(n,"_called",{get(){return t},enumerable:!1}),n}function Bi(r,e){if(r.done())return Oi;let t=r.next();if(w.equals(t.type,w.break))return kc;if(t.type.terminal)return t.value;if(w.equals(t.type,w.array))return kO(t,r,e);if(w.equals(t.type,w.map))return CO(t,r,e);if(w.equals(t.type,w.tag)){if(e.tags&&typeof e.tags[t.value]=="function"){let n=PO(r,e),o=e.tags[t.value](n);if(!n._called)throw new Error(`${J} tag decoder must call decode() or entries()`);return o}throw new Error(`${J} tag not supported (${t.value})`)}throw new Error("unsupported")}function _6(r,e){if(!(r instanceof Uint8Array))throw new Error(`${J} data to decode must be a Uint8Array`);e=Object.assign({},IO,e);let t=Gs(r),n=e.tokenizer||new W1(t,e),o=Bi(n,e);if(o===Oi)throw new Error(`${J} did not find any content to decode`);if(o===kc)throw new Error(`${J} got unexpected break`);return[o,r.subarray(n.pos())]}function I6(r,e){let[t,n]=_6(r,e);if(n.length>0)throw new Error(`${J} too many terminals, data makes no sense`);return t}var G1=class r{constructor(e,t){if(typeof e!="number"||!Number.isInteger(e)||e<0)throw new TypeError("Tagged: tag must be a non-negative integer");this.tag=e,this.value=t}static decoder(e){return t=>new r(e,t())}static preserve(...e){let t={};for(let n of e)t[n]=r.decoder(n);return t}};Object.defineProperty(G1.prototype,Symbol.toStringTag,{value:"Tagged"});var k6=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(w.equals(t.type,w.array)&&(t.elements++,t.elements!==1&&e.push([44])),w.equals(t.type,w.map)&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[w.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)}[w.negint.major](e,t){this[w.uint.major](e,t)}[w.bytes.major](e,t){throw new Error(`${Vo} unsupported type: Uint8Array`)}[w.string.major](e,t){this.prefix(e);let n=Uu(JSON.stringify(t.value));e.push(n.length>32?Gs(n):n)}[w.array.major](e,t){this.prefix(e),this.inRecursive.push({type:w.array,elements:0}),e.push([91])}[w.map.major](e,t){this.prefix(e),this.inRecursive.push({type:w.map,elements:0}),e.push([123])}[w.tag.major](e,t){}[w.float.major](e,t){if(t.type.name==="break"){let s=this.inRecursive.pop();if(s){if(w.equals(s.type,w.array))e.push([93]);else if(w.equals(s.type,w.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(`${Vo} 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 LO(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${Vo} complex map keys are not supported`);let t=r[0],n=e[0];if(t.type!==w.string||n.type!==w.string)throw new Error(`${Vo} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${Vo} unexpected duplicate map keys, this is not supported`)}var DO={addBreakTokens:!0,mapSorter:LO};function C6(r,e){return e=Object.assign({},DO,e),T6(r,new k6,e)}var Cc=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 F(w.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 F(w.float,s,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(s)?new F(s>=0?w.uint:w.negint,s,this._pos-e):new F(s>=0?w.uint:w.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 F(w.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 F(w.string,DE(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 F(w.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new F(w.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new F(w.null,null,4);case 102:return this.expect([102,97,108,115,101]),new F(w.false,!1,5);case 116:return this.expect([116,114,117,101]),new F(w.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 F(w.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 F(w.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 F(w.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 F(w.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 R6(r,e){return e=Object.assign({tokenizer:new Cc(r,e)},e),I6(r,e)}function OO(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function BO(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=Z.asCID(r);if(!e)return null;let t=e.toString();return[new F(w.map,1/0,1),new F(w.string,"/",1),new F(w.string,t,t.length),new F(w.break,void 0,1)]}function j1(r){let e=mt.encode(r).slice(1);return[new F(w.map,1/0,1),new F(w.string,"/",1),new F(w.map,1/0,1),new F(w.string,"bytes",5),new F(w.string,e,e.length),new F(w.break,void 0,1),new F(w.break,void 0,1)]}function Dn(r){return j1(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function MO(r){return j1(new Uint8Array(r))}function UO(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function FO(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 $O={typeEncoders:{Object:BO,Buffer:j1,Uint8Array:j1,Int8Array:Dn,Uint16Array:Dn,Int16Array:Dn,Uint32Array:Dn,Int32Array:Dn,Float32Array:Dn,Float64Array:Dn,Uint8ClampedArray:Dn,BigInt64Array:Dn,BigUint64Array:Dn,DataView:Dn,ArrayBuffer:MO,undefined:UO,number:FO}},P6=class extends Cc{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(w.equals(e.type,w.map)){let t=this._next();if(w.equals(t.type,w.string)&&t.value==="/"){let n=this._next();if(w.equals(n.type,w.string)){let o=this._next();if(!w.equals(o.type,w.break))throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new F(w.tag,42,0)}if(w.equals(n.type,w.map)){let o=this._next();if(w.equals(o.type,w.string)&&o.value==="bytes"){let i=this._next();if(w.equals(i.type,w.string)){for(let a=0;a<2;a++){let c=this._next();if(!w.equals(c.type,w.break))throw new Error("Invalid encoded Bytes form")}let s=mt.decode(`m${i.value}`);return new F(w.bytes,s,i.value.length)}this.tokenBuffer.push(i)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},Pv={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:{42:r=>Z.parse(r())}},VO="dag-json",L6=297,Lv=r=>C6(r,$O),Dv=r=>{let e=OO(r),t=Object.assign(Pv,{tokenizer:new P6(e,Pv)});return R6(e,t)},KO=r=>HO.decode(Lv(r));var HO=new TextDecoder,qO=r=>Dv(zO.encode(r)),zO=new TextEncoder;var F6={};ht(F6,{code:()=>U6,createLink:()=>Hv,createNode:()=>Kv,decode:()=>oB,encode:()=>nB,name:()=>rB,prepare:()=>B6,validate:()=>M6});var WO=new TextDecoder;function N6(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 Y1(r,e){let t;[t,e]=N6(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 Nv(r,e){let t;return[t,e]=N6(r,e),[t&7,t>>3,e]}function GO(r){let e={},t=r.length,n=0;for(;n<t;){let o,i;if([o,i,n]=Nv(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]=Y1(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]=Y1(r,n),e.Name=WO.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]=N6(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 Ov(r){let e=r.length,t=0,n,o=!1,i;for(;t<e;){let a,c;if([a,c,t]=Nv(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]=Y1(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]=Y1(r,t),n.push(GO(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 Mv=new TextEncoder,Bv=2**32,jO=2**31;function YO(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=Hu(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=Mv.encode(r.Name);t-=n.length,e.set(n,t),t=Hu(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=Hu(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function Uv(r){let e=QO(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=Hu(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let i=YO(r.Links[o],t.subarray(0,n));n-=i,n=Hu(t,n,i)-1,t[n]=18}return t}function XO(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+Rc(t)}if(typeof r.Name=="string"){let t=Mv.encode(r.Name).length;e+=1+t+Rc(t)}return typeof r.Tsize=="number"&&(e+=1+Rc(r.Tsize)),e}function QO(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+Rc(t)}if(r.Links)for(let t of r.Links){let n=XO(t);e+=1+n+Rc(n)}return e}function Hu(r,e,t){e-=Rc(t);let n=e;for(;t>=jO;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function Rc(r){return r%2===0&&r++,Math.floor((ZO(r)+6)/7)}function ZO(r){let e=0;return r>=Bv&&(r=Math.floor(r/Bv),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+JO[r]}var JO=[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 eB=["Data","Links"],tB=["Hash","Name","Tsize"],O6=new TextEncoder;function $v(r,e){if(r===e)return 0;let t=r.Name?O6.encode(r.Name):[],n=e.Name?O6.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 Fv(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function Vv(r){if(typeof r.asCID=="object"){let t=Z.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=Z.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=Z.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=Z.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 B6(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=O6.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(Vv),e.Links.sort($v);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function M6(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!Fv(r,eB))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(!Fv(t,tB))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&&$v(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function Kv(r,e=[]){return B6({Data:r,Links:e})}function Hv(r,e,t){return Vv({Hash:t,Name:r,Tsize:e})}function qv(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var rB="dag-pb",U6=112;function nB(r){M6(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),Uv(e)}function oB(r){let e=qv(r),t=Ov(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let i={};try{i.Hash=Z.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 Pc(r){return r?.then!=null}function zv(r=[],e){let t={[U6]:F6,[vo]:ds,[m6]:g6,[L6]:D6,[Pg]:If};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Pc(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new Au(`Could not load codec for ${n}`)}}function Wv(r=[],e){let t={[st.code]:st,[Cf.code]:Cf,[gt.code]:gt};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Pc(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new Su(`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 un=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 Ho=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,bytes:o}of e)await this.put(n,o,t),yield n}get(e,t){throw new Error(".get is not implemented")}async*getMany(e,t){for await(let n of e)yield{cid:n,bytes: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 X1=0,Lc=class extends Error{static name="IdentityHashDigestTooLongError";name="IdentityHashDigestTooLongError"},Q1=class extends Ho{child;maxDigestLength;constructor(e,t){super(),this.child=e,this.maxDigestLength=t?.maxDigestLength}put(e,t,n){if(e.multihash.code===X1){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new Lc(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);return n?.signal?.throwIfAborted(),e}return this.child==null?(n?.signal?.throwIfAborted(),e):this.child.put(e,t,n)}async*get(e,t){if(e.multihash.code===X1){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new Lc(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);t?.signal?.throwIfAborted(),yield e.multihash.digest;return}if(this.child==null)throw t?.signal?.throwIfAborted(),new un;yield*this.child.get(e,t)}has(e,t){if(e.multihash.code===X1){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new Lc(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);return t?.signal?.throwIfAborted(),!0}return this.child==null?(t?.signal?.throwIfAborted(),!1):this.child.has(e,t)}delete(e,t){if(e.code===X1){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new Lc(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);t?.signal?.throwIfAborted();return}if(this.child!=null)return this.child.delete(e,t)}async*getAll(e){this.child!=null&&(yield*this.child.getAll(e)),e?.signal?.throwIfAborted()}};function iB(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 Dc=iB;function sB(r){return r[Symbol.asyncIterator]!=null}function aB(r,e){let t=0;if(sB(r))return(async function*(){for await(let c of r)await e(c,t++)&&(yield c)})();let n=Dc(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(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 Nn=aB;function cB(r){return r[Symbol.asyncIterator]!=null}function Gv(r){return r?.then!=null}function lB(r,e){let t=0;if(cB(r))return(async function*(){for await(let c of r){let l=e(c,t++);Gv(l)&&await l,yield c}})();let n=Dc(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(let c of n){let l=e(c,t++);Gv(l)&&await l,yield c}})();let a=e;return(function*(){yield o;for(let c of n)a(c,t++),yield c})()}var $6=lB;var uB=128,Nc=class{child;getHasher;log;logger;blockBrokers;constructor(e,t={}){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.blockBrokers=e.blockBrokers,this.child=new Q1(e.blockstore,{maxDigestLength:t.maxIdentityHashDigestLength??uB}),this.getHasher=e.getHasher}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new O("blocks:put:duplicate",e)),e):(n.onProgress?.(new O("blocks:put:providers:notify",e)),await Promise.all(this.blockBrokers.map(async o=>o.announce?.(e,n))),n.onProgress?.(new O("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=Nn(e,async({cid:i})=>{let s=await this.child.has(i,t);return s&&t.onProgress?.(new O("blocks:put-many:duplicate",i)),!s}),o=$6(n,async({cid:i})=>{t.onProgress?.(new O("blocks:put-many:providers:notify",i)),await Promise.all(this.blockBrokers.map(async s=>s.announce?.(i,t)))});t.onProgress?.(new O("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(o,t)}async*get(e,t={}){let n=await this.child.has(e,t),o=t.offline===!0;if(!n){if(o)throw new Eu("The block was present in the blockstore and the node is running offline so cannot fetch it");let i=await this.getHasher(e.multihash.code);t?.signal?.throwIfAborted(),t.onProgress?.(new O("blocks:get:providers:get",e));let s=await jv(e,this.blockBrokers,i,{...t,log:this.log});t.onProgress?.(new O("blocks:get:blockstore:put",e)),await this.child.put(e,s,t),t.onProgress?.(new O("blocks:get:providers:notify",e)),await Promise.all(this.blockBrokers.map(async a=>a.announce?.(e,t))),yield s;return}t.onProgress?.(new O("blocks:get:blockstore:get",e)),yield*this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new O("blocks:get-many:blockstore:get-many")),yield*this.child.getMany($6(e,async n=>{let o=await this.child.has(n,t),i=t.offline===!0;if(!o){if(i)throw new Eu("The block was present in the blockstore and the node is running offline so cannot fetch it");let s=await this.getHasher(n.multihash.code);t?.signal?.throwIfAborted(),t.onProgress?.(new O("blocks:get-many:providers:get",n));let a=await jv(n,this.blockBrokers,s,{...t,log:this.log});t.onProgress?.(new O("blocks:get-many:blockstore:put",n)),await this.child.put(n,a,t),t.onProgress?.(new O("blocks:get-many:providers:notify",n)),await Promise.all(this.blockBrokers.map(async c=>c.announce?.(n,t)))}}))}async delete(e,t={}){t.onProgress?.(new O("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new O("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 O("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}};async function jv(r,e,t,n){let o=fB(r,t),i=new AbortController,s=we([i.signal,n.signal]);i.signal;let a=[];for(let c of e)dB(c)&&a.push(c);if(a.length===0)throw new Hs(`No block brokers capable of retrieving blocks are configured, the CID ${r} cannot be fetched from the network`);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),n.signal?.throwIfAborted(),l=!0}});return l||(await o(u),n.signal?.throwIfAborted()),u}catch(l){throw n.log.error("could not retrieve verified block for %c from %s - %e",r,c.name,l),l}}))}catch(c){throw new e1(c.errors,`Failed to load block for ${r}`)}finally{i.abort(),s.clear()}}function dB(r){return typeof r.retrieve=="function"}var fB=(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,{truncate:r.multihash.digest.byteLength});if(Pc(o)?n=await o:n=o,!se(n.digest,r.multihash.digest))throw new ai("Hash of downloaded block did not match multihash from passed CID")}};var Z1=class extends Nc{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 addPeer(e,t){await Promise.all(this.blockBrokers.map(n=>n.addPeer(e,t)))}async put(e,t,n={}){let o=we([this.closeController.signal,n.signal]);try{return await super.put(e,t,{...n,signal:o})}finally{o.clear()}}async*putMany(e,t={}){let n=we([this.closeController.signal,t.signal]);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async*get(e,t={}){let n=we([this.closeController.signal,t.signal]);try{yield*super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=we([this.closeController.signal,t.signal]);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=we([this.closeController.signal,t.signal]);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=we([this.closeController.signal,t.signal]);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=we([this.closeController.signal,t.signal]);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=we([this.closeController.signal,e.signal]);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};var J1=class extends Nc{started;constructor(e,t={}){super(e,t),this.started=!1}isStarted(){return this.started}async start(){await Et(this.child,...this.blockBrokers),this.started=!0}async stop(){await Tt(this.child,...this.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){if(this.blockBrokers.length===0)throw new Hs("No block brokers configured");let n=this.blockBrokers.map(o=>o.createSession?.(t)).filter(o=>o!=null);if(n.length===0)throw new Hs(`No configured block brokers support sessions - tried ${this.blockBrokers.map(o=>o.name).join(", ")}`);return new Z1({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}};var Ys=class extends ue{initialPeerSearchComplete;requests;logName;log;logger;minProviders;maxProviders;providers;evictionFilter;initialProviders;cidPeerFilterSize;constructor(e,t){super(),this.logName=t.name,this.logger=e.logger,this.log=e.logger.forComponent(this.logName),this.requests=new Map,this.minProviders=t.minProviders??1,this.maxProviders=t.maxProviders??5,this.cidPeerFilterSize=t.cidPeerFilterSize??100,this.providers=[],this.evictionFilter=Ut(this.maxProviders),this.initialProviders=[...t.providers??[]]}async retrieve(e,t={}){let n=mt.encode(e.multihash.bytes),o=this.requests.get(n);if(o!=null)return this.log("join existing request for %c",e),o.observers++,o.promise;let i=Se(),s={promise:i.promise,observers:1,queryFilter:Ut(this.cidPeerFilterSize)};this.requests.set(n,s);let a=!1;this.initialPeerSearchComplete==null&&(a=!0,this.log=this.logger.forComponent(`${this.logName}:${e}`),this.initialPeerSearchComplete=this.findProviders(e,this.minProviders,t));let c=!1,l=new Vt({concurrency:this.maxProviders});l.addEventListener("failure",f=>{this.log.error("error querying provider %s, evicting from session - %e",f.detail.job.options.provider,f.detail.error),this.evict(f.detail.job.options.provider)}),l.addEventListener("success",f=>{c=!0,i.resolve(f.detail.result)}),l.addEventListener("idle",()=>{if(c){this.log.trace("session idle, found block");return}if(t.signal?.aborted===!0){this.log.trace("session idle, signal aborted");return}Promise.resolve().then(async()=>{this.log("no session peers had block for for %c, finding new providers",e);for(let f=0;f<this.minProviders&&this.providers.length!==0;f++){let h=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(h)}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(f=>{this.log.error("could not find new providers for %c - %e",e,f),i.reject(f)})});let u=f=>{let h=this.toFilterKey(f.detail);s.queryFilter.has(h)||(s.queryFilter.add(h),this.emitFoundProviderProgressEvent(e,f.detail,t),l.add(async()=>this.queryProvider(e,f.detail,t),{provider:f.detail}).catch(p=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c - %e",e,p)}))};if(this.addEventListener("provider",u),a)try{await qe(this.initialPeerSearchComplete,t.signal),a&&this.log("found initial session peers for %c",e)}catch(f){throw a&&this.log("failed to find initial session peers for %c - %e",e,f),this.requests.delete(n),s.observers>1&&i.reject(f),f}Promise.all([...this.providers].filter(f=>{let h=this.toFilterKey(f),p=s.queryFilter.has(h);return p||s.queryFilter.add(this.toFilterKey(f)),!p}).map(async f=>l.add(async()=>this.queryProvider(e,f,t),{provider:f}))).catch(f=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c - %e",e,f)});let d=()=>{i.reject(new sr(t.signal?.reason??"Session aborted")),l.abort()};t.signal?.addEventListener("abort",d);try{return await qe(i.promise,t.signal)}finally{this.removeEventListener("provider",u),t.signal?.removeEventListener("abort",d),l.clear(),this.requests.delete(n)}}evict(e){this.evictionFilter.add(this.toFilterKey(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.toFilterKey(e))}hasProvider(e){return!!(this.providers.find(t=>this.equals(t,e))!=null||this.isEvicted(e))}async addPeer(e,t){let n=await this.convertToProvider(e,"manually-added",t);n==null||this.hasProvider(n)||(this.providers.push(n),this.safeDispatchEvent("provider",{detail:n}))}async findProviders(e,t,n){let o=Se(),i=0;return Promise.resolve().then(async()=>{if(this.log("finding %d-%d new provider(s) for %c - %d initial providers",t,this.maxProviders,e,this.initialProviders.length),this.initialProviders.length>0)for(;i<t&&this.initialProviders.length>0;){let s=this.initialProviders.pop();if(s==null)break;let a=await this.convertToProvider(s,"manual",n);if(n.signal?.aborted===!0)break;if(a!=null&&!this.hasProvider(a)&&(this.log("found %d/%d new providers",i,this.maxProviders),this.providers.push(a),this.safeDispatchEvent("provider",{detail:a}),i++,i===t&&(this.log("session is ready with %d peer(s), only initial peers present",t),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",i);break}}if(i<this.maxProviders)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 with %d peer(s), new peers present",t),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 vu(`Found ${i} of ${t} ${this.name} providers for ${e}`)}).catch(s=>{this.log.error("error searching routing for potential session peers for %c - %e",e,s),o.reject(s)}),o.promise}};var ep=class{libp2p;blockstore;datastore;events;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??e.libp2p.logger,this.log=this.logger.forComponent("helia"),this.getHasher=Wv(e.hashers,e.loadHasher),this.getCodec=zv(e.codecs,e.loadCodec),this.dns=e.dns??Df(),this.metrics=e.metrics,this.libp2p=e.libp2p,this.events=new ue;let t={blockstore:e.blockstore,datastore:e.datastore,logger:this.logger,libp2p:this.libp2p,blockBrokers:[],getHasher:this.getHasher,getCodec:this.getCodec,dns:this.dns,metrics:this.metrics,...e.components??{}};this.routing=t.routing=new n1(t,{routers:(e.routers??[]).flatMap(o=>{typeof o=="function"&&(o=o(t));let i=[o],s=hB(o);s!=null&&i.push(s);let a=pB(o);return a!=null&&i.push(a),i}),providerLookupConcurrency:e.providerLookupConcurrency}),t.blockBrokers=e.blockBrokers.map(o=>o(t));let n=new J1(t,e);this.pins=new r1(e.datastore,n,this.getCodec),this.blockstore=new x1(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore}async start(){await bx(this.datastore),await Et(this.blockstore,this.datastore,this.routing,this.libp2p),this.events.dispatchEvent(new CustomEvent("start",{detail:this}))}async stop(){await Tt(this.blockstore,this.datastore,this.routing,this.libp2p),this.events.dispatchEvent(new CustomEvent("stop",{detail:this}))}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,o=this.blockstore.unwrap();this.log("gc start"),await yr(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 O("helia:gc:deleted",i))}catch(s){n.log.error("error during gc - %e",s),e.onProgress?.(new O("helia:gc:error",s))}})()))}finally{t()}this.log("gc finished")}};function hB(r){return r?.[bo]}function pB(r){return r?.[Eo]}function mB(r){return r[Symbol.asyncIterator]!=null}function gB(r,e){let t=0;if(mB(r))return(async function*(){for await(let c of r)yield e(c,t++)})();let n=Dc(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(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 dn=gB;function yB(r){return r[Symbol.asyncIterator]!=null}function wB(r,e){return yB(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 Mi=wB;var qu="/ipfs/bitswap/1.2.0";var it;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(it||(it={}));var V6;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(V6||(V6={}));(function(r){r.codec=()=>lt(V6)})(it||(it={}));var Xs;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.cid!=null&&i.cid.byteLength>0&&(s.uint32(10),s.bytes(i.cid)),i.priority!=null&&i.priority!==0&&(s.uint32(16),s.int32(i.priority)),i.cancel!=null&&(s.uint32(24),s.bool(i.cancel)),i.wantType!=null&&(s.uint32(32),it.codec().encode(i.wantType,s)),i.sendDontHave!=null&&(s.uint32(40),s.bool(i.sendDontHave)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={cid:de(0),priority:0},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.cid=i.bytes();break}case 2:{c.priority=i.int32();break}case 3:{c.cancel=i.bool();break}case 4:{c.wantType=it.codec().decode(i);break}case 5:{c.sendDontHave=i.bool();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.cid`,value:i.bytes()};break}case 2:{yield{field:`${a}.priority`,value:i.int32()};break}case 3:{yield{field:`${a}.cancel`,value:i.bool()};break}case 4:{yield{field:`${a}.wantType`,value:it.codec().decode(i)};break}case 5:{yield{field:`${a}.sendDontHave`,value:i.bool()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Xs||(Xs={}));var zu;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{if(a.lengthDelimited!==!1&&s.fork(),i.entries!=null&&i.entries.length>0)for(let c of i.entries)s.uint32(10),Xs.codec().encode(c,s);i.full!=null&&(s.uint32(16),s.bool(i.full)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={entries:[]},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{if(a.limits?.entries!=null&&c.entries.length===a.limits.entries)throw new Ee('Decode error - repeated field "entries" had too many elements');c.entries.push(Xs.codec().decode(i,i.uint32(),{limits:a.limits?.entries$}));break}case 2:{c.full=i.bool();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l={entries:0},u=s==null?i.len:i.pos+s;for(;i.pos<u;){let d=i.uint32();switch(d>>>3){case 1:{if(c.limits?.entries!=null&&l.entries===c.limits.entries)throw new Ee('Streaming decode error - repeated field "entries" had too many elements');for(let f of Xs.codec().stream(i,i.uint32(),`${a}.entries[]`,{limits:c.limits?.entries$}))yield{...f,index:l.entries};l.entries++;break}case 2:{yield{field:`${a}.full`,value:i.bool()};break}default:{i.skipType(d&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(zu||(zu={}));var Qs;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.prefix!=null&&i.prefix.byteLength>0&&(s.uint32(10),s.bytes(i.prefix)),i.data!=null&&i.data.byteLength>0&&(s.uint32(18),s.bytes(i.data)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={prefix:de(0),data:de(0)},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.prefix=i.bytes();break}case 2:{c.data=i.bytes();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.prefix`,value:i.bytes()};break}case 2:{yield{field:`${a}.data`,value:i.bytes()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Qs||(Qs={}));var zr;(function(r){r.HaveBlock="HaveBlock",r.DoNotHaveBlock="DoNotHaveBlock"})(zr||(zr={}));var tp;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DoNotHaveBlock=1]="DoNotHaveBlock"})(tp||(tp={}));(function(r){r.codec=()=>lt(tp)})(zr||(zr={}));var Zs;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.cid!=null&&i.cid.byteLength>0&&(s.uint32(10),s.bytes(i.cid)),i.type!=null&&tp[i.type]!==0&&(s.uint32(16),zr.codec().encode(i.type,s)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={cid:de(0),type:zr.HaveBlock},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.cid=i.bytes();break}case 2:{c.type=zr.codec().decode(i);break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.cid`,value:i.bytes()};break}case 2:{yield{field:`${a}.type`,value:zr.codec().decode(i)};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Zs||(Zs={}));var Js;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{if(a.lengthDelimited!==!1&&s.fork(),i.wantlist!=null&&(s.uint32(10),zu.codec().encode(i.wantlist,s)),i.blocks!=null&&i.blocks.length>0)for(let c of i.blocks)s.uint32(26),Qs.codec().encode(c,s);if(i.blockPresences!=null&&i.blockPresences.length>0)for(let c of i.blockPresences)s.uint32(34),Zs.codec().encode(c,s);i.pendingBytes!=null&&i.pendingBytes!==0&&(s.uint32(40),s.int32(i.pendingBytes)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={blocks:[],blockPresences:[],pendingBytes:0},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.wantlist=zu.codec().decode(i,i.uint32(),{limits:a.limits?.wantlist});break}case 3:{if(a.limits?.blocks!=null&&c.blocks.length===a.limits.blocks)throw new Ee('Decode error - repeated field "blocks" had too many elements');c.blocks.push(Qs.codec().decode(i,i.uint32(),{limits:a.limits?.blocks$}));break}case 4:{if(a.limits?.blockPresences!=null&&c.blockPresences.length===a.limits.blockPresences)throw new Ee('Decode error - repeated field "blockPresences" had too many elements');c.blockPresences.push(Zs.codec().decode(i,i.uint32(),{limits:a.limits?.blockPresences$}));break}case 5:{c.pendingBytes=i.int32();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l={blocks:0,blockPresences:0},u=s==null?i.len:i.pos+s;for(;i.pos<u;){let d=i.uint32();switch(d>>>3){case 1:{yield*zu.codec().stream(i,i.uint32(),`${a}.wantlist`,{limits:c.limits?.wantlist});break}case 3:{if(c.limits?.blocks!=null&&l.blocks===c.limits.blocks)throw new Ee('Streaming decode error - repeated field "blocks" had too many elements');for(let f of Qs.codec().stream(i,i.uint32(),`${a}.blocks[]`,{limits:c.limits?.blocks$}))yield{...f,index:l.blocks};l.blocks++;break}case 4:{if(c.limits?.blockPresences!=null&&l.blockPresences===c.limits.blockPresences)throw new Ee('Streaming decode error - repeated field "blockPresences" had too many elements');for(let f of Zs.codec().stream(i,i.uint32(),`${a}.blockPresences[]`,{limits:c.limits?.blockPresences$}))yield{...f,index:l.blockPresences};l.blockPresences++;break}case 5:{yield{field:`${a}.pendingBytes`,value:i.int32()};break}default:{i.skipType(d&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Js||(Js={}));function Yv(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 rp=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var bB=4193648,xB=bB+16;function*Xv(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=Js.encode(l).byteLength,{added:d,hasMore:f,newSize:h}=K6(o,l.blocks,a,e,u,EB);a+=d,u=h;let p=f;({added:d,hasMore:f,newSize:h}=K6(n,l.blockPresences,s,e,u,vB)),s+=d,u=h;let y=f;if({added:d,hasMore:f,newSize:h}=K6(t,l.wantlist.entries,i,e,u,SB),i+=d,u=h,c=!p&&!y&&!f,c||(l.wantlist.full=!1),yield Js.encode(l),c)break}}function K6(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>xB)throw new rp("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 EB(r){return H6(3,Qs.encode(r))}function vB(r){return H6(4,Zs.encode(r))}function SB(r){return H6(1,Xs.encode(r))}function H6(r,e){let t=ye(r),n=ye(e.byteLength);return t+n+e.byteLength}var np=class extends ue{log;libp2p;routing;protocols;running;maxInboundStreams;maxOutboundStreams;messageReceiveTimeout;messageSendTimeout;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??[qu],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??1e4,this.messageSendTimeout=t.messageSendTimeout??1e4,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 Ht({concurrency:t.messageSendConcurrency??50,metrics:e.metrics,metricName:"helia_bitswap_message_send_queue"})}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,t){this.running&&Promise.resolve().then(async()=>{this.log("incoming new bitswap %s stream from %p",e.protocol,t.remotePeer);let n=()=>{e.status==="open"?e.abort(new zn(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",e.status)},o=AbortSignal.timeout(this.messageReceiveTimeout);o.addEventListener("abort",n),await e.close({signal:o});let i=$t();e.addEventListener("message",s=>{i.push(s.data)}),e.addEventListener("remoteCloseWrite",()=>{i.end()}),e.addEventListener("close",s=>{s.error!=null&&i.end(s.error)});for await(let s of Vs(i,{maxDataLength:this.maxIncomingMessageSize}))try{let a=Js.decode(s);this.log("incoming new bitswap %s message from %p on stream",e.protocol,t.remotePeer,e.id),this.safeDispatchEvent("bitswap:message",{detail:{peer:t.remotePeer,message:a,connection:t}}),o.removeEventListener("abort",n),o=AbortSignal.timeout(this.messageReceiveTimeout),o.addEventListener("abort",n)}catch(a){this.log.error("error reading incoming bitswap message from %p on stream - %e",t.remotePeer,e.id,a),e.abort(a);break}}).catch(n=>{this.log.error("error handling incoming stream from %p - %e",t.remotePeer,n),e.abort(n)})}async*findProviders(e,t){t?.onProgress?.(new O("bitswap:find-providers",e));for await(let n of this.routing.findProviders(e,t)){if(!await this.libp2p.isDialable(n.multiaddrs,{runOnLimitedConnection:this.runOnLimitedConnections})){this.log("skipping peer %p as they are not dialable - %a",n.id,n.multiaddrs);continue}t?.onProgress?.(new O("bitswap:found-provider",{type:"bitswap",cid:e,provider:n,routing:n.routing})),yield n}}async findAndConnect(e,t){t?.providers!=null&&await Promise.all(t.providers.map(async n=>this.connectTo(n).catch(o=>{this.log.error("could not connect to supplied provider - %e",o)}))),await yr(dn(Mi(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=Yv(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 O("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,qu,i);await a.closeRead(i);try{for(let c of Xv(s,this.maxOutgoingMessageSize))a.send(Uo.single(c))||await a.onDrain(i);await a.close(i)}catch(c){i?.onProgress?.(new O("bitswap:network:send-wantlist:error",{peer:e,error:c})),this.log.error("error sending message to %p - %e",e,c),a.abort(c)}this._updateSentStats(s.blocks)},{onProgress:n?.onProgress,peerId:e,signal:n?.signal??AbortSignal.timeout(this.messageSendTimeout),message:t})}async connectTo(e,t){if(!this.running)throw new gn("Network isn't running");t?.onProgress?.(new O("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),hr(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(qu))return!0;throw new Ta(`${e} did not support ${qu}`)}})]);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)}};var Qv=Symbol.for("nodejs.util.inspect.custom"),DB=114,Wu=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()})`}[vf]=!0;toString(){return this.string==null&&(this.string=Ge.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return Z.createV1(DB,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return se(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return se(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[Qv](){return`PeerId(${this.toString()})`}},Gu=class extends Wu{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},ju=class extends Wu{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},Yu=class extends Wu{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},NB=2336,Xu=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=gt.digest(C(this.url))}[Qv](){return`PeerId(${this.url})`}[vf]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return Z.createV1(NB,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=N(e)),e.toString()===this.toString())}};var OB=114,Zv=2336;function Xe(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=He(Ge.decode(`z${r}`));else{if(r.startsWith("k51qzi5uqu5")||r.startsWith("kzwfwjn5ji4")||r.startsWith("k2k4r8")||r.startsWith("bafz"))return Wr(Z.parse(r));if(e==null)throw new _('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=He(e.decode(r))}return dt(t)}function so(r){if(r.type==="Ed25519")return new ju({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new Yu({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new Gu({multihash:r.toCID().multihash,publicKey:r});throw new yn}function Jv(r){return so(r.publicKey)}function dt(r){if(MB(r))return new Gu({multihash:r});if(BB(r))try{let e=Jf(r);if(e.type==="Ed25519")return new ju({multihash:r,publicKey:e});if(e.type==="secp256k1")return new Yu({multihash:r,publicKey:e})}catch{let t=N(r.digest);return new Xu(new URL(t))}throw new ai("Supplied PeerID Multihash is invalid")}function Wr(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==OB&&r.code!==Zv)throw new yf("Supplied PeerID CID is invalid");if(r.code===Zv){let e=N(r.multihash.digest);return new Xu(new URL(e))}return dt(r.multihash)}function BB(r){return r.code===gt.code}function MB(r){return r.code===st.code}function ea(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 op(r){let e=He(Ge.decode(`z${r}`));return dt(e)}var er=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 ea(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 ea(this.map.values(),e=>e.key)}values(){return ea(this.map.values(),e=>e.value)}get size(){return this.map.size}};var Gr=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 ea(this.set.entries(),e=>{let t=op(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=op(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return ea(this.set.values(),e=>op(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 q6(){return new Gr}var ip=class{filter;constructor(e,t){this.filter=Ut(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 z6(r,e=.001){return new ip(r,e)}var W6=class extends er{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 qo(r){let{name:e,metrics:t}=r,n;return t!=null?n=new W6({name:e,metrics:t}):n=new er,n}var zo=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=mt.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=mt.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=mt.encode(e.multihash.bytes);this.blocks.set(n,t)}};function UB(r){let e=new Uint8Array(r.reduce((n,o)=>n+ye(o),0)),t=0;for(let n of r)e=Zt(n,e,t),t+=ye(n);return e}var eS=UB;function G6(r){return eS([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var sp=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;log;doNotResendBlockWindow;maxWantListSize;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,this.doNotResendBlockWindow=t.doNotResendBlockWindow??5e3,this.maxWantListSize=t.maxWantListSize??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)}removeExpiredWants(){this.wants.forEach((e,t)=>{e.expires!=null&&e.expires<Date.now()&&this.wants.delete(t)})}addWants(e){if(e==null)return;e.full===!0&&this.wants.forEach((n,o)=>{n.status==="want"&&this.wants.delete(o)});for(let n of e.entries){let o=Z.decode(n.cid),i=N(o.multihash.bytes,"base64");if(n.cancel===!0)this.log("peer %p cancelled want of block for %c",this.peerId,o),this.wants.delete(i);else{n.wantType===it.WantHave?this.log("peer %p wanted block presence for %c",this.peerId,o):this.log("peer %p wanted block for %c",this.peerId,o);let s=this.wants.get(i);if(s!=null){let a=s.status==="sent"||s.status==="sending",c=s.wantType===it.WantHave&&(n.wantType==null||n.wantType===it.WantBlock);a&&c&&(s.status="want"),s.priority=n.priority,s.wantType=n.wantType??it.WantBlock,s.sendDontHave=n.sendDontHave??!1;continue}this.wants.set(i,{cid:o,priority:n.priority,wantType:n.wantType??it.WantBlock,sendDontHave:n.sendDontHave??!1,status:"want",created:Date.now()})}}let t=[...this.wants.entries()].filter(([n,o])=>o.status==="want");t.length>this.maxWantListSize&&this.truncateWants(t)}truncateWants(e){e=e.sort((n,o)=>n[1].created<o[1].created?-1:o[1].created<n[1].created?1:0).sort((n,o)=>n[1].haveBlock===!1?-1:o[1].haveBlock===!1?1:0).sort((n,o)=>n[1].priority<o[1].priority?-1:o[1].priority<n[1].priority?1:0);let t=e.length-this.maxWantListSize;for(let n=0;n<t;n++)this.wants.delete(e[n][0])}getWants(){return[...this.wants.values()]}hasWant(e){let t=N(e.multihash.bytes,"base64");return this.wants.has(t)}async sendBlocksToPeer(e){let t=new zo,n=new Set;this.removeExpiredWants();let o=[...this.wants.entries()].filter(([i,s])=>s.status==="want");o.forEach(([i,s])=>{s.status="sending"});for(let[i,s]of o)try{let a=await Yh(this.blockstore.get(s.cid,e));if(s.status!=="sending")continue;s.wantType===it.WantHave?a.byteLength<this.maxSizeReplaceHasWithBlock?(this.log("sending have and block for %c",s.cid),n.add(i),t.addBlock(s.cid,{data:a,prefix:G6(s.cid)})):(this.log("sending have for %c",s.cid),t.addBlockPresence(s.cid,{cid:s.cid.bytes,type:zr.HaveBlock})):(this.log("sending block for %c",s.cid),n.add(i),t.addBlock(s.cid,{data:a,prefix:G6(s.cid)})),s.status="sent",s.expires=Date.now()+this.doNotResendBlockWindow}catch(a){if(a.name!=="NotFoundError")throw a;if(s.status="want",s.haveBlock=!1,this.log("do not have block for %c",s.cid),!s.sendDontHave||s.sentDoNotHave===!0)continue;s.sentDoNotHave=!0,t.addBlockPresence(s.cid,{cid:s.cid.bytes,type:zr.DoNotHaveBlock})}(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((i,s)=>i+s.data.byteLength,0)))}};var ap=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;doNotResendBlockWindow;maxWantListSize;log;logger;constructor(e,t={}){this.blockstore=e.blockstore,this.network=e.network,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock,this.doNotResendBlockWindow=t.doNotResendBlockWindow,this.maxWantListSize=t.maxWantListSize,this.log=e.logger.forComponent("helia:bitswap:peer-want-lists"),this.logger=e.logger,this.ledgerMap=qo({name:"helia_bitswap_ledger_map",metrics:e.metrics}),this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.connection.remotePeer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p - %e",n.detail.connection.remotePeer,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.removeExpiredWants(),t.getWants()}peers(){return Array.from(this.ledgerMap.values()).map(e=>e.peerId)}async receiveMessage(e,t){let n=this.ledgerMap.get(e);n==null&&(n=new sp({peerId:e,blockstore:this.blockstore,network:this.network,logger:this.logger},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock,doNotResendBlockWindow:this.doNotResendBlockWindow,maxWantListSize:this.maxWantListSize}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((o,i)=>o+i.data.byteLength,0)??0),n.removeExpiredWants(),n.addWants(t.wantlist),this.log("send blocks to peer"),await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=[];for(let o of this.ledgerMap.values())o.hasWant(e)&&n.push(o);await Promise.all(n.map(async o=>o.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};var j6=class extends Ys{name="bitswap-session";wantList;network;libp2p;constructor(e,t){super(e,{...t,name:"helia:bitswap:session"}),this.wantList=e.wantList,this.network=e.network,this.libp2p=e.libp2p}async queryProvider(e,t,n){this.log("sending WANT-BLOCK for %c to %p",e,t);let o=await this.wantList.wantSessionBlock(e,t.peerId,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{peerId:n.id,routing:n.routing,toString:()=>`Bitswap(${n.id})`}}toFilterKey(e){return e.peerId.toMultihash().bytes}equals(e,t){return e.peerId.equals(t.peerId)}async convertToProvider(e,t,n){if(At(e))return{peerId:e,routing:t,toString:()=>`Bitswap(${e})`};if(await this.libp2p.isDialable(e)!==!1)try{let o=await this.libp2p.dial(e,n);return{peerId:o.remotePeer,routing:t,toString:()=>`Bitswap(${o.remotePeer})`}}catch{}}emitFoundProviderProgressEvent(e,t,n){n?.onProgress?.(new O("bitswap:found-provider",{type:"bitswap",cid:e,provider:{id:t.peerId,multiaddrs:[],routing:t.routing},routing:t.routing}))}};function tS(r,e){return new j6(r,e)}var cp=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)}};function FB(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=Rr(r);e.push(t),r=r.slice(ye(t))}return e}var rS=FB;var lp=class extends ue{peers;wants;network;log;sendWantlistDebounce;sendMessagesTimeout;getHasher;sendingMessages;constructor(e,t={}){super(),this.peers=qo({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=wt({name:"helia_bitswap_wantlist",metrics:e.metrics}),this.network=e.network,this.sendWantlistDebounce=t.sendWantlistDebounce??10,this.log=e.logger.forComponent("helia:bitswap:wantlist"),this.getHasher=e.getHasher,this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.connection,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p - %e",n.detail.connection.remotePeer,o)})}),this.network.addEventListener("peer:connected",n=>{this.peerConnected(n.detail).catch(o=>{this.log.error("error processing newly connected bitswap peer %p - %e",n.detail,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}async addEntry(e,t){let n=N(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,priority:t.priority??1,wantType:t.wantType??it.WantBlock,cancel:!1,sendDontHave:!0,onProgress:[]},this.wants.set(n,o)),t.onProgress!=null&&o.onProgress.push({onProgress:t.onProgress,signal:t.signal}),o.wantType===it.WantHave&&t.wantType===it.WantBlock&&(o.wantType=it.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===it.WantBlock?(await hr(this,"block",t?.signal,{filter:a=>se(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await hr(this,"presence",t?.signal,{filter:s=>se(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",e)})},this.sendWantlistDebounce)}async sendMessages(){this.sendingMessages=Se(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new zo;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,{onProgress:i=>{this.wants.forEach(({onProgress:s})=>{s.forEach(({onProgress:a})=>{a(i)})})}});for(let i of n)t.add(i)}catch(i){this.log.error("error sending full wantlist to new peer - %e",i)}})).catch(e=>{this.log.error("error sending messages - %e",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=N(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new zo;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:it.WantHave,priority:1}),await this.network.sendMessage(t,o,n),(await hr(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&se(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:it.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new zo;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:it.WantBlock,priority:1}),await this.network.sendMessage(t,o,n),(await hr(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&se(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=N(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.remotePeer,t.blocks.length);let n=!1;for(let o of t.blocks){if(o.prefix==null||o.data==null)continue;let i=rS(o.prefix),s=i[0],a=i[1],c=i[2],l=i[3],u=c===st.code?st:await this.getHasher(c);if(u==null){this.log.error("unknown hash algorithm",c);continue}let d=u.digest(o.data,{truncate:l});d.then!=null&&(d=await d);let f=Z.create(s===0?0:1,a,d);this.log("received block from %p for %c",e.remotePeer,f),this.safeDispatchEvent("block",{detail:{sender:e.remotePeer,cid:f,block:o.data,connection:e}}),this.safeDispatchEvent("presence",{detail:{sender:e.remotePeer,cid:f,has:!0,block:o.data}});let h=N(f.multihash.bytes,"base64"),p=this.wants.get(h);p!=null&&(p.cancel=!0,n=!0)}for(let{cid:o,type:i}of t.blockPresences){let s=Z.decode(o);this.log("received %s from %p for %c",i,e.remotePeer,s),this.safeDispatchEvent("presence",{detail:{sender:e.remotePeer,cid:s,has:i===zr.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new zo(!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:it.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",e,o)}}peerDisconnected(e){this.peers.delete(e)}start(){}stop(){this.peers.clear(),clearTimeout(this.sendMessagesTimeout)}};var up=class{log;logger;stats;network;blockstore;peerWantLists;wantList;libp2p;constructor(e,t={}){this.logger=e.logger,this.log=e.logger.forComponent("helia:bitswap"),this.blockstore=e.blockstore,this.libp2p=e.libp2p,this.stats=new cp(e),this.network=new np(e,t),this.peerWantLists=new ap({...e,network:this.network},t),this.wantList=new lp({...e,network:this.network},t)}createSession(e={}){return tS({wantList:this.wantList,network:this.network,logger:this.logger,libp2p:this.libp2p},e)}async want(e,t={}){let n=new AbortController,o=we([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",e,i)});try{let i=await this.wantList.wantBlock(e,{...t,signal:o});return t.onProgress?.(new O("bitswap:block",{cid:e,sender:i.connection.remotePeer})),i.block}finally{n.abort(),o.clear()}}async notify(e,t={}){await Promise.all([this.peerWantLists.receivedBlock(e,t),this.wantList.receivedBlock(e,t)])}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 nS=(r,e={})=>new up(r,e);var Y6=class{name="bitswap";bitswap;started;constructor(e,t={}){this.bitswap=nS(e,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){await this.bitswap.notify(e,t)}async retrieve(e,t={}){return this.bitswap.want(e,{...t,onProgress:n=>{if(t?.onProgress!=null)if(t.onProgress(n),n.type==="connection:open"){if(!At(n.detail))return;t.onProgress(new O("helia:block-broker:connect",{broker:"bitswap",type:"connect",provider:n.detail,cid:e}))}else n.type==="connection:opened"?t.onProgress(new O("helia:block-broker:connected",{broker:"bitswap",type:"connected",provider:n.detail.remotePeer,address:n.detail.remoteAddr,cid:e})):n.type==="connection:open-stream"?t.onProgress(new O("helia:block-broker:request-block",{broker:"bitswap",type:"request-block",provider:n.detail.connection.remotePeer,cid:e})):n.type==="bitswap:block"&&t.onProgress(new O("helia:block-broker:receive-block",{broker:"bitswap",type:"receive-block",provider:n.detail.sender,cid:e}))}})}createSession(e){let t=this.bitswap.createSession(e);return{name:"bitswap-session",addPeer:async(n,o)=>{await t.addPeer(n,o)},announce:async(n,o)=>{await this.bitswap.notify(n,o)},retrieve:async(n,o)=>t.retrieve(n,o)}}};function X6(r={}){return e=>new Y6(e,r)}var $B=[6,53,56,54,55];function oS(r){return aS("sni",r)?.value}function iS(r){let e=aS("tcp",r)?.value;return e==null?"":`:${e}`}function aS(r,e){return e.find(t=>t.name===r)}function sS(r){return r.some(({code:e})=>e===448)}function On(r,e){let t=cS[r.name];if(t==null)throw new Error(`Can't interpret protocol ${r.name}`);let n=t(r,e);return r.code===41?`[${n}]`:n}var cS={ip4:(r,e)=>r.value,ip6:(r,e)=>e.length===0?r.value:`[${r.value}]`,tcp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`tcp://${On(t,e)}:${r.value}`},udp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`udp://${On(t,e)}:${r.value}`},dnsaddr:(r,e)=>r.value,dns4:(r,e)=>r.value,dns6:(r,e)=>r.value,dns:(r,e)=>r.value,ipfs:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${On(t,e)}`},p2p:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${On(t,e)}`},http:(r,e)=>{let t=sS(e),n=oS(e),o=iS(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,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,e),o=decodeURIComponent(r.value??"");return`${n}${o}`},tls:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return On(t,e)},sni:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return On(t,e)},https:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=On(t,e);return n=n?.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=sS(e),n=oS(e),o=iS(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,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,e);return n=n?.replace("tcp://",""),`wss://${n}`}};function Ui(r,e){let n=X(r).getComponents(),o=n.pop();if(o==null)throw new Error("Unexpected end of multiaddr");let i=cS[o.name];if(i==null)throw new Error(`No interpreter found for ${o.name}`);let s=i(o,n)??"";return e?.assumeHttp!==!1&&$B.includes(o.code)&&(s=s.replace(/^.*:\/\//,""),o.value==="443"?s=`https://${s}`:s=`http://${s}`),(s.startsWith("http://")||s.startsWith("https://")||s.startsWith("ws://")||s.startsWith("wss://"))&&(s=new URL(s).toString(),s.endsWith("/")&&(s=s.substring(0,s.length-1))),s}var lS="[a-fA-F\\d:]",Fi=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${lS})|(?<=${lS})(?=\\s|$))`:"",Bn="(?: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}",bt="[a-fA-F\\d]{1,4}",dp=`
14
+ (?:
15
+ (?:${bt}:){7}(?:${bt}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
16
+ (?:${bt}:){6}(?:${Bn}|:${bt}|:)| // 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
17
+ (?:${bt}:){5}(?::${Bn}|(?::${bt}){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
18
+ (?:${bt}:){4}(?:(?::${bt}){0,1}:${Bn}|(?::${bt}){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
19
+ (?:${bt}:){3}(?:(?::${bt}){0,2}:${Bn}|(?::${bt}){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
20
+ (?:${bt}:){2}(?:(?::${bt}){0,3}:${Bn}|(?::${bt}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
21
+ (?:${bt}:){1}(?:(?::${bt}){0,4}:${Bn}|(?::${bt}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
22
+ (?::(?:(?::${bt}){0,5}:${Bn}|(?::${bt}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
23
+ )(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
24
+ `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),VB=new RegExp(`(?:^${Bn}$)|(?:^${dp}$)`),KB=new RegExp(`^${Bn}$`),HB=new RegExp(`^${dp}$`),Q6=r=>r&&r.exact?VB:new RegExp(`(?:${Fi(r)}${Bn}${Fi(r)})|(?:${Fi(r)}${dp}${Fi(r)})`,"g");Q6.v4=r=>r&&r.exact?KB:new RegExp(`${Fi(r)}${Bn}${Fi(r)}`,"g");Q6.v6=r=>r&&r.exact?HB:new RegExp(`${Fi(r)}${dp}${Fi(r)}`,"g");var Z6=Q6;function J6(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function uS(){return!1}var{toString:qB}=Object.prototype;function e8(r){return qB.call(r)==="[object RegExp]"}var dS={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function t8(r,e={}){if(!e8(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(dS).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?dS[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function r8(r,e,{timeout:t}={}){try{return J6(()=>t8(r).test(e),{timeout:t})()}catch(n){if(uS(n))return!1;throw n}}var zB=15,WB=45,fS={timeout:400};function n8(r){return r.length>WB?!1:r8(Z6.v6({exact:!0}),r,fS)}function hS(r){return r.length>zB?!1:r8(Z6.v4({exact:!0}),r,fS)}var pS={http:"80",https:"443",ws:"80",wss:"443"},GB=["http","https","ws","wss"];function Oc(r,e){e=e??{};let t=e.defaultDnsType??"dns",{scheme:n,hostname:o,port:i,path:s}=jB(r),a=[YB(o,t),XB(i,n),QB(n)];s!=null&&a.push(ZB(s));let c="/"+a.filter(l=>!!l).reduce((l,u)=>l.concat(u),[]).join("/");return X(c)}function jB(r){let[e]=r.split(":");GB.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=JB(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 YB(r,e){if(!(r==null||r==="")){if(hS(r))return["ip4",r];if(n8(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(n8(t))return["ip6",t]}return[e,r]}}function XB(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function QB(r){if(r.match(/^tcp$|^udp$/)==null)return r==="https"?["/tls/http"]:r==="wss"?["/tls/ws"]:[r]}function ZB(r){if(!(r==null||r===""))return["http-path",encodeURIComponent(r)]}function JB(r){if(!(r==null||r===""||pS[r]==null))return pS[r]}var Ve=r=>({match:e=>{let t=e[0];return t==null||t.code!==r||t.value!=null?!1:e.slice(1)}}),le=(r,e)=>({match:t=>{let n=t[0];return n?.code!==r||n.value==null||e!=null&&n.value!==e?!1:t.slice(1)}}),mS=r=>({match:e=>r.match(e)===!1?e:!1}),_e=r=>({match:e=>{let t=r.match(e);return t===!1?e:t}}),tr=(...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}}),Be=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e}});function Ke(...r){function e(o){if(o==null)return!1;let i=o.getComponents();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 eM=le(421),gS=Ke(eM),hp=le(54),pp=le(55),mp=le(56),i8=le(53),yse=Ke(hp,_e(le(421))),wse=Ke(pp,_e(le(421))),bse=Ke(mp,_e(le(421))),gp=Ke(tr(i8,mp,hp,pp),_e(le(421))),yS=Be(le(4),_e(le(43))),wS=Be(_e(le(42)),le(41),_e(le(43))),s8=tr(yS,wS),ta=tr(s8,i8,hp,pp,mp),bS=Ke(tr(s8,Be(tr(i8,mp,hp,pp),_e(le(421))))),a8=Ke(yS),c8=Ke(wS),xS=Ke(s8),l8=Be(ta,le(6)),Qu=Be(ta,le(273)),ra=Ke(Be(l8,_e(le(421)))),xse=Ke(Qu),u8=Be(Qu,Ve(460),_e(le(421))),yp=Be(Qu,Ve(461),_e(le(421))),tM=tr(u8,yp),Ese=Ke(u8),ES=Ke(yp),o8=tr(ta,l8,Qu,u8,yp),vS=tr(Be(o8,Ve(477),_e(le(421)))),Wo=Ke(vS),SS=tr(Be(o8,Ve(478),_e(le(421))),Be(o8,Ve(448),_e(le(449)),Ve(477),_e(le(421)))),na=Ke(SS),AS=Be(Qu,Ve(280),_e(le(466)),_e(le(466)),_e(le(421))),Zu=Ke(AS),TS=Be(yp,Ve(465),_e(le(466)),_e(le(466)),_e(le(421))),d8=Ke(TS),fp=tr(vS,SS,Be(l8,_e(le(421))),Be(tM,_e(le(421))),Be(ta,_e(le(421))),AS,TS,le(421)),Bc=Ke(fp),rM=Be(_e(fp),Ve(290),mS(Ve(281)),_e(le(421))),Ot=Ke(rM),nM=tr(Be(fp,Ve(290),Ve(281),_e(le(421))),Be(fp,Ve(281),_e(le(421))),Be(Ve(281),_e(le(421)))),Ju=Ke(nM),oM=tr(Be(ta,le(6),Ve(480),_e(le(421))),Be(ta,Ve(480),_e(le(421)))),_S=Ke(oM),iM=Be(ta,tr(Be(le(6,"443"),Ve(480)),Be(le(6),Ve(443)),Be(le(6),Ve(448),Ve(480)),Be(Ve(448),Ve(480)),Ve(448),Ve(443)),_e(le(421))),IS=Ke(iM),sM=tr(Be(le(777),_e(le(421)))),vse=Ke(sM),aM=tr(Be(le(400),_e(le(421)))),Sse=Ke(aM);function f8(r,e,t){return r.filter(n=>{if(IS.matches(n)||e&&_S.matches(n))return t||gp.matches(n)?!0:ut(n)===!1;if(!e&&t){let{host:o}=ce(n);if(o==="127.0.0.1"||o==="localhost"||o.endsWith(".localhost"))return!0}return!1})}async function*wp(r,e,t,n,o,i={}){for await(let s of e.findProviders(r,i)){let a=f8(s.multiaddrs,n,o);if(a.length===0)continue;let c=new URL(Ui(a[0]));yield new Mc(c,{logger:t,transformRequestInit:i.transformRequestInit,routing:s.routing})}}async function kS(r,e,t){let{signal:n,log:o}=t??{},i=r.headers.get("content-length");if(i!=null){let c=parseInt(i,10);if(c>e)throw o?.error("content-length header (%d) is greater than the limit (%d)",c,e),r.body!=null&&await r.body.cancel().catch(l=>{o?.error("error cancelling response body after content-length check - %e",l)}),new Error(`Content-Length header (${c}) is greater than the limit (${e}).`)}let s=r.body?.getReader();if(s==null)throw new Error("Response body is not readable");let a=new ne;try{for(;;){if(n?.aborted===!0)throw new Error("Response body read was aborted.");let{done:c,value:l}=await s.read();if(c)break;if(a.append(l),a.byteLength>e)throw new Error(`Response body is greater than the limit (${e}), received ${a.byteLength} bytes.`)}}finally{s.cancel().catch(c=>{o?.error("error cancelling reader - %e",c)}).finally(()=>{s.releaseLock()})}return a.subarray()}var cM=2336,Mc=class{url;peer;#e=0;#t=0;#r=0;#a=0;#c=new Map;log;transformRequestInit;routing;constructor(e,{logger:t,transformRequestInit:n,routing:o}){this.url=e instanceof URL?e:new URL(e),this.transformRequestInit=n,this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.host}`),this.routing=o,this.peer=Wr(Z.createV1(cM,gt.digest(C(this.url.toString()))))}#m(e){let t=e.multihash.bytes;return mt.encode(t)}async getRawBlock(e,t={}){let n=new URL(this.url.toString());n.pathname=`/ipfs/${e.toString()}`;let o=t.maxSize??CS;if(n.search="?format=raw",t.signal?.aborted===!0)throw new Error(`Signal to fetch raw block for CID ${e} from gateway ${this.url} was aborted prior to fetch`);let i=this.#m(e),s=new AbortController,a=()=>{s.abort()};t.signal?.addEventListener("abort",a);try{let c=this.#c.get(i);if(c==null){this.#e++;let l={signal:s.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"},u=this.transformRequestInit!=null?await this.transformRequestInit(l):l,d=new Headers(u.headers);this.log(`sending request
14
25
  %s %s HTTP/1.1
15
26
  %s
16
- `,d.method??"GET",o,[...u.entries()].map(([f,h])=>`${f}: ${h}`).join(`
17
- `)),c=fetch(o.toString(),d).then(async f=>{if(this.log(`received response
27
+ `,u.method??"GET",n,[...d.entries()].map(([f,h])=>`${f}: ${h}`).join(`
28
+ `)),t.onProgress?.(new O("helia:block-broker:connect",{broker:"trustless-gateway",type:"connect",provider:this.peer,cid:e})),c=fetch(n.toString(),u).then(async f=>{if(this.log(`received response
18
29
  HTTP/1.1 %d %s
19
30
  %s
20
- `,f.status,f.statusText,[...f.headers.entries()].map(([p,g])=>`${p}: ${g}`).join(`
21
- `)),!f.ok)throw this.#t++,new Error(`Unable to fetch raw block for CID ${e} from gateway ${this.url}, received ${f.status} ${f.statusText}`);let h=await K9(f,n,{signal:i.signal,log:this.log});return this.#a++,h}),this.#c.set(s,c)}return await c}catch(c){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} - ${c.message}`))}finally{t?.removeEventListener("abort",a),this.#c.delete(s)}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#a/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}getStats(){return{attempts:this.#e,errors:this.#t,invalidBlocks:this.#r,successes:this.#a,pendingResponses:this.#c.size}}toString(){return`TrustlessGateway(${this.url})`}};var dg=class extends qs{name="trustless-gateway-session";routing;allowInsecure;allowLocal;transformRequestInit;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??Qf,this.allowLocal=t.allowLocal??jf,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);return this.log.trace("got block for %c from %s",e,t.url),await n.validateFn?.(o),o}async*findNewProviders(e,t={}){yield*Xf(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})}toFilterKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}async convertToProvider(e,t,n){if(Lt(e))return;let o=ug(Array.isArray(e)?e:[e],this.allowInsecure,this.allowLocal);if(o.length===0)return;let s=Vo(o[0]);return new ha(s,{logger:this.logger,transformRequestInit:this.transformRequestInit,routing:t})}emitFoundProviderProgressEvent(e,t,n){n?.onProgress?.(new H("trustless-gateway:found-provider",{type:"trustless-gateway",cid:e,url:t.url.toJSON(),routing:t.routing}))}};function H9(r,e){return new dg(r,e)}var Zf=class{name="trustless-gateway";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??Qf,this.allowLocal=t.allowLocal??jf,this.transformRequestInit=t.transformRequestInit}async retrieve(e,t={}){let n=[];for await(let o of Xf(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 s=await o.getRawBlock(e,t);this.log.trace("got block for %c from %s",e,o.url);try{await t.validateFn?.(s)}catch(i){this.log.error("failed to validate block for %c from %s - %e",e,o.url,i);continue}return s}catch(s){if(this.log.error("failed to get block for %c from %s - %e",e,o.url,s),s instanceof Error?n.push(s):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 H9({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure,transformRequestInit:this.transformRequestInit})}};var Qf=!1,jf=!1,V9=2097152;function fg(r={}){return e=>new Zf(e,r)}async function*yl(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 Fk=Pn(Jf(),1);var en=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},eh=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},pa=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},th=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},rh=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},nh=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},wl=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var or;(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=()=>ze(t)})(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.value!=null&&(s.uint32(10),s.bytes(o.value)),o.signatureV1!=null&&(s.uint32(18),s.bytes(o.signatureV1)),o.validityType!=null&&(s.uint32(24),r.ValidityType.codec().encode(o.validityType,s)),o.validity!=null&&(s.uint32(34),s.bytes(o.validity)),o.sequence!=null&&(s.uint32(40),s.uint64(o.sequence)),o.ttl!=null&&(s.uint32(48),s.uint64(o.ttl)),o.pubKey!=null&&(s.uint32(58),s.bytes(o.pubKey)),o.signatureV2!=null&&(s.uint32(66),s.bytes(o.signatureV2)),o.data!=null&&(s.uint32(74),s.bytes(o.data)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={},c=s==null?o.len:o.pos+s;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=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(or||(or={}));var Nk=kr("ipns:utils"),q9=C("/ipns/");var Ok=0,Bk=18;function W9(r){let e;if(r.pubKey!=null)try{e=rt(r.pubKey)}catch(t){throw Nk.error(t),t}if(e!=null)return e}function z9(r){let e=C("ipns-signature:");return Be([e,r])}function bl(r){return"signatureV1"in r?or.encode({value:C(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:C(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):or.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function xn(r){let e=or.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 en("Missing data or signatureV2");let t=G9(e.data),n=Mk(t.Value),o=P(t.Validity);if(e.value!=null&&e.signatureV1!=null)return Uk(e),{value:n,validityType:or.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:or.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 El(r){return Be([q9,r.bytes])}function ma(r){let e=Re(r.slice(q9.length));if(!oh(e,Ok)&&!oh(e,Bk))throw new yo("Multihash in IPNS key was not identity or sha2-256");return e}function G9(r){let e=br(r);if(e.ValidityType===0)e.ValidityType=or.ValidityType.EOL;else throw new pa("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 Mk(r){let e=P(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${G.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${G.parse(e).toV1().toString()}`}catch{}throw new rh("Value must be a valid content path starting with /")}function Uk(r){if(r.data==null)throw new nh("Record data is missing");let e=G9(r.data);if(!ee(e.Value,r.value??new Uint8Array(0)))throw new en('Field "value" did not match between protobuf and CBOR');if(!ee(e.Validity,r.validity??new Uint8Array(0)))throw new en('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new en('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new en('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new en('Field "ttl" did not match between protobuf and CBOR')}function oh(r,e){return r.code===e}var ej=kr("ipns"),tj=300*1e9,$k="/ipns/",rj=$k.length;var Y9=Pn(Jf(),1);var sh=kr("ipns:validator"),Kk=1024*10;async function Vk(r,e){let t=xn(e),n;try{let o=z9(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw sh.error("record signature verification failed"),new en("Record signature verification failed");if(t.validityType===or.ValidityType.EOL){if(Y9.default.fromString(t.validity).toDate().getTime()<Date.now())throw sh.error("record has expired"),new eh("record has expired")}else if(t.validityType!=null)throw sh.error("the validity type is unsupported"),new pa("The validity type is unsupported");sh("ipns record for %s is valid",t.value)}async function ih(r,e){if(e.byteLength>Kk)throw new th("The record is too large");let t=ma(r),n;oh(t,0)&&(n=nd(t));let o=xn(e),s=W9(o)??n;if(s==null)throw new wl("Could not extract public key from IPNS record or routing key");let i=El(s.toMultihash());if(!ee(i,r))throw new wl("Embedded public key did not match routing key");await Vk(s,e)}var ah=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*ga(r,e={}){let t=/\r?\n/,n=new TextDecoder("utf8"),o="";for await(let s of r){if(typeof s=="string"&&(s=new TextEncoder().encode(s)),yi(s)&&(s=s.subarray()),o+=n.decode(s,{stream:!0}),o.length>(e?.maxMessageLength??o.length))throw new ah("Incoming message too long");let i=o.split(t);o=i.pop()??"";for(let a=0;a<i.length;a++)yield JSON.parse(i[a])}o+=n.decode(),o!==""&&(yield JSON.parse(o))}var Qs=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},Dr=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function Hk(r){return r[Symbol.asyncIterator]!=null}function qk(r){if(Hk(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var X9=qk;var Q9=C("/ipns/");function j9(r){return ee(r.subarray(0,Q9.byteLength),Q9)}var ch=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){try{yield*Pr(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[],routing:"delegated-http-routing-v1"}))}catch(n){if(n instanceof De)return;throw n}}async provide(){}async cancelReprovide(){}async put(e,t,n){if(!j9(e))return;let o=ma(e),s=G.createV1(114,o),i=xn(t);await this.client.putIPNS(s,i,n)}async get(e,t){if(!j9(e))throw new De("Not found");let n=ma(e),o=G.createV1(114,n);try{let s=await this.client.getIPNS(o,t);return bl(s)}catch(s){throw s.name==="BadResponseError"?new De("Not found"):s}}toString(){return`DelegatedRoutingV1HttpApiClientContentRouting(${this.client.url})`}},lh=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await X9(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new De("Not found")}async*getClosestPeers(e,t={}){let n;try{n=G.decode(e)}catch{try{n=Je(qe.decode(e))}catch{n=G.createV1(On,ft.digest(e))}}for await(let o of this.client.getClosestPeers(n,t))yield{id:o.ID,multiaddrs:o.Addrs??[]}}toString(){return`DelegatedRoutingV1HttpApiClientPeerRouting(${this.client.url})`}};var uh={concurrentRequests:4,timeout:3e4,cacheTTL:300*1e3,cacheName:"delegated-routing-v1-cache"},dh=class{url;started;httpQueue;shutDownController;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;inFlightRequests;cacheName;cache;cacheTTL;log;constructor(e,t){this.log=e.logger.forComponent("delegated-routing-v1-http-api-client"),this.started=!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.httpQueue=new ls({concurrency:t.concurrentRequests??uh.concurrentRequests}),this.inFlightRequests=new Map,this.url=t.url instanceof URL?t.url:new URL(t.url),this.timeout=t.timeout??uh.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new ch(this),this.peerRouting=new lh(this),this.cacheName=t.cacheName??uh.cacheName,this.cacheTTL=t.cacheTTL??uh.cacheTTL}get[Ln](){return this.contentRouting}get[Nn](){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&&this.log("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={}){this.log("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let s=fe(),i=fe(),a=0;this.httpQueue.add(async()=>(s.resolve(),i.promise));try{await s.promise;let c=new URL(`${this.url}routing/v1/providers/${e}`);this.#t(c,t.filterAddrs,t.filterProtocols);let l={headers:{accept:"application/x-ndjson, application/json;q=0.8"},signal:o},d=await this.#r(c.toString(),l);if(!d.ok){if(d.status===404)return;throw d.status===422?new Qs("Request does not conform to schema or semantic constraints"):new Dr(`Unexpected status code: ${d.status}`)}let u=d.headers.get("Content-Type");if(u==null)throw new Dr("No Content-Type header received");if(d.body==null){if(u!=="application/x-ndjson")throw new Dr("Routing response had no body");return}if(u.startsWith("application/json")){let h=(await d.json()).Providers??[];for(let p of h){let g=this.#e(p);g!=null&&(a++,yield g)}}else if(u.includes("application/x-ndjson"))for await(let f of ga(yl(d.body))){let h=this.#e(f);h!=null&&(a++,yield h)}else throw new Dr(`Unsupported Content-Type: ${u}`)}finally{o.clear(),i.resolve(),this.log("getProviders finished found %d providers for %c",a,e)}}async*getPeers(e,t={}){this.log("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let s=fe(),i=fe();this.httpQueue.add(async()=>(s.resolve(),i.promise));try{await s.promise;let a=new URL(`${this.url}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)return;if(l.status===422)throw new Qs("Request does not conform to schema or semantic constraints");if(l.body==null)throw new Dr("Routing response had no body");if(l.headers.get("Content-Type")?.startsWith("application/json")){let f=(await l.json()).Peers??[];for(let h of f){let p=this.#e(h);p!=null&&(yield p)}}else for await(let u of ga(yl(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){this.log.error("getPeers errored - %e",a)}finally{o.clear(),i.resolve(),this.log("getPeers finished: %c",e)}}async*getClosestPeers(e,t={}){let n;if(Lt(e))n=e.toCID().toString();else if(G.asCID(e)===e||e instanceof G)n=e.toV1().toString();else throw new A("Key must be CID or PeerId");this.log("getClosestPeers starts: %s",n);let o=AbortSignal.timeout(this.timeout),s=le([this.shutDownController.signal,o,t.signal]);let i=fe(),a=fe();this.httpQueue.add(async()=>(i.resolve(),a.promise));try{await i.promise;let c=new URL(`${this.url}routing/v1/dht/closest/peers/${n}`);this.#t(c,t.filterAddrs,t.filterProtocols);let l={headers:{Accept:"application/x-ndjson"},signal:s},d=await this.#r(c.toString(),l);if(d.status===404)return;if(d.status===422)throw new Qs("Request does not conform to schema or semantic constraints");if(d.body==null)throw new Dr("Routing response had no body");if(d.headers.get("Content-Type")?.startsWith("application/json")){let h=(await d.json()).Peers??[];for(let p of h){let g=this.#e(p);g!=null&&(yield g)}}else for await(let f of ga(yl(d.body))){let h=this.#e(f);h!=null&&(yield h)}}catch(c){this.log.error("getClosestPeers errored - %e",c)}finally{s.clear(),a.resolve(),this.log("getClosestPeers finished: %s",n)}}async getIPNS(e,t={}){this.log("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let s=fe(),i=fe();this.httpQueue.add(async()=>(s.resolve(),i.promise));let a=`${this.url}routing/v1/ipns/${e}`;try{await s.promise;let c={headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o},l=await this.#r(a,c);if(this.log("getIPNS GET %s %d",a,l.status),l.status===404)throw new De("No matching records found");if(l.status===422)throw new Qs("Request does not conform to schema or semantic constraints");if(!l.ok)throw new Dr(`Unexpected status code: ${l.status}`);let d=l.headers.get("Content-Type");if(d==null||!d.includes("application/vnd.ipfs.ipns-record"))throw new De("No matching records found");if(l.body==null)throw new Dr("GET ipns response had no body");let u=await l.arrayBuffer(),f=new Uint8Array(u,0,u.byteLength);return t.validate!==!1&&await ih(El(e.multihash),f),xn(f)}catch(c){throw this.log.error("getIPNS GET %s error - %e",a,c),c}finally{o.clear(),i.resolve(),this.log("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){this.log("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),s=le([this.shutDownController.signal,o,n.signal]);let i=fe(),a=fe();this.httpQueue.add(async()=>(i.resolve(),a.promise));let c=`${this.url}routing/v1/ipns/${e}`;try{await i.promise;let l=bl(t),d={method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:s},u=await this.#r(c,d);if(this.log("putIPNS PUT %s %d",c,u.status),u.status!==200)throw new Dr("PUT ipns response had status other than 200")}catch(l){throw this.log.error("putIPNS PUT %s error - %e",c,l.stack),l}finally{s.clear(),a.resolve(),this.log("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(q)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:Me(e.ID),Addrs:n,Protocols:t}}catch(t){this.log.error("could not conform record to peer schema - %e",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 this.log("returning cached response for %s",o),this.logResponse(c),c;this.log("evicting cached response for %s",o),await this.cache?.delete(e)}else this.cache!=null&&this.log("cache miss for %s",o)}let s=this.inFlightRequests.get(o);if(s!=null){let c=await s;return this.log("deduplicating outgoing request for %s",o),c.clone()}this.log("outgoing request:"),this.logRequest(e,t);let i=fetch(e,t).then(async c=>{if(this.log("incoming response:"),this.logResponse(c),this.cache!=null&&c.ok&&n==="GET"){let l=Date.now()+this.cacheTTL,d=new Headers(c.headers);d.set("x-cache-expires",l.toString());let u=new Response(c.clone().body,{status:c.status,statusText:c.statusText,headers:d});await this.cache.put(e,u)}return c}).finally(()=>{this.inFlightRequests.delete(o)});return this.inFlightRequests.set(o,i),await i}toString(){return`DefaultDelegatedRoutingV1HttpApiClient(${this.url})`}logRequest(e,t){let n=new Headers(t.headers);this.log("%s %s HTTP/1.1",t.method??"GET",e);for(let[o,s]of n.entries())this.log("%s: %s",o,s)}logResponse(e){this.log("HTTP/1.1 %d %s",e.status,e.statusText);for(let[t,n]of e.headers.entries())this.log("%s: %s",t,n)}};function Z9(r){return e=>new dh(e,r)}function pg(r){return{url:"https://delegated-ipfs.dev",filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var J9="[a-fA-F\\d:]",Ho=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${J9})|(?<=${J9})(?=\\s|$))`:"",tn="(?: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}",fh=`
22
- (?:
23
- (?:${it}:){7}(?:${it}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
24
- (?:${it}:){6}(?:${tn}|:${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
25
- (?:${it}:){5}(?::${tn}|(?::${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
26
- (?:${it}:){4}(?:(?::${it}){0,1}:${tn}|(?::${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
27
- (?:${it}:){3}(?:(?::${it}){0,2}:${tn}|(?::${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
28
- (?:${it}:){2}(?:(?::${it}){0,3}:${tn}|(?::${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
29
- (?:${it}:){1}(?:(?::${it}){0,4}:${tn}|(?::${it}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
30
- (?::(?:(?::${it}){0,5}:${tn}|(?::${it}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
31
- )(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
32
- `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),Wk=new RegExp(`(?:^${tn}$)|(?:^${fh}$)`),zk=new RegExp(`^${tn}$`),Gk=new RegExp(`^${fh}$`),mg=r=>r&&r.exact?Wk:new RegExp(`(?:${Ho(r)}${tn}${Ho(r)})|(?:${Ho(r)}${fh}${Ho(r)})`,"g");mg.v4=r=>r&&r.exact?zk:new RegExp(`${Ho(r)}${tn}${Ho(r)}`,"g");mg.v6=r=>r&&r.exact?Gk:new RegExp(`${Ho(r)}${fh}${Ho(r)}`,"g");var gg=mg;function yg(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function ew(){return!1}var{toString:Yk}=Object.prototype;function wg(r){return Yk.call(r)==="[object RegExp]"}var tw={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function bg(r,e={}){if(!wg(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(tw).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?tw[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function Eg(r,e,{timeout:t}={}){try{return yg(()=>bg(r).test(e),{timeout:t})()}catch(n){if(ew(n))return!1;throw n}}var Xk=15,Qk=45,rw={timeout:400};function xg(r){return r.length>Qk?!1:Eg(gg.v6({exact:!0}),r,rw)}function nw(r){return r.length>Xk?!1:Eg(gg.v4({exact:!0}),r,rw)}var ow={http:"80",https:"443",ws:"80",wss:"443"},jk=["http","https","ws","wss"];function hh(r,e){e=e??{};let t=e.defaultDnsType??"dns",{scheme:n,hostname:o,port:s,path:i}=Zk(r),a=[Jk(o,t),eR(s,n),tR(n)];i!=null&&a.push(rR(i));let c="/"+a.filter(l=>!!l).reduce((l,d)=>l.concat(d),[]).join("/");return q(c)}function Zk(r){let[e]=r.split(":");jk.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o,pathname:s,search:i}=new URL(r);if(o==null||o===""){let c=nR(e);c!=null&&(o=c),c==null&&t==="http:"&&(o="80")}let a;return s!=null&&s!==""&&s!=="/"&&(s.startsWith("/")&&(s=s.substring(1)),a=s),i!=null&&i!==""&&(a=a??"",a+=i),{scheme:e,hostname:n,port:o,path:a}}function Jk(r,e){if(!(r==null||r==="")){if(nw(r))return["ip4",r];if(xg(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(xg(t))return["ip6",t]}return[e,r]}}function eR(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function tR(r){if(r.match(/^tcp$|^udp$/)==null)return r==="https"?["/tls/http"]:r==="wss"?["/tls/ws"]:[r]}function rR(r){if(!(r==null||r===""))return["http-path",encodeURIComponent(r)]}function nR(r){if(!(r==null||r===""||ow[r]==null))return ow[r]}var oR=["https://trustless-gateway.link","https://4everland.io"],sR=2336;function iR(r){return r=r.toString(),{id:Zr(G.createV1(sR,ft.digest(C(r)))),multiaddrs:[hh(r)]}}function aR(r){return new URL(P(r.id.toMultihash().digest))}var vg=class{gateways;shuffle;constructor(e={}){this.gateways=(e.gateways??oR).map(t=>iR(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"],routing:"http-gateway-routing"}))}toString(){return`HTTPGatewayRouter([${this.gateways.map(e=>aR(e)).join(", ")}])`}};function Sg(r={}){return new vg(r)}var Ag=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)}toString(){return"Libp2pRouter()"}};function Tg(r){return new Ag(r)}function cR(r){return r[Symbol.asyncIterator]!=null}function lR(r){if(cR(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 ro=lR;function uR(r){return typeof r?.then=="function"}var xl=class extends Zn{data;constructor(){super(),this.data=new Map}put(e,t,n){n?.signal?.throwIfAborted();let o;if(t instanceof Uint8Array)o=[t];else{let s=ro(t);if(uR(s))return s.then(i=>this._put(e,i,n));o=s}return this._put(e,o,n)}_put(e,t,n){return n?.signal?.throwIfAborted(),this.data.set(dt.encode(e.multihash.bytes),t),e}*get(e,t){t?.signal?.throwIfAborted();let n=this.data.get(dt.encode(e.multihash.bytes));if(n==null)throw new Rr;yield*n}has(e,t){return t?.signal?.throwIfAborted(),this.data.has(dt.encode(e.multihash.bytes))}async delete(e,t){t?.signal?.throwIfAborted(),this.data.delete(dt.encode(e.multihash.bytes))}*getAll(e){e?.signal?.throwIfAborted();for(let[t,n]of this.data.entries())yield{cid:G.createV1(On,Re(dt.decode(t))),bytes:(async function*(){yield*n})()},e?.signal?.throwIfAborted()}};var qZ=kr("blockstore:core:tiered");var sw="SHARDING";function fR(r){return r[Symbol.asyncIterator]!=null}function hR(r,e){return fR(r)?(async function*(){yield*(await ro(r)).sort(e)})():(function*(){yield*ro(r).sort(e)})()}var ph=hR;var no=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 er(this.putMany(e,n)),e=[],await er(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=jr(n,s=>s.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>jr(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>ph(o,s),n)),e.offset!=null){let o=0,s=e.offset;n=jr(n,()=>o++>=s)}return e.limit!=null&&(n=Ko(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=jr(n,s=>s.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>jr(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>ph(o,s),n)),e.offset!=null){let o=e.offset,s=0;n=jr(n,()=>s++>=o)}return e.limit!=null&&(n=Ko(n,e.limit)),n}};var js=class extends no{data;constructor(){super(),this.data=new Map}put(e,t,n){return n?.signal?.throwIfAborted(),this.data.set(e.toString(),t),e}get(e,t){t?.signal?.throwIfAborted();let n=this.data.get(e.toString());if(n==null)throw new Rr;return n}has(e,t){return t?.signal?.throwIfAborted(),this.data.has(e.toString())}delete(e,t){t?.signal?.throwIfAborted(),this.data.delete(e.toString())}*_all(e,t){t?.signal?.throwIfAborted();for(let[n,o]of this.data.entries())yield{key:new $e(n),value:o},t?.signal?.throwIfAborted()}*_allKeys(e,t){t?.signal?.throwIfAborted();for(let n of this.data.keys())yield new $e(n),t?.signal?.throwIfAborted()}};var vJ=new $e(sw);var BJ=kr("datastore:core:tiered");async function aw(r){if(r.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new A("Private network is enforced, but no protector was provided");return r}var vl;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={publicKey:ae(0),payloadType:ae(0),payload:ae(0),signature:ae(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.publicKey=t.bytes();break}case 2:{s.payloadType=t.bytes();break}case 3:{s.payload=t.bytes();break}case 5:{s.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(vl||(vl={}));var mh=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var vr=class r{static createFromProtobuf=e=>{let t=vl.decode(e),n=rt(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t,n)=>{if(t==null)throw new Error("Missing private key");let o=e.domain,s=e.codec,i=e.marshal(),a=cw(o,s,i),c=await t.sign(a.subarray(),n);return new r({publicKey:t.publicKey,payloadType:s,payload:i,signature:c})};static openAndCertify=async(e,t,n)=>{let o=r.createFromProtobuf(e);if(!await o.validate(t,n))throw new mh("Envelope signature is not valid for the given domain");return o};publicKey;payloadType;payload;signature;marshaled;constructor(e){let{publicKey:t,payloadType:n,payload:o,signature:s}=e;this.publicKey=t,this.payloadType=n,this.payload=o,this.signature=s}marshal(){return this.marshaled==null&&(this.marshaled=vl.encode({publicKey:ht(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return e==null?!1:ee(this.marshal(),e.marshal())}async validate(e,t){let n=cw(e,this.payloadType,this.payload);return this.publicKey.verify(n.subarray(),this.signature,t)}},cw=(r,e,t)=>{let n=C(r),o=Mt(n.byteLength),s=Mt(e.length),i=Mt(t.length);return new Q(o,n,s,e,i,t)};var lw="libp2p-peer-record",uw=Uint8Array.from([3,1]);var Sl;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=ne((s,i,a={})=>{a.lengthDelimited!==!1&&i.fork(),s.multiaddr!=null&&s.multiaddr.byteLength>0&&(i.uint32(10),i.bytes(s.multiaddr)),a.lengthDelimited!==!1&&i.ldelim()},(s,i,a={})=>{let c={multiaddr:ae(0)},l=i==null?s.len:s.pos+i;for(;s.pos<l;){let d=s.uint32();switch(d>>>3){case 1:{c.multiaddr=s.bytes();break}default:{s.skipType(d&7);break}}}return c})),o),n.encode=s=>re(s,n.codec()),n.decode=(s,i)=>te(s,n.codec(),i)})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=ne((n,o,s={})=>{if(s.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 i of n.addresses)o.uint32(26),r.AddressInfo.codec().encode(i,o);s.lengthDelimited!==!1&&o.ldelim()},(n,o,s={})=>{let i={peerId:ae(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:{i.peerId=n.bytes();break}case 2:{i.seq=n.uint64();break}case 3:{if(s.limits?.addresses!=null&&i.addresses.length===s.limits.addresses)throw new Oe('Decode error - map field "addresses" had too many elements');i.addresses.push(r.AddressInfo.codec().decode(n,n.uint32(),{limits:s.limits?.addresses$}));break}default:{n.skipType(c&7);break}}}return i})),t),r.encode=n=>re(n,r.codec()),r.decode=(n,o)=>te(n,r.codec(),o)})(Sl||(Sl={}));function dw(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 jt=class r{static createFromProtobuf=e=>{let t=Sl.decode(e),n=Je(Re(t.peerId)),o=(t.addresses??[]).map(i=>q(i.multiaddr)),s=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:s})};static DOMAIN=lw;static CODEC=uw;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=Sl.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||!dw(this.multiaddrs,e.multiaddrs))}};var oo;(function(r){let e;(function(o){let s;o.codec=()=>(s==null&&(s=ne((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&i.value.byteLength>0&&(a.uint32(18),a.bytes(i.value)),c.lengthDelimited!==!1&&a.ldelim()},(i,a,c={})=>{let l={key:"",value:ae(0)},d=a==null?i.len:i.pos+a;for(;i.pos<d;){let u=i.uint32();switch(u>>>3){case 1:{l.key=i.string();break}case 2:{l.value=i.bytes();break}default:{i.skipType(u&7);break}}}return l})),s),o.encode=i=>re(i,o.codec()),o.decode=(i,a)=>te(i,o.codec(),a)})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let s;o.codec=()=>(s==null&&(s=ne((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&(a.uint32(18),yh.codec().encode(i.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(i,a,c={})=>{let l={key:""},d=a==null?i.len:i.pos+a;for(;i.pos<d;){let u=i.uint32();switch(u>>>3){case 1:{l.key=i.string();break}case 2:{l.value=yh.codec().decode(i,i.uint32(),{limits:c.limits?.value});break}default:{i.skipType(u&7);break}}}return l})),s),o.encode=i=>re(i,o.codec()),o.decode=(i,a)=>te(i,o.codec(),a)})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{if(i.lengthDelimited!==!1&&s.fork(),o.addresses!=null)for(let a of o.addresses)s.uint32(10),gh.codec().encode(a,s);if(o.protocols!=null)for(let a of o.protocols)s.uint32(18),s.string(a);if(o.publicKey!=null&&(s.uint32(34),s.bytes(o.publicKey)),o.peerRecordEnvelope!=null&&(s.uint32(42),s.bytes(o.peerRecordEnvelope)),o.metadata!=null&&o.metadata.size!==0)for(let[a,c]of o.metadata.entries())s.uint32(50),r.Peer$metadataEntry.codec().encode({key:a,value:c},s);if(o.tags!=null&&o.tags.size!==0)for(let[a,c]of o.tags.entries())s.uint32(58),r.Peer$tagsEntry.codec().encode({key:a,value:c},s);o.updated!=null&&(s.uint32(64),s.uint64Number(o.updated)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={addresses:[],protocols:[],metadata:new Map,tags:new Map},c=s==null?o.len:o.pos+s;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{if(i.limits?.addresses!=null&&a.addresses.length===i.limits.addresses)throw new Oe('Decode error - map field "addresses" had too many elements');a.addresses.push(gh.codec().decode(o,o.uint32(),{limits:i.limits?.addresses$}));break}case 2:{if(i.limits?.protocols!=null&&a.protocols.length===i.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(i.limits?.metadata!=null&&a.metadata.size===i.limits.metadata)throw new Sc('Decode error - map field "metadata" had too many elements');let d=r.Peer$metadataEntry.codec().decode(o,o.uint32());a.metadata.set(d.key,d.value);break}case 7:{if(i.limits?.tags!=null&&a.tags.size===i.limits.tags)throw new Sc('Decode error - map field "tags" had too many elements');let d=r.Peer$tagsEntry.codec().decode(o,o.uint32(),{limits:{value:i.limits?.tags$value}});a.tags.set(d.key,d.value);break}case 8:{a.updated=o.uint64Number();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(oo||(oo={}));var gh;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={multiaddr:ae(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.multiaddr=t.bytes();break}case 2:{s.isCertified=t.bool();break}case 3:{s.observed=t.uint64Number();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(gh||(gh={}));var yh;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={value:0},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.value=t.uint32();break}case 2:{s.expiry=t.uint64();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(yh||(yh={}));function pR(r,e){if(r.publicKey!=null||e.publicKey==null)return r;let t;r.type==="RSA"&&(t=r.toMultihash());let n=rt(e.publicKey,t);return En(n)}function fw(r,e,t){let n=oo.decode(e);return ya(r,n,t)}function ya(r,e,t){let n=new Map,o=BigInt(Date.now());for(let[s,i]of e.tags.entries())i.expiry!=null&&i.expiry<o||n.set(s,i);return{...e,id:pR(r,e),addresses:e.addresses.filter(({observed:s})=>s!=null&&s>Date.now()-t).map(({multiaddr:s,isCertified:i})=>({multiaddr:q(s),isCertified:i??!1})),metadata:e.metadata,peerRecordEnvelope:e.peerRecordEnvelope??void 0,tags:n}}function hw(r,e){return mR(r.addresses,e.addresses)&&gR(r.protocols,e.protocols)&&yR(r.publicKey,e.publicKey)&&wR(r.peerRecordEnvelope,e.peerRecordEnvelope)&&bR(r.metadata,e.metadata)&&ER(r.tags,e.tags)}function mR(r,e){return mw(r,e,(t,n)=>!(t.isCertified!==n.isCertified||!ee(t.multiaddr,n.multiaddr)))}function gR(r,e){return mw(r,e,(t,n)=>t===n)}function yR(r,e){return pw(r,e)}function wR(r,e){return pw(r,e)}function bR(r,e){return gw(r,e,(t,n)=>ee(t,n))}function ER(r,e){return gw(r,e,(t,n)=>t.value===n.value&&t.expiry===n.expiry)}function pw(r,e){return r==null&&e==null?!0:r!=null&&e!=null?ee(r,e):!1}function mw(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 gw(r,e,t){if(r.size!==e.size)return!1;for(let[n,o]of r.entries()){let s=e.get(n);if(s==null||!t(o,s))return!1}return!0}var Ig="/peers/";function Al(r){if(!Lt(r)||r.type==null)throw new A("Invalid PeerId");let e=r.toCID().toString();return new $e(`${Ig}${e}`)}async function yw(r,e,t,n,o){let s=new Map;for(let i of t){if(i==null)continue;if(i.multiaddr instanceof Uint8Array&&(i.multiaddr=q(i.multiaddr)),!gn(i.multiaddr))throw new A("Multiaddr was invalid");if(!await e(r,i.multiaddr,o))continue;let a=i.isCertified??!1,c=i.multiaddr.toString(),l=s.get(c);l!=null?i.isCertified=l.isCertified||a:s.set(c,{multiaddr:i.multiaddr,isCertified:a})}return[...s.values()].sort((i,a)=>i.multiaddr.toString().localeCompare(a.multiaddr.toString())).map(({isCertified:i,multiaddr:a})=>{let c=a.getComponents().find(l=>l.code===421)?.value;return r.equals(c)&&(a=a.decapsulate(q(`/p2p/${r}`))),{isCertified:i,multiaddr:a.bytes}})}async function bh(r,e,t,n){if(e==null)throw new A("Invalid PeerData");if(e.publicKey!=null&&r.publicKey!=null&&!e.publicKey.equals(r.publicKey))throw new A("publicKey bytes do not match peer id publicKey bytes");let o=n.existingPeer?.peer;if(o!=null&&!r.equals(o.id))throw new A("peer id did not match existing peer id");let s=o?.addresses??[],i=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)&&(s=[],e.multiaddrs!=null&&s.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&s.push(...e.addresses)),e.protocols!=null&&(i=new Set(e.protocols)),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=wh(f,{validate:ww})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=wh(f,{validate:bw,map:Ew})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&s.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&s.push(...e.addresses),e.protocols!=null&&(i=new Set([...i,...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=wh([...a.entries()],{validate:ww})}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=wh([...h.entries()],{validate:bw,map:Ew})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let d;o?.id.publicKey!=null?d=ht(o.id.publicKey):e.publicKey!=null?d=ht(e.publicKey):r.publicKey!=null&&(d=ht(r.publicKey));let u={addresses:await yw(r,n.addressFilter??(async()=>!0),s,n.existingPeer?.peerPB.addresses,n),protocols:[...i.values()].sort((f,h)=>f.localeCompare(h)),metadata:a,tags:c,publicKey:d,peerRecordEnvelope:l};return u.addresses.forEach(f=>{f.observed=n.existingPeer?.peerPB.addresses?.find(h=>ee(h.multiaddr,h.multiaddr))?.observed??Date.now()}),r.type!=="RSA"&&delete u.publicKey,u}function wh(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(([s],[i])=>s.localeCompare(i)))o!=null&&t.set(n,e.map?.(n,o)??o);return t}function ww(r,e){if(typeof r!="string")throw new A("Metadata key must be a string");if(!(e instanceof Uint8Array))throw new A("Metadata value must be a Uint8Array")}function bw(r,e){if(typeof r!="string")throw new A("Tag name must be a string");if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new A("Tag value must be an integer");if(e.value<0||e.value>100)throw new A("Tag value must be between 0-100")}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new A("Tag ttl must be an integer");if(e.ttl<0)throw new A("Tag ttl must be between greater than 0")}}function Ew(r,e){let t;e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl)));let n={value:e.value??0};return t!=null&&(n.expiry=t),n}function xw(r){let e=r.toString().split("/")[2],t=G.parse(e,dt);return Zr(t)}function _g(r,e,t){let n=xw(r);return fw(n,e,t)}function xR(r,e){return{prefix:Ig,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(_g(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(_g(n.key,n.value,e),_g(o.key,o.value,e)))}}var Eh=class{peerId;datastore;locks;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.locks=Jn({name:"libp2p_peer_store_locks",metrics:e.metrics}),this.maxAddressAge=t.maxAddressAge??36e5,this.maxPeerAge=t.maxPeerAge??216e5}getLock(e){let t=this.locks.get(e);return t==null&&(t={refs:0,lock:il({name:e.toString(),singleProcess:!0})},this.locks.set(e,t)),t.refs++,t}maybeRemoveLock(e,t){t.refs--,t.refs===0&&(t.lock.finalize(),this.locks.delete(e))}async getReadLock(e,t){let n=this.getLock(e);try{let o=await n.lock.readLock(t);return()=>{o(),this.maybeRemoveLock(e,n)}}catch(o){throw this.maybeRemoveLock(e,n),o}}async getWriteLock(e,t){let n=this.getLock(e);try{let o=await n.lock.writeLock(t);return()=>{o(),this.maybeRemoveLock(e,n)}}catch(o){throw this.maybeRemoveLock(e,n),o}}async has(e,t){try{return await this.load(e,t),!0}catch(n){if(n.name!=="NotFoundError")throw n}return!1}async delete(e,t){this.peerId.equals(e)||await this.datastore.delete(Al(e),t)}async load(e,t){let n=Al(e),o=await this.datastore.get(n,t),s=oo.decode(o);if(this.#r(e,s))throw await this.datastore.delete(n,t),new De;return ya(e,s,this.peerId.equals(e)?1/0:this.maxAddressAge)}async save(e,t,n){let o=await this.#e(e,n),s=await bh(e,t,"patch",{...n,addressFilter:this.addressFilter});return this.#t(e,s,o)}async patch(e,t,n){let o=await this.#e(e,n),s=await bh(e,t,"patch",{...n,addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,o)}async merge(e,t,n){let o=await this.#e(e,n),s=await bh(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,o)}async*all(e){for await(let{key:t,value:n}of this.datastore.query(xR(e??{},this.maxAddressAge),e)){let o=xw(t);if(o.equals(this.peerId))continue;let s=oo.decode(n);if(this.#r(o,s)){await this.datastore.delete(t,e);continue}yield ya(o,s,this.peerId.equals(o)?1/0:this.maxAddressAge)}}async#e(e,t){try{let n=Al(e),o=await this.datastore.get(n,t),s=oo.decode(o);if(this.#r(e,s))throw await this.datastore.delete(n,t),new De;return{peerPB:s,peer:ya(e,s,this.maxAddressAge)}}catch(n){n.name!=="NotFoundError"&&this.log.error("invalid peer data found in peer store - %e",n)}}async#t(e,t,n,o){t.updated=Date.now();let s=oo.encode(t);return await this.datastore.put(Al(e),s,o),{peer:ya(e,t,this.maxAddressAge),previous:n?.peer,updated:n==null||!hw(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,s=t.addresses.filter(i=>i.observed!=null&&i.observed>o);return n&&s.length===0}};var Cg=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 Eh(e,t)}[Symbol.toStringTag]="@libp2p/peer-store";async forEach(e,t){for await(let n of this.store.all(t))e(n)}async all(e){return ro(this.store.all(e))}async delete(e,t){let n=await this.store.getReadLock(e,t);try{await this.store.delete(e,t)}finally{n()}}async has(e,t){let n=await this.store.getReadLock(e,t);try{return await this.store.has(e,t)}finally{this.log.trace("has release read lock"),n?.()}}async get(e,t){let n=await this.store.getReadLock(e,t);try{return await this.store.load(e,t)}finally{n?.()}}async getInfo(e,t){let n=await this.get(e,t);return{id:n.id,multiaddrs:n.addresses.map(({multiaddr:o})=>o)}}async save(e,t,n){let o=await this.store.getWriteLock(e,n);try{let s=await this.store.save(e,t,n);return this.#e(e,s),s.peer}finally{o?.()}}async patch(e,t,n){let o=await this.store.getWriteLock(e,n);try{let s=await this.store.patch(e,t,n);return this.#e(e,s),s.peer}finally{o?.()}}async merge(e,t,n){let o=await this.store.getWriteLock(e,n);try{let s=await this.store.merge(e,t,n);return this.#e(e,s),s.peer}finally{o?.()}}async consumePeerRecord(e,t,n){let o=Lt(t)?t:Lt(t?.expectedPeer)?t.expectedPeer:void 0,s=Lt(t)||t===void 0?n:t,i=await vr.openAndCertify(e,jt.DOMAIN,s),a=Zr(i.publicKey.toCID());if(o?.equals(a)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",o,a),!1;let c=jt.createFromProtobuf(i.payload),l;try{l=await this.get(a,s)}catch(d){if(d.name!=="NotFoundError")throw d}if(l?.peerRecordEnvelope!=null){let d=vr.createFromProtobuf(l.peerRecordEnvelope),u=jt.createFromProtobuf(d.payload);if(u.seqNumber>=c.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",u.seqNumber,c.seqNumber),!1}return await this.patch(c.peerId,{peerRecordEnvelope:e,addresses:c.multiaddrs.map(d=>({isCertified:!0,multiaddr:d}))},s),!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 vw(r,e={}){return new Cg(r,e)}var Sw=864e13;var xh=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:dns-mappings"),this.mappings=st({name:"libp2p_address_manager_dns_mappings",metrics:e.metrics})}has(e){let t=oe(e),n=t.host;(t.type==="ip4"||t.type==="ip6")&&t.sni!=null&&(n=t.sni);for(let o of this.mappings.values())if(o.domain===n)return!0;return!1}add(e,t){t.forEach(n=>{this.log("add DNS mapping %s to %s",n,e);let o=Fi(n)===!0;this.mappings.set(n,{domain:e,verified:o,expires:o?Sw-Date.now():0,lastVerified:o?Sw-Date.now():void 0})})}remove(e){let t=oe(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;let n=!1;for(let[o,s]of this.mappings.entries())s.domain===t.sni&&(this.log("removing %s to %s DNS mapping %e",o,s.domain),this.mappings.delete(o),n=n||s.verified);return n}getAll(e){let t=[];for(let n=0;n<e.length;n++){let o=e[n].multiaddr;if(!vt(o))continue;let s=oe(o);for(let[i,a]of this.mappings.entries()){if(s.host!==i)continue;let c=this.maybeAddSNIComponent(o,a.domain);c!=null&&(e.splice(n,1),n--,t.push({multiaddr:c,verified:a.verified,type:"dns-mapping",expires:a.expires,lastVerified:a.lastVerified}))}}return t}maybeAddSNIComponent(e,t){let n=e.getComponents();for(let o=0;o<n.length;o++)if(n[o].code===448&&n[o+1]?.code!==449)return n.splice(o+1,0,{name:"sni",code:449,value:t}),q(n)}confirm(e,t){let n=oe(e),o=n.host;(n.type==="ip4"||n.type==="ip6")&&n.sni!=null&&(o=n.sni);let s=!1;for(let[i,a]of this.mappings.entries())a.domain===o&&(this.log("marking %s to %s DNS mapping as verified",i,a.domain),s=a.verified,a.verified=!0,a.expires=Date.now()+t,a.lastVerified=Date.now());return s}unconfirm(e,t){let n=oe(e);if(n.type!=="ip4"&&n.type!=="ip6")return!1;let o=n.sni??n.host,s=!1;for(let[i,a]of this.mappings.entries())a.domain===o&&(this.log("removing verification of %s to %s DNS mapping",i,a.domain),s=s||a.verified,a.verified=!1,a.expires=Date.now()+t);return s}};var vh=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:ip-mappings"),this.mappings=st({name:"libp2p_address_manager_ip_mappings",metrics:e.metrics})}has(e){let t=oe(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;for(let n of this.mappings.values())for(let o of n)if(o.externalIp===t.host)return!0;return!1}add(e,t,n,o=t,s="tcp"){let i=`${e}-${t}-${s}`,a=this.mappings.get(i)??[],c={internalIp:e,internalPort:t,externalIp:n,externalPort:o,externalFamily:Wr(n)?4:6,protocol:s,verified:!1,expires:0};a.push(c),this.mappings.set(i,a)}remove(e){let t=oe(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;let n=!1;for(let[o,s]of this.mappings.entries()){for(let i=0;i<s.length;i++){let a=s[i];a.externalIp===t.host&&a.externalPort===t.port&&a.protocol===t.protocol&&(this.log("removing %s:%s to %s:%s %s IP mapping",a.externalIp,a.externalPort,t.host,t.port,t.protocol),n=n||a.verified,s.splice(i,1),i--)}s.length===0&&this.mappings.delete(o)}return n}getAll(e){let t=[];for(let{multiaddr:n}of e){if(!vt(n))continue;let o=oe(n);if(o.type!=="ip4"&&o.type!=="ip6")continue;let s;if(o.protocol==="tcp"?s=`${o.host}-${o.port}-tcp`:o.protocol==="udp"&&(s=`${o.host}-${o.port}-udp`),s==null)continue;let i=this.mappings.get(s);if(i!=null)for(let a of i)t.push({multiaddr:this.maybeOverrideIp(n,a.externalIp,a.externalFamily,a.protocol,a.externalPort),verified:a.verified,type:"ip-mapping",expires:a.expires,lastVerified:a.lastVerified})}return t}maybeOverrideIp(e,t,n,o,s){let i=e.getComponents(),a=i.findIndex(l=>l.code===4||l.code===41),c=i.findIndex(l=>l.name===o);return a>-1&&c>-1?(i[a].value=t,i[a].code=n===4?4:41,i[c].value=`${s}`,q(i)):e}confirm(e,t){if(!vt(e))return!1;let n=oe(e),o=!1;for(let s of this.mappings.values())for(let i of s)i.externalIp===n.host&&(this.log("marking %s to %s IP mapping as verified",i.internalIp,i.externalIp),o=i.verified,i.verified=!0,i.expires=Date.now()+t,i.lastVerified=Date.now());return o}unconfirm(e,t){if(!vt(e))return!1;let n=oe(e),o=!1;for(let s of this.mappings.values())for(let i=0;i<s.length;i++){let a=s[i];a.externalIp===n.host&&a.externalPort===n.port&&a.protocol===n.protocol&&(this.log("removing verification of %s:%s to %s:%s %s IP mapping",a.externalIp,a.externalPort,n.host,n.port,n.protocol),o=o||a.verified,a.verified=!1,a.expires=Date.now()+t)}return o}};var vR={maxObservedAddresses:10},Sh=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=st({name:"libp2p_address_manager_observed_addresses",metrics:e.metrics}),this.maxObservedAddresses=t.maxObservedAddresses??vR.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&&(Ze(e)||r7(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:q(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()},s=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),s}};var SR={maxObservedAddresses:10},Ah=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=st({name:"libp2p_address_manager_transport_addresses",metrics:e.metrics}),this.maxObservedAddresses=t.maxObservedAddresses??SR.maxObservedAddresses}get(e,t){if(Ze(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:!vt(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},s=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.addresses.set(n,o),s}unconfirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0},s=o.verified;return o.verified=!1,o.expires=Date.now()+t,this.addresses.set(n,o),s}toKey(e){if(!vt(e))return e.toString();let t=oe(e);return`${t.host}-${t.port}-${t.protocol}`}};var Aw=6e4,Tw={maxObservedAddresses:10,addressVerificationTTL:Aw*10,addressVerificationRetry:Aw*5},AR=r=>r;function kg(r,e){let t=r.getComponents().findLast(n=>n.code===421)?.value;return t!=null&&Me(t).equals(e)&&(r=r.decapsulate(q(`/p2p/${e.toString()}`))),r}var Th=class{log;components;listen;announce;appendAnnounce;announceFilter;observed;dnsMappings;ipMappings;transportAddresses;observedAddressFilter;addressVerificationTTL;addressVerificationRetry;constructor(e,t={}){let{listen:n=[],announce:o=[],appendAnnounce:s=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(i=>i.toString()),this.announce=new Set(o.map(i=>i.toString())),this.appendAnnounce=new Set(s.map(i=>i.toString())),this.observed=new Sh(e,t),this.dnsMappings=new xh(e,t),this.ipMappings=new vh(e,t),this.transportAddresses=new Ah(e,t),this.announceFilter=t.announceFilter??AR,this.observedAddressFilter=xt(1024),this.addressVerificationTTL=t.addressVerificationTTL??Tw.addressVerificationTTL,this.addressVerificationRetry=t.addressVerificationRetry??Tw.addressVerificationRetry,this._updatePeerStoreAddresses=qn(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.getComponents().findLast(n=>n.code===421)?.value===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 - %e",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>q(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>q(e))}getAppendAnnounceAddrs(){return Array.from(this.appendAnnounce).map(e=>q(e))}getObservedAddrs(){return this.observed.getAll().map(e=>e.multiaddr)}addObservedAddr(e){let t=oe(e),n;switch(t.type){case"ip4":{n=`${t.host}:${t.port}`;break}case"ip6":{n=`[${t.host}]:${t.port}`;break}default:return}this.observedAddressFilter.has(n)||(this.observedAddressFilter.add(n),e=kg(e,this.components.peerId),!this.ipMappings.has(e)&&(this.dnsMappings.has(e)||this.observed.add(e)))}confirmObservedAddr(e,t){e=kg(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=kg(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=q(n);return o.getComponents().pop()?.value===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(q(`/dns/${e}`))&&this._updatePeerStoreAddresses()}addPublicAddressMapping(e,t,n,o=t,s="tcp"){this.ipMappings.add(e,t,n,o,s),this.observed.removePrefixed(`/ip${Wr(n)?4:6}/${n}/${s}/${o}`)}removePublicAddressMapping(e,t,n,o=t,s="tcp"){this.ipMappings.remove(q(`/ip${Wr(n)?4:6}/${n}/${s}/${o}`))&&this._updatePeerStoreAddresses()}maybeUpgradeToIPMapping(e){if(this.ipMappings.has(e)||!vt(e))return!1;let t=oe(e);if(t.type!=="ip4"||Fi(t.host)===!0)return!1;let n=this.components.transportManager.getListeners(),o=[s=>to.exactMatch(s)||Xs.exactMatch(s),s=>Ys.exactMatch(s),s=>N9.exactMatch(s)];for(let s of o){if(!s(e))continue;let i=n.filter(l=>l.getAddrs().filter(d=>oe(d).type==="ip4"&&s(d)).length>0);if(i.length!==1)continue;let a=i[0].getAddrs().filter(l=>!Nc(l)).pop();if(a==null)continue;let c=oe(a);return c.port==null?!1:(this.observed.remove(e),this.ipMappings.add(c.host,c.port,t.host,t.port,t.protocol),!0)}return!1}};var Iw;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(Iw||(Iw={}));var Ih=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},_h=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},wa=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},Tl=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},Ch=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},kh=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},Rh=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},Il=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},Ph=class extends Error{constructor(e="No transport was configured to listen on this address"){super(e),this.name="UnsupportedListenAddressError"}},Lh=class extends Error{constructor(e="Configured listen addresses could not be listened on"){super(e),this.name="UnsupportedListenAddressesError"}},Dh=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},Nh=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},Oh=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},qo=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},Zs=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},Bh=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}},Mh=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}};var Rg=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=ea())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>Cu(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")}},TR=["metrics","connectionProtector","dns"],IR=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function _w(r={}){let e=new Rg(r);return new Proxy(e,{get(n,o,s){if(typeof o=="string"&&!IR.includes(o)){let i=e.components[o];if(i==null&&!TR.includes(o))throw new Ih(`${o} not set`);return i}return Reflect.get(n,o,s)},set(n,o,s){return typeof o=="string"?e.components[o]=s:Reflect.set(n,o,s),!0}})}function Cw(r){let e={};for(let t of Object.values(r.components))for(let n of _R(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of CR(t))if(e[n]!==!0)throw new _h(`Service "${kR(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function _R(r){return Array.isArray(r?.[me])?r[me]:[]}function CR(r){return Array.isArray(r?.[ur])?r[ur]:[]}function kR(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}function kw(r={}){return r.denyDialMultiaddr==null&&(r.denyDialMultiaddr=e=>to.matches(e)?!0:Ze(e)),r}function Uh(r){if(Lt(r))return{peerId:r,multiaddrs:[]};let e=Array.isArray(r)?r:[r],t;if(e.length>0){let n=e[0].getComponents().findLast(o=>o.code===421)?.value;t=n==null?void 0:Me(n),e.forEach(o=>{if(!gn(o))throw new cn("Invalid multiaddr");let s=o.getComponents().findLast(i=>i.code===421)?.value;if(s==null){if(t!=null)throw new A("Multiaddrs must all have the same peer id or have no peer id")}else{let i=Me(s);if(t?.equals(i)!==!0)throw new A("Multiaddrs must all have the same peer id or have no peer id")}})}return e=e.filter(n=>!k9.exactMatch(n)),{peerId:t,multiaddrs:e}}var RR=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function Rw(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??RR;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}function _l(r){let e=oe(r),t=e.cidr;if(e.type!=="ip4"&&e.type!=="ip6")throw new A(`Multiaddr ${r} was not an IPv4 or IPv6 address`);if(t==null)switch(e.type){case"ip4":{t=32;break}case"ip6":{t=128;break}default:throw new A(`Multiaddr ${r} was not an IPv4 or IPv6 address`)}return new Ls(e.host,t)}function Pg(r){return!wt.exactMatch(r)}function Fh(r,e,t){if(r==null||e==null)return;let n=e.sort((s,i)=>s.direct?-1:i.direct?1:0).find(s=>s.limits==null);if(n==null||n.direct||t==null)return n;if(!t.some(s=>Pg(s)))return n}var $h=class{connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.allow=(t.allow??[]).map(n=>_l(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,n=this.connectionManager.getMaxConnections();if(this.log("checking max connections limit %d/%d",t,n),t<=n)return;let o=new Ft;for(let c of e){let l=c.remotePeer;if(!o.has(l)){o.set(l,0);try{let d=await this.peerStore.get(l);o.set(l,[...d.tags.values()].reduce((u,f)=>u+f.value,0))}catch(d){d.name!=="NotFoundError"&&this.log.error("error loading peer tags - %e",d)}}}let s=this.sortConnections(e,o),i=Math.max(t-n,0),a=[];for(let c of s)if(this.log("too many connections open - closing a connection to %p",c.remotePeer),this.allow.some(d=>{if(vt(c.remoteAddr)){let u=oe(c.remoteAddr);return d.contains(u.host)}return!0})||a.push(c),a.length===i)break;await Promise.all(a.map(async c=>{await Rw(c,{signal:AbortSignal.timeout(1e3)})})),this.events.safeDispatchEvent("connection:prune",{detail:a})}sortConnections(e,t){return e.sort((n,o)=>{let s=n.timeline.open,i=o.timeline.open;return s<i?1:s>i?-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 s=t.get(n.remotePeer)??0,i=t.get(o.remotePeer)??0;return s>i?1:s<i?-1:0})}};var Pw="last-dial-failure",Lw="last-dial-success";var Dw=100,Kh=50;function PR(r,e){let t=Ys.exactMatch(r.multiaddr),n=Ys.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=Xs.exactMatch(r.multiaddr),s=Xs.exactMatch(e.multiaddr);if(o&&!s)return-1;if(!o&&s)return 1;let i=to.exactMatch(r.multiaddr),a=to.exactMatch(e.multiaddr);if(i&&!a)return-1;if(!i&&a)return 1;let c=gl.exactMatch(r.multiaddr),l=gl.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let d=ml.exactMatch(r.multiaddr),u=ml.exactMatch(e.multiaddr);if(d&&!u)return-1;if(!d&&u)return 1;let f=lg.exactMatch(r.multiaddr),h=lg.exactMatch(e.multiaddr);return f&&!h?-1:!f&&h?1:0}function LR(r,e){let t=Nc(r.multiaddr),n=Nc(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function DR(r,e){let t=Ze(r.multiaddr),n=Ze(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function NR(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function OR(r,e){let t=wt.exactMatch(r.multiaddr),n=wt.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Nw(r){return r.sort(PR).sort(NR).sort(OR).sort(DR).sort(LR)}var Lg=class{dns;canResolve(e){return e.getComponents().some(({name:t})=>t==="dnsaddr")}async resolve(e,t){let n=e.getComponents().find(c=>c.name==="dnsaddr")?.value;if(n==null)return[e];let s=await this.getDNS(t).query(`_dnsaddr.${n}`,{signal:t?.signal,types:[dr.TXT]}),i=e.getComponents().find(c=>c.name==="p2p")?.value,a=[];for(let c of s.Answer){let l=c.data.replace(/["']/g,"").trim().split("=")[1];l!=null&&(i!=null&&!l.includes(i)||a.push(q(l)))}return a}getDNS(e){return e.dns!=null?e.dns:(this.dns==null&&(this.dns=Uu()),this.dns)}},Cl=new Lg;async function Dg(r,e,t){let n=t.depth??0;if(n>(t.maxRecursiveDepth??32))throw new Mh("Max recursive depth reached");let o=!1,s=[];for(let i of Object.values(e))if(i.canResolve(r)){o=!0;let a=await i.resolve(r,t);for(let c of a)s.push(...await Dg(c,e,{...t,depth:n+1}))}return o===!1&&s.push(r),s}var kl={maxParallelDials:Kh,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:1e4,resolvers:{dnsaddr:Cl}},Vh=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;resolvers;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??kl.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??kl.maxDialQueueLength,this.dialTimeout=t.dialTimeout??kl.dialTimeout,this.connections=t.connections??new Ft,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.resolvers=t.resolvers??kl.resolvers,this.shutDownController=new AbortController,this.shutDownController.signal,this.queue=new Xd({concurrency:t.maxParallelDials??kl.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("failure",n=>{n.detail?.error.name!==Ht.name&&this.log.error("error in dial queue - %e",n.detail.error)})}start(){this.shutDownController=new AbortController,this.shutDownController.signal}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=Uh(e);if(n!=null&&t.force!==!0){let i=Fh(n,this.connections.get(n),o);if(i!=null)return this.log("already connected to %a",i.remoteAddr),t.onProgress?.(new H("dial-queue:already-connected")),i}let s=this.queue.queue.find(i=>{if(n?.equals(i.options.peerId)===!0)return!0;let a=i.options.multiaddrs;if(a==null)return!1;for(let c of o)if(a.has(c.toString()))return!0;return!1});if(s!=null){this.log("joining existing dial target for %p",n);for(let i of o)s.options.multiaddrs.add(i.toString());return t.onProgress?.(new H("dial-queue:already-in-dial-queue")),s.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new wo("Dial queue is full");return this.log("creating dial target for %p",n,o.map(i=>i.toString())),t.onProgress?.(new H("dial-queue:add-to-dial-queue")),this.queue.add(async i=>{i.onProgress?.(new H("dial-queue:start-dial"));let a=le([this.shutDownController.signal,i.signal]);try{return await this.dialPeer(i,a)}finally{a.clear()}},{peerId:n,priority:t.priority??Mg,multiaddrs:new Set(o.map(i=>i.toString())),signal:t.signal??AbortSignal.timeout(this.dialTimeout),onProgress:t.onProgress})}async dialPeer(e,t){let n=e.peerId,o=e.multiaddrs,s=new Set,i=e.multiaddrs.size===0,a=0,c=0,l=[];for(this.log("starting dial to %p",n);i||o.size>0;){c++,i=!1;let d=[],u=new Set(e.multiaddrs);o.clear(),this.log("calculating addrs to dial %p from %s",n,[...u]);let f=await this.calculateMultiaddrs(n,u,{...e,signal:t});for(let h of f){if(s.has(h.multiaddr.toString())){this.log.trace("skipping previously failed multiaddr %a while dialing %p",h.multiaddr,n);continue}d.push(h)}this.log("%s dial to %p with %s",c===1?"starting":"continuing",n,d.map(h=>h.multiaddr.toString())),e?.onProgress?.(new H("dial-queue:calculated-addresses",d));for(let h of d){if(a===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",a,e.peerId),new wo("Peer had more than maxPeerAddrsToDial");a++;try{let p=await this.components.transportManager.dial(h.multiaddr,{...e,signal:t});this.log("dial to %a succeeded",h.multiaddr);try{await this.components.peerStore.merge(p.remotePeer,{multiaddrs:[p.remoteAddr],metadata:{[Lw]:C(Date.now().toString())}})}catch(g){this.log.error("could not update last dial failure key for %p - %e",n,g)}return p}catch(p){if(this.log.error("dial failed to %a - %e",h.multiaddr,p),s.add(h.multiaddr.toString()),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[Pw]:C(Date.now().toString())}})}catch(g){this.log.error("could not update last dial failure key for %p - %e",n,g)}if(t.aborted)throw new ln(p.message);l.push(p)}}}throw l.length===1?l[0]:new AggregateError(l,"All multiaddr dials failed")}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(u=>({multiaddr:q(u),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new wo("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new Il("The dial request is blocked by gater.allowDialPeer");if(o.length===0){this.log("loading multiaddrs for %p",e);try{let u=await this.components.peerStore.get(e);o.push(...u.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:f})=>f.toString()))}catch(u){if(u.name!=="NotFoundError")throw u}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let u=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(...u.multiaddrs.map(f=>({multiaddr:f,isCertified:!1})))}catch(u){u.name==="NoPeerRoutersError"?this.log("no peer routers configured",e):this.log.error("looking up multiaddrs for %p in the peer routing failed - %e",e,u)}}}let s=(await Promise.all(o.map(async u=>{let f=await Dg(u.multiaddr,this.resolvers,{dns:this.components.dns,log:this.log,...n});return f.length===1&&f[0].equals(u.multiaddr)?u:f.map(h=>({multiaddr:h,isCertified:!1}))}))).flat();if(e!=null){let u=`/p2p/${e.toString()}`;s=s.map(f=>f.multiaddr.getComponents().pop()?.name!=="p2p"?{multiaddr:f.multiaddr.encapsulate(u),isCertified:f.isCertified}:f)}let i=s.filter(u=>{if(this.components.transportManager.dialTransportForMultiaddr(u.multiaddr)==null)return!1;let f=u.multiaddr.getComponents().findLast(h=>h.code===421)?.value;return e!=null&&f!=null?e.equals(f):!0}),a=new Map;for(let u of i){let f=u.multiaddr.toString(),h=a.get(f);if(h!=null){h.isCertified=h.isCertified||u.isCertified||!1;continue}a.set(f,u)}let c=[...a.values()];if(c.length===0)throw new Dh("The dial request has no valid addresses");let l=[];for(let u of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(u.multiaddr)||l.push(u);let d=this.addressSorter==null?Nw(l):l.sort(this.addressSorter);if(d.length===0)throw new Il("The connection gater denied all addresses in the dial request");return this.log.trace("addresses for %p before filtering",e??"unknown peer",s.map(({multiaddr:u})=>u.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",d.map(({multiaddr:u})=>u.toString())),d}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=>!wt.matches(o.multiaddr))!=null:!0}catch{}return!1}};var BR=Object.prototype.toString,MR=r=>BR.call(r)==="[object Error]",UR=new Set(["network error","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Network request failed","fetch failed","terminated"," A network error occurred.","Network connection lost"]);function Ug(r){if(!(r&&MR(r)&&r.name==="TypeError"&&typeof r.message=="string"))return!1;let{message:t,stack:n}=r;return t==="Load failed"?n===void 0||"__sentry_captured__"in r:t.startsWith("error sending request for url")||t==="Failed to fetch"||t.startsWith("Failed to fetch (")&&t.endsWith(")")?!0:UR.has(t)}function FR(r){if(typeof r=="number"){if(r<0)throw new TypeError("Expected `retries` to be a non-negative number.");if(Number.isNaN(r))throw new TypeError("Expected `retries` to be a valid number or Infinity, got NaN.")}else if(r!==void 0)throw new TypeError("Expected `retries` to be a number or Infinity.")}function Hh(r,e,{min:t=0,allowInfinity:n=!1}={}){if(e!==void 0){if(typeof e!="number"||Number.isNaN(e))throw new TypeError(`Expected \`${r}\` to be a number${n?" or Infinity":""}.`);if(!n&&!Number.isFinite(e))throw new TypeError(`Expected \`${r}\` to be a finite number.`);if(e<t)throw new TypeError(`Expected \`${r}\` to be \u2265 ${t}.`)}}var Fg=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}};function $R(r,e){let t=Math.max(1,r+1),n=e.randomize?Math.random()+1:1,o=Math.round(n*e.minTimeout*e.factor**(t-1));return o=Math.min(o,e.maxTimeout),o}function Ow(r,e){return Number.isFinite(e)?e-(performance.now()-r):e}async function KR({error:r,attemptNumber:e,retriesConsumed:t,startTime:n,options:o}){let s=r instanceof Error?r:new TypeError(`Non-error was thrown: "${r}". You should only throw errors.`);if(s instanceof Fg)throw s.originalError;let i=Number.isFinite(o.retries)?Math.max(0,o.retries-t):o.retries,a=o.maxRetryTime??Number.POSITIVE_INFINITY,c=Object.freeze({error:s,attemptNumber:e,retriesLeft:i,retriesConsumed:t});if(await o.onFailedAttempt(c),Ow(n,a)<=0)throw s;let l=await o.shouldConsumeRetry(c),d=Ow(n,a);if(d<=0||i<=0)throw s;if(s instanceof TypeError&&!Ug(s)){if(l)throw s;return o.signal?.throwIfAborted(),!1}if(!await o.shouldRetry(c))throw s;if(!l)return o.signal?.throwIfAborted(),!1;let u=$R(t,o),f=Math.min(u,d);return o.signal?.throwIfAborted(),f>0&&await new Promise((h,p)=>{let g=()=>{clearTimeout(m),o.signal?.removeEventListener("abort",g),p(o.signal.reason)},m=setTimeout(()=>{o.signal?.removeEventListener("abort",g),h()},f);o.unref&&m.unref?.(),o.signal?.addEventListener("abort",g,{once:!0})}),o.signal?.throwIfAborted(),!0}async function $g(r,e={}){if(e={...e},FR(e.retries),Object.hasOwn(e,"forever"))throw new Error("The `forever` option is no longer supported. For many use-cases, you can set `retries: Infinity` instead.");e.retries??=10,e.factor??=2,e.minTimeout??=1e3,e.maxTimeout??=Number.POSITIVE_INFINITY,e.maxRetryTime??=Number.POSITIVE_INFINITY,e.randomize??=!1,e.onFailedAttempt??=()=>{},e.shouldRetry??=()=>!0,e.shouldConsumeRetry??=()=>!0,Hh("factor",e.factor,{min:0,allowInfinity:!1}),Hh("minTimeout",e.minTimeout,{min:0,allowInfinity:!1}),Hh("maxTimeout",e.maxTimeout,{min:0,allowInfinity:!0}),Hh("maxRetryTime",e.maxRetryTime,{min:0,allowInfinity:!0}),e.factor>0||(e.factor=1),e.signal?.throwIfAborted();let t=0,n=0,o=performance.now();for(;!Number.isFinite(e.retries)||n<=e.retries;){t++;try{e.signal?.throwIfAborted();let s=await r(t);return e.signal?.throwIfAborted(),s}catch(s){await KR({error:s,attemptNumber:t,retriesConsumed:n,startTime:o,options:e})&&n++}}throw new Error("Retry attempts exhausted without throwing an error.")}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 It({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);Bw(t)&&(this.queue.has(e)||this.queue.add(async n=>{await $g(async o=>{if(this.started)try{await this.connectionManager.openConnection(e,{signal:n?.signal})}catch(s){throw this.log("reconnecting to %p attempt %d of %d failed - %e",e,o,this.retries,s),s}},{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(s=>{s.startsWith(cs)&&(o[s]=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=>Bw(t)]});await Promise.all(e.map(async t=>{await this.connectionManager.openConnection(t.id).catch(n=>{this.log.error("could not open connection to keepalive peer - %e",n)})}))}).catch(e=>{this.log.error("error reconnect to peers after start - %e",e)})}stop(){this.started=!1,this.queue.abort()}};function Bw(r){for(let e of r.tags.keys())if(e.startsWith(cs))return!0;return!1}var Mg=50,Kg={maxConnections:Dw,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},Wh=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??Kg.maxConnections,this.maxConnections<1)throw new A("Connection Manager maxConnections must be greater than 0");this.connections=new Ft,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=>_l(q(n))),this.deny=(t.deny??[]).map(n=>_l(q(n))),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??Kg.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new ta({points:t.inboundConnectionThreshold??Kg.inboundConnectionThreshold,duration:1}),this.connectionPruner=new $h({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{allow:t.allow?.map(n=>q(n))}),this.dialQueue=new Vh(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??Kh,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??1e4,resolvers:t.resolvers??{dnsaddr:Cl},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 s=`${o.direction} ${o.protocol??"unnegotiated"}`;e[s]=(e[s]??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 s={};for(let i of o.streams){let a=`${i.direction} ${i.protocol??"unnegotiated"}`;s[a]=(s[a]??0)+1}for(let[i,a]of Object.entries(s))e[i]=e[i]??[],e[i].push(a)}let t={};for(let[n,o]of Object.entries(e)){o=o.sort((i,a)=>i-a);let s=Math.floor(o.length*.9);t[n]=o[s]}return t}}),this.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),await ct(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 ut(this.reconnectQueue,this.dialQueue,this.connectionPruner);let e=[];for(let t of this.connections.values())for(let n of t)e.push(Promise.all([xe(n,"close",{signal:AbortSignal.timeout(500)}),n.close({signal:AbortSignal.timeout(500)})]).catch(o=>{n.abort(o)}));this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}getMaxConnections(){return this.maxConnections}setMaxConnections(e){if(e<1)throw new A("Connection Manager maxConnections must be greater than 0");let t=!1;e<this.maxConnections&&(t=!0),this.maxConnections=e,t&&this.connectionPruner.maybePruneConnections()}onConnect(e){this._onConnect(e).catch(t=>{this.log.error("could not connect - %e",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),s=this.connections.get(n)??[];s.push(t),this.connections.set(n,s),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,s=(this.connections.get(n)??[]).filter(i=>i.id!==t.id);this.connections.set(n,s),s.length===0&&(this.log.trace("peer %p disconnected, removing connection map entry",n),this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:n}))}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 Mr("Not started");this.outboundPendingConnections++;try{t.signal?.throwIfAborted();let{peerId:n,multiaddrs:o}=Uh(e);if(this.peerId.equals(n))throw new di("Can not dial self");if(n!=null&&t.force!==!0){this.log("dial %p",n);let c=Fh(n,this.getConnections(n),o);if(c!=null)return this.log("had an existing connection to %p as %a",n,c.remoteAddr),t.onProgress?.(new H("dial-queue:already-connected")),c}let s=await this.dialQueue.dial(e,{...t,priority:t.priority??Mg});if(s.status!=="open")throw new os("Remote closed connection during opening");let i=this.connections.get(s.remotePeer);i==null&&(i=[],this.connections.set(s.remotePeer,i));let a=!1;for(let c of i)if(c.id===s.id&&(a=!0),t.force!==!0&&c.id!==s.id&&c.remoteAddr.equals(s.remoteAddr))return s.abort(new cn("Duplicate multiaddr connection")),c;return a||i.push(s),s}finally{this.outboundPendingConnections--}}async openStream(e,t,n={}){return(await this.openConnection(e,n)).newStream(t,n)}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await Promise.all([xe(o,"close",t),o.close(t)])}catch(s){o.abort(s)}}))}acceptIncomingConnection(e){if(this.deny.some(o=>{if(vt(e.remoteAddr)){let s=oe(e.remoteAddr);return o.contains(s.host)}return!1}))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>{if(vt(e.remoteAddr)){let s=oe(e.remoteAddr);return o.contains(s.host)}return!0}))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(vt(e.remoteAddr)){let o=oe(e.remoteAddr);try{this.inboundConnectionRateLimiter.consume(o.host,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o.host),!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=>q(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var qR=1e4,WR="1.0.0",zR="ping",GR="ipfs",Mw=32,YR=!0,zh=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??GR}/${zR}/${WR}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??qR,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??YR,this.timeout=new zr({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[me]=["@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(),n=this.timeout.getTimeoutSignal({signal:this.abortController?.signal});try{let o=await e.newStream(this.protocol,{signal:n,runOnLimitedConnection:!0}),s=Id(o);t=Date.now(),await Promise.all([s.write(Yt(Mw),{signal:n}),s.read({bytes:Mw,signal:n})]),e.rtt=Date.now()-t,await o.close({signal:n})}catch(o){if(o.name!=="UnsupportedProtocolError")throw o;e.rtt=(Date.now()-t)/2}finally{this.timeout.cleanUp(n)}}).catch(t=>{this.log.error("error during heartbeat - %e",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 Gh=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:P(n,"base36")})})??this.put,this.get=e.metrics?.traceFunction("libp2p.contentRouting.get",this.get.bind(this),{optionsIndex:1,getAttributesFromArgs:([n])=>({key:P(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 wa("No content routers available");let n=this,o=new xr;for await(let s of Xt(...n.routers.filter(i=>i.findProviders instanceof Function).map(i=>i.findProviders(e,t))))s!=null&&(s.multiaddrs.length>0&&await this.components.peerStore.merge(s.id,{multiaddrs:s.multiaddrs},t),!o.has(s.id)&&(o.add(s.id),yield s))}async provide(e,t={}){if(this.routers.length===0)throw new wa("No content routers available");await Promise.all(this.routers.filter(n=>n.provide instanceof Function).map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){if(this.routers.length===0)throw new wa("No content routers available");await Promise.all(this.routers.filter(n=>n.cancelReprovide instanceof Function).map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new Mr;await Promise.all(this.routers.filter(o=>o.put instanceof Function).map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new Mr;return Promise.any(this.routers.filter(n=>n.get instanceof Function).map(async n=>n.get(e,t)))}};var Yh=globalThis.CustomEvent??Event;async function*so(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered??!1,o=new EventTarget,s=[],i=fe(),a=fe(),c=!1,l,d=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let p of r){if(s.length===t&&(i=fe(),await i.promise),d)break;let g={done:!1};s.push(g),p().then(m=>{g.done=!0,g.ok=!0,g.value=m,o.dispatchEvent(new Yh("task-complete"))},m=>{g.done=!0,g.err=m,o.dispatchEvent(new Yh("task-complete"))})}c=!0,o.dispatchEvent(new Yh("task-complete"))}catch(p){l=p,o.dispatchEvent(new Yh("task-complete"))}});function u(){return n?s[0]?.done:!!s.find(p=>p.done)}function*f(){for(;s.length>0&&s[0].done;){let p=s[0];if(s.shift(),p.ok)yield p.value;else throw d=!0,i.resolve(),p.err;i.resolve()}}function*h(){for(;u();)for(let p=0;p<s.length;p++)if(s[p].done){let g=s[p];if(s.splice(p,1),p--,g.ok)yield g.value;else throw d=!0,i.resolve(),g.err;i.resolve()}}for(;;){if(u()||(a=fe(),await a.promise),l!=null||(n?yield*f():yield*h(),l!=null))throw l;if(c&&s.length===0)break}}var Xh=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:P(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 Tl("No peer routers available");if(e.toString()===this.peerId.toString())throw new Ch("Should not try to find self");let n=this,o=Xt(...this.routers.filter(s=>s.findPeer instanceof Function).map(s=>(async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error("router failed to find peer - %e",i)}})()));for await(let s of o)if(s!=null)return s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs},t),s;throw new De}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Tl("No peer routers available");let n=this,o=xt(1024);for await(let s of so((async function*(){let i=Xt(...n.routers.filter(a=>a.getClosestPeers instanceof Function).map(a=>a.getClosestPeers(e,t)));for await(let a of i)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 - %e",c);return}return a}})()))s!=null&&(s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs},t),!o.has(s.id.toMultihash().bytes)&&(o.add(s.id.toMultihash().bytes),yield s))}};var Qh=class extends ie{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=le([this.shutdownController.signal,e?.signal]);try{for(;;)this.needNext?.resolve(),this.needNext=fe(),yield(await xe(this,"walk:peer",{signal:t,rejectionEvents:["walk:error"]})).detail}catch(n){throw n.detail!=null?n.detail:n}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=le([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=Yt(32),s=Date.now();for await(let i 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",i.id,Date.now()-s,this.walkers),n++,this.safeDispatchEvent("walk:peer",{detail:i}),this.walkers===1&&this.needNext!=null&&(this.log("wait for need next"),await Pe(this.needNext.promise,e)),s=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 - %e",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("random walk errored - %e",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var Vg=32,Hg=64,jh=class{log;topologies;handlers;components;middleware;constructor(e){this.components=e,this.log=e.logger.forComponent("libp2p:registrar"),this.middleware=new Map,this.topologies=new Map,e.metrics?.registerMetricGroup("libp2p_registrar_topologies",{calculate:()=>{let t={};for(let[n,o]of this.topologies)t[n]=o.size;return t}}),this.handlers=st({name:"libp2p_registrar_protocol_handlers",metrics:e.metrics}),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 kh(`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 Rh(`Handler already registered for protocol ${e}`);this.handlers.set(e,{handler:t,options:{maxInboundStreams:Vg,maxOutboundStreams:Hg,...n}}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]},n)}async unhandle(e,t){(Array.isArray(e)?e:[e]).forEach(o=>{this.handlers.delete(o)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()},t)}async register(e,t){if(t==null)throw new A("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))}use(e,t){this.middleware.set(e,t)}unuse(e){this.middleware.delete(e)}getMiddleware(e){return this.middleware.get(e)??[]}async _onDisconnect(e){let t=e.detail,n={signal:AbortSignal.timeout(5e3)};try{let o=await this.components.peerStore.get(t,n);for(let s of o.protocols){let i=this.topologies.get(s);i!=null&&await Promise.all([...i.values()].map(async a=>{a.filter!=null&&a.filter.has(t)!==!0||(a.filter?.remove(t),await a.onDisconnect?.(t))}))}}catch(o){if(o.name==="NotFoundError")return;this.log.error("could not inform topologies of disconnecting peer %p - %e",t,o)}}async _onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(s=>!t.protocols.includes(s));try{for(let s of o){let i=this.topologies.get(s);i!=null&&await Promise.all([...i.values()].map(async a=>{a.filter!=null&&a.filter.has(t.id)!==!0||(a.filter?.remove(t.id),await a.onDisconnect?.(t.id))}))}}catch(s){this.log.error("could not inform topologies of updated peer %p - %e",t.id,s)}}async _onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;try{for(let s of t){let i=this.topologies.get(s);i!=null&&await Promise.all([...i.values()].map(async a=>{n.limits!=null&&a.notifyOnLimitedConnection!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),await a.onConnect?.(o,n))}))}}catch(s){this.log.error("could not inform topologies of updated peer after identify %p - %e",o,s)}}};var Zh=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=st({name:"libp2p_transport_manager_transports",metrics:this.components.metrics}),this.listeners=st({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??Ya.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new A("Transport must have a valid tag");if(this.transports.has(t))throw new A(`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 Bh(`No transport available for address ${String(e)}`);return t?.onProgress?.(new H("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 Mr("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(s=>{t.errors.set(s.toString(),new Ph)});let n=[];for(let[s,i]of this.transports.entries()){let a=i.listenFilter(e);for(let c of a){this.log("creating listener for %s on %a",s,c);let l=i.createListener({upgrader:this.components.upgrader}),d=this.listeners.get(s)??[];d==null&&(d=[],this.listeners.set(s,d)),d.push(l),l.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:l})}),l.addEventListener("close",()=>{let u=d.findIndex(f=>f===l);d.splice(u,1),this.components.events.safeDispatchEvent("transport:close",{detail:l})}),sg.matches(c)?t.ipv4.attempts++:ig.matches(c)&&t.ipv6.attempts++,n.push(l.listen(c).then(()=>{t.errors.delete(c.toString()),sg.matches(c)&&t.ipv4.success++,ig.matches(c)&&t.ipv6.success++},u=>{throw this.log.error("transport %s could not listen on address %a - %e",s,c,u),t.errors.set(c.toString(),u),u}))}}let o=await Promise.allSettled(n);if(!(o.length>0&&o.every(s=>s.status==="fulfilled"))){if(this.ipv6Unsupported(t)){this.log("all IPv4 addresses succeed but all IPv6 failed");return}if(this.faultTolerance===Ya.NO_FATAL){this.log("failed to listen on any address but fault tolerance allows this");return}throw new Lh(`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:
33
- ${[...t.errors.entries()].map(([s,i])=>`
34
- ${s}: ${`${XR(i)}`.split(`
31
+ `,f.status,f.statusText,[...f.headers.entries()].map(([p,y])=>`${p}: ${y}`).join(`
32
+ `)),!f.ok)throw this.#t++,new Error(`Unable to fetch raw block for CID ${e} from gateway ${this.url}, received ${f.status} ${f.statusText}`);t.onProgress?.(new O("helia:block-broker:connected",{broker:"trustless-gateway",type:"connected",provider:this.peer,address:Oc(n.toString()),cid:e})),t.onProgress?.(new O("helia:block-broker:request-block",{broker:"trustless-gateway",type:"request-block",provider:this.peer,cid:e}));let h=await kS(f,o,{signal:s.signal,log:this.log});return t.onProgress?.(new O("helia:block-broker:receive-block",{broker:"trustless-gateway",type:"receive-block",provider:this.peer,cid:e})),this.#a++,h}),this.#c.set(i,c)}return await c}catch(c){throw signal?.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} - ${c.message}`))}finally{t.signal?.removeEventListener("abort",a),this.#c.delete(i)}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#a/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}getStats(){return{attempts:this.#e,errors:this.#t,invalidBlocks:this.#r,successes:this.#a,pendingResponses:this.#c.size}}toString(){return`TrustlessGateway(${this.url})`}};var h8=class extends Ys{name="trustless-gateway-session";routing;allowInsecure;allowLocal;transformRequestInit;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??bp,this.allowLocal=t.allowLocal??xp,this.transformRequestInit=t.transformRequestInit}async queryProvider(e,t,n){this.log("fetching BLOCK for %c from %s",e,t.url),n?.onProgress?.(new O("helia:block-brokers:query-provider:start",{blockBroker:"trustless-gateway",provider:t.url,transport:"http",cid:e}));let o;try{o=await t.getRawBlock(e,n),this.log.trace("got block for %c from %s",e,t.url)}finally{n?.onProgress?.(new O("helia:block-brokers:query-provider:end",{blockBroker:"trustless-gateway",provider:t.url,transport:"http",cid:e}))}return await n.validateFn?.(o),o}async*findNewProviders(e,t={}){yield*wp(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})}toFilterKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}async convertToProvider(e,t,n){if(At(e))return;let o=f8(Array.isArray(e)?e:[e],this.allowInsecure,this.allowLocal);if(o.length===0)return;let i=Ui(o[0]);return new Mc(i,{logger:this.logger,transformRequestInit:this.transformRequestInit,routing:t})}emitFoundProviderProgressEvent(e,t,n){n?.onProgress?.(new O("trustless-gateway:found-provider",{type:"trustless-gateway",cid:e,url:t.url.toJSON(),routing:t.routing}))}};function RS(r,e){return new h8(r,e)}var Ep=class{name="trustless-gateway";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??bp,this.allowLocal=t.allowLocal??xp,this.transformRequestInit=t.transformRequestInit}async retrieve(e,t={}){let n=[];for await(let o of wp(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);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",e,o.url,s);continue}return i}catch(i){if(this.log.error("failed to get block for %c from %s - %e",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 RS({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure,transformRequestInit:this.transformRequestInit})}};var bp=!1,xp=!1,CS=2097152;function p8(r={}){return e=>new Ep(e,r)}async function*ed(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 vM=wo(vp(),1);var Mn=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},Sp=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},Uc=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},Ap=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},Tp=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},_p=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},td=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var g8=new Float32Array([-0]),$i=new Uint8Array(g8.buffer);function PS(r,e,t){g8[0]=r,e[t]=$i[0],e[t+1]=$i[1],e[t+2]=$i[2],e[t+3]=$i[3]}function LS(r,e){return $i[0]=r[e],$i[1]=r[e+1],$i[2]=r[e+2],$i[3]=r[e+3],g8[0]}var y8=new Float64Array([-0]),rr=new Uint8Array(y8.buffer);function DS(r,e,t){y8[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 NS(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],y8[0]}var lM=BigInt(Number.MAX_SAFE_INTEGER),uM=BigInt(Number.MIN_SAFE_INTEGER),jr=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 oa;if(e<lM&&e>uM)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>OS&&(o=0n,++n>OS&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return oa;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):oa}},oa=new jr(0,0);oa.toBigInt=function(){return 0n};oa.zzEncode=oa.zzDecode=function(){return this};oa.length=function(){return 1};var OS=4294967296n;function BS(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 MS(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 w8(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 Un(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Ip(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var b8=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,Un(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 Un(this,4);return Ip(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Un(this,4);return Ip(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Un(this,4);let e=LS(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Un(this,4);let e=NS(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 Un(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return MS(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Un(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Un(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 jr(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 Un(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 Un(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 Un(this,8);let e=Ip(this.buf,this.pos+=4),t=Ip(this.buf,this.pos+=4);return new jr(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=_s(this.buf,this.pos);return this.pos+=ye(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 x8(r){return new b8(r instanceof Uint8Array?r:r.subarray())}function E8(r,e,t){let n=x8(r);return e.decode(n,void 0,t)}function v8(r){let e=r??8192,t=e>>>1,n,o=e;return function(s){if(s<1||s>t)return Re(s);o+s>e&&(n=Re(e),o=0);let a=n.subarray(o,o+=s);return(o&7)!==0&&(o=(o|7)+1),a}}var ia=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function S8(){}var T8=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},dM=v8();function fM(r){return globalThis.Buffer!=null?Re(r):dM(r)}var nd=class{len;head;tail;states;constructor(){this.len=0,this.head=new ia(S8,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new ia(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new _8((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(kp,10,jr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=jr.fromBigInt(e);return this._push(kp,t.length(),t)}uint64Number(e){return this._push(Xn,ye(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=jr.fromBigInt(e).zzEncode();return this._push(kp,t.length(),t)}sint64Number(e){let t=jr.fromNumber(e).zzEncode();return this._push(kp,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(A8,1,e?1:0)}fixed32(e){return this._push(rd,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=jr.fromBigInt(e);return this._push(rd,4,t.lo)._push(rd,4,t.hi)}fixed64Number(e){let t=jr.fromNumber(e);return this._push(rd,4,t.lo)._push(rd,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(PS,4,e)}double(e){return this._push(DS,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(A8,1,0):this.uint32(t)._push(pM,t,e)}string(e){let t=BS(e);return t!==0?this.uint32(t)._push(w8,t,e):this._push(A8,1,0)}fork(){return this.states=new T8(this),this.head=this.tail=new ia(S8,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 ia(S8,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=fM(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function A8(r,e,t){e[t]=r&255}function hM(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var _8=class extends ia{next;constructor(e,t){super(hM,e,t),this.next=void 0}};function kp(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 rd(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 pM(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(nd.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(mM,e,r),this},nd.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(gM,e,r),this});function mM(r,e,t){e.set(r,t)}function gM(r,e,t){r.length<40?w8(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(C(r),t)}function I8(){return new nd}function k8(r,e){let t=I8();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Fc;(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"})(Fc||(Fc={}));function Cp(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function C8(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 Cp("enum",Fc.VARINT,t,n)}function R8(r,e){return Cp("message",Fc.LENGTH_DELIMITED,r,e)}var Er;(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=()=>C8(t)})(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=R8((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=>k8(o,r.codec()),r.decode=(o,i)=>E8(o,r.codec(),i)})(Er||(Er={}));var yM=on("ipns:utils"),FS=C("/ipns/");var wM=0,bM=18;function $S(r){let e;if(r.pubKey!=null)try{e=pt(r.pubKey)}catch(t){throw yM.error(t),t}if(e!=null)return e}function VS(r){let e=C("ipns-signature:");return Ye([e,r])}function od(r){return"signatureV1"in r?Er.encode({value:C(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:C(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):Er.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function ao(r){let e=Er.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 Mn("Missing data or signatureV2");let t=KS(e.data),n=xM(t.Value),o=N(t.Validity);if(e.value!=null&&e.signatureV1!=null)return EM(e),{value:n,validityType:Er.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:Er.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 id(r){return Ye([FS,r.bytes])}function $c(r){let e=He(r.slice(FS.length));if(!Rp(e,wM)&&!Rp(e,bM))throw new ai("Multihash in IPNS key was not identity or sha2-256");return e}function KS(r){let e=Mo(r);if(e.ValidityType===0)e.ValidityType=Er.ValidityType.EOL;else throw new Uc("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 xM(r){let e=N(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${Z.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${Z.parse(e).toV1().toString()}`}catch{}throw new Tp("Value must be a valid content path starting with /")}function EM(r){if(r.data==null)throw new _p("Record data is missing");let e=KS(r.data);if(!se(e.Value,r.value??new Uint8Array(0)))throw new Mn('Field "value" did not match between protobuf and CBOR');if(!se(e.Validity,r.validity??new Uint8Array(0)))throw new Mn('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new Mn('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new Mn('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new Mn('Field "ttl" did not match between protobuf and CBOR')}function Rp(r,e){return r.code===e}var tce=on("ipns"),rce=300*1e9,SM="/ipns/",nce=SM.length;var HS=wo(vp(),1);var Pp=on("ipns:validator"),AM=1024*10;async function TM(r,e){let t=ao(e),n;try{let o=VS(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw Pp.error("record signature verification failed"),new Mn("Record signature verification failed");if(t.validityType===Er.ValidityType.EOL){if(HS.default.fromString(t.validity).toDate().getTime()<Date.now())throw Pp.error("record has expired"),new Sp("record has expired")}else if(t.validityType!=null)throw Pp.error("the validity type is unsupported"),new Uc("The validity type is unsupported");Pp("ipns record for %s is valid",t.value)}async function Lp(r,e){if(e.byteLength>AM)throw new Ap("The record is too large");let t=$c(r),n;Rp(t,0)&&(n=Jf(t));let o=ao(e),i=$S(o)??n;if(i==null)throw new td("Could not extract public key from IPNS record or routing key");let s=id(i.toMultihash());if(!se(s,r))throw new td("Embedded public key did not match routing key");await TM(i,e)}var Dp=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*Vc(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)),Pa(i)&&(i=i.subarray()),o+=n.decode(i,{stream:!0}),o.length>(e?.maxMessageLength??o.length))throw new Dp("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 sa=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},fn=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function _M(r){return r[Symbol.asyncIterator]!=null}function IM(r){if(_M(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var qS=IM;var zS=C("/ipns/");function WS(r){return se(r.subarray(0,zS.byteLength),zS)}var Np=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){try{yield*dn(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[],routing:"delegated-http-routing-v1"}))}catch(n){if(n instanceof We)return;throw n}}async provide(){}async cancelReprovide(){}async put(e,t,n){if(!WS(e))return;let o=$c(e),i=Z.createV1(114,o),s=ao(t);await this.client.putIPNS(i,s,n)}async get(e,t){if(!WS(e))throw new We("Not found");let n=$c(e),o=Z.createV1(114,n);try{let i=await this.client.getIPNS(o,t);return od(i)}catch(i){throw i.name==="BadResponseError"?new We("Not found"):i}}toString(){return`DelegatedRoutingV1HttpApiClientContentRouting(${this.client.url})`}},Op=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await qS(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new We("Not found")}async*getClosestPeers(e,t={}){let n;try{n=Z.decode(e)}catch{try{n=dt(nt.decode(e))}catch{n=Z.createV1(vo,gt.digest(e))}}for await(let o of this.client.getClosestPeers(n,t))yield{id:o.ID,multiaddrs:o.Addrs??[]}}toString(){return`DelegatedRoutingV1HttpApiClientPeerRouting(${this.client.url})`}};var Bp={concurrentRequests:4,timeout:3e4,cacheTTL:300*1e3,cacheName:"delegated-routing-v1-cache"},Mp=class{url;started;httpQueue;shutDownController;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;inFlightRequests;cacheName;cache;cacheTTL;log;constructor(e,t){this.log=e.logger.forComponent("delegated-routing-v1-http-api-client"),this.started=!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.httpQueue=new us({concurrency:t.concurrentRequests??Bp.concurrentRequests}),this.inFlightRequests=new Map,this.url=t.url instanceof URL?t.url:new URL(t.url),this.timeout=t.timeout??Bp.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new Np(this),this.peerRouting=new Op(this),this.cacheName=t.cacheName??Bp.cacheName,this.cacheTTL=t.cacheTTL??Bp.cacheTTL}get[bo](){return this.contentRouting}get[Eo](){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&&this.log("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={}){this.log("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=we([this.shutDownController.signal,n,t.signal]);let i=Se(),s=Se(),a=0;this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let c=new URL(`${this.url}routing/v1/providers/${e}`);this.#t(c,t.filterAddrs,t.filterProtocols);let l={headers:{accept:"application/x-ndjson, application/json;q=0.8"},signal:o},u=await this.#r(c.toString(),l);if(!u.ok){if(u.status===404)return;throw u.status===422?new sa("Request does not conform to schema or semantic constraints"):new fn(`Unexpected status code: ${u.status}`)}let d=u.headers.get("Content-Type");if(d==null)throw new fn("No Content-Type header received");if(u.body==null){if(d!=="application/x-ndjson")throw new fn("Routing response had no body");return}if(d.startsWith("application/json")){let h=(await u.json()).Providers??[];for(let p of h){let y=this.#e(p);y!=null&&(a++,yield y)}}else if(d.includes("application/x-ndjson"))for await(let f of Vc(ed(u.body))){let h=this.#e(f);h!=null&&(a++,yield h)}else throw new fn(`Unsupported Content-Type: ${d}`)}finally{o.clear(),s.resolve(),this.log("getProviders finished found %d providers for %c",a,e)}}async*getPeers(e,t={}){this.log("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=we([this.shutDownController.signal,n,t.signal]);let i=Se(),s=Se();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.url}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)return;if(l.status===422)throw new sa("Request does not conform to schema or semantic constraints");if(l.body==null)throw new fn("Routing response had no body");if(l.headers.get("Content-Type")?.startsWith("application/json")){let f=(await l.json()).Peers??[];for(let h of f){let p=this.#e(h);p!=null&&(yield p)}}else for await(let d of Vc(ed(l.body))){let f=this.#e(d);f!=null&&(yield f)}}catch(a){this.log.error("getPeers errored - %e",a)}finally{o.clear(),s.resolve(),this.log("getPeers finished: %c",e)}}async*getClosestPeers(e,t={}){let n;if(At(e))n=e.toCID().toString();else if(Z.asCID(e)===e||e instanceof Z)n=e.toV1().toString();else throw new _("Key must be CID or PeerId");this.log("getClosestPeers starts: %s",n);let o=AbortSignal.timeout(this.timeout),i=we([this.shutDownController.signal,o,t.signal]);let s=Se(),a=Se();this.httpQueue.add(async()=>(s.resolve(),a.promise));try{await s.promise;let c=new URL(`${this.url}routing/v1/dht/closest/peers/${n}`);this.#t(c,t.filterAddrs,t.filterProtocols);let l={headers:{Accept:"application/x-ndjson"},signal:i},u=await this.#r(c.toString(),l);if(u.status===404)return;if(u.status===422)throw new sa("Request does not conform to schema or semantic constraints");if(u.body==null)throw new fn("Routing response had no body");if(u.headers.get("Content-Type")?.startsWith("application/json")){let h=(await u.json()).Peers??[];for(let p of h){let y=this.#e(p);y!=null&&(yield y)}}else for await(let f of Vc(ed(u.body))){let h=this.#e(f);h!=null&&(yield h)}}catch(c){this.log.error("getClosestPeers errored - %e",c)}finally{i.clear(),a.resolve(),this.log("getClosestPeers finished: %s",n)}}async getIPNS(e,t={}){this.log("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=we([this.shutDownController.signal,n,t.signal]);let i=Se(),s=Se();this.httpQueue.add(async()=>(i.resolve(),s.promise));let a=`${this.url}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(this.log("getIPNS GET %s %d",a,l.status),l.status===404)throw new We("No matching records found");if(l.status===422)throw new sa("Request does not conform to schema or semantic constraints");if(!l.ok)throw new fn(`Unexpected status code: ${l.status}`);let u=l.headers.get("Content-Type");if(u==null||!u.includes("application/vnd.ipfs.ipns-record"))throw new We("No matching records found");if(l.body==null)throw new fn("GET ipns response had no body");let d=await l.arrayBuffer(),f=new Uint8Array(d,0,d.byteLength);return t.validate!==!1&&await Lp(id(e.multihash),f),ao(f)}catch(c){throw this.log.error("getIPNS GET %s error - %e",a,c),c}finally{o.clear(),s.resolve(),this.log("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){this.log("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),i=we([this.shutDownController.signal,o,n.signal]);let s=Se(),a=Se();this.httpQueue.add(async()=>(s.resolve(),a.promise));let c=`${this.url}routing/v1/ipns/${e}`;try{await s.promise;let l=od(t),u={method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:i},d=await this.#r(c,u);if(this.log("putIPNS PUT %s %d",c,d.status),d.status!==200)throw new fn("PUT ipns response had status other than 200")}catch(l){throw this.log.error("putIPNS PUT %s error - %e",c,l.stack),l}finally{i.clear(),a.resolve(),this.log("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(X)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:Xe(e.ID),Addrs:n,Protocols:t}}catch(t){this.log.error("could not conform record to peer schema - %e",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 this.log("returning cached response for %s",o),this.logResponse(c),c;this.log("evicting cached response for %s",o),await this.cache?.delete(e)}else this.cache!=null&&this.log("cache miss for %s",o)}let i=this.inFlightRequests.get(o);if(i!=null){let c=await i;return this.log("deduplicating outgoing request for %s",o),c.clone()}this.log("outgoing request:"),this.logRequest(e,t);let s=fetch(e,t).then(async c=>{if(this.log("incoming response:"),this.logResponse(c),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}toString(){return`DefaultDelegatedRoutingV1HttpApiClient(${this.url})`}logRequest(e,t){let n=new Headers(t.headers);this.log("%s %s HTTP/1.1",t.method??"GET",e);for(let[o,i]of n.entries())this.log("%s: %s",o,i)}logResponse(e){this.log("HTTP/1.1 %d %s",e.status,e.statusText);for(let[t,n]of e.headers.entries())this.log("%s: %s",t,n)}};function GS(r){return e=>new Mp(e,r)}function P8(r){return{url:"https://delegated-ipfs.dev",filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var kM=["https://trustless-gateway.link","https://4everland.io"],CM=2336;function RM(r){return r=r.toString(),{id:Wr(Z.createV1(CM,gt.digest(C(r)))),multiaddrs:[Oc(r)]}}function PM(r){return new URL(N(r.id.toMultihash().digest))}var L8=class{name="http-gateway-router";gateways;shuffle;constructor(e={}){this.gateways=(e.gateways??kM).map(t=>RM(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"],routing:"http-gateway-routing"}))}toString(){return`HTTPGatewayRouter([${this.gateways.map(e=>PM(e)).join(", ")}])`}};function D8(r={}){return new L8(r)}var N8=class{name="libp2p-router";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)}toString(){return"Libp2pRouter()"}};function O8(r){return new N8(r)}function LM(r){return r[Symbol.asyncIterator]!=null}function DM(r){if(LM(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 Go=DM;function NM(r){return typeof r?.then=="function"}var sd=class extends Ho{data;constructor(){super(),this.data=new Map}put(e,t,n){n?.signal?.throwIfAborted();let o;if(t instanceof Uint8Array)o=[t];else{let i=Go(t);if(NM(i))return i.then(s=>this._put(e,s,n));o=i}return this._put(e,o,n)}_put(e,t,n){return n?.signal?.throwIfAborted(),this.data.set(_t.encode(e.multihash.bytes),t),e}*get(e,t){t?.signal?.throwIfAborted();let n=this.data.get(_t.encode(e.multihash.bytes));if(n==null)throw new un;yield*n}has(e,t){return t?.signal?.throwIfAborted(),this.data.has(_t.encode(e.multihash.bytes))}async delete(e,t){t?.signal?.throwIfAborted(),this.data.delete(_t.encode(e.multihash.bytes))}*getAll(e){e?.signal?.throwIfAborted();for(let[t,n]of this.data.entries())yield{cid:Z.createV1(vo,He(_t.decode(t))),bytes:(async function*(){yield*n})()},e?.signal?.throwIfAborted()}};var kle=on("blockstore:core:tiered");var jS="SHARDING";function BM(r){return r[Symbol.asyncIterator]!=null}function MM(r,e){return BM(r)?(async function*(){yield*(await Go(r)).sort(e)})():(function*(){yield*Go(r).sort(e)})()}var Up=MM;var jo=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 yr(this.putMany(e,n)),e=[],await yr(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=Nn(n,i=>i.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>Nn(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>Up(o,i),n)),e.offset!=null){let o=0,i=e.offset;n=Nn(n,()=>o++>=i)}return e.limit!=null&&(n=Mi(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=Nn(n,i=>i.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>Nn(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>Up(o,i),n)),e.offset!=null){let o=e.offset,i=0;n=Nn(n,()=>i++>=o)}return e.limit!=null&&(n=Mi(n,e.limit)),n}};var aa=class extends jo{data;constructor(){super(),this.data=new Map}put(e,t,n){return n?.signal?.throwIfAborted(),this.data.set(e.toString(),t),e}get(e,t){t?.signal?.throwIfAborted();let n=this.data.get(e.toString());if(n==null)throw new un;return n}has(e,t){return t?.signal?.throwIfAborted(),this.data.has(e.toString())}delete(e,t){t?.signal?.throwIfAborted(),this.data.delete(e.toString())}*_all(e,t){t?.signal?.throwIfAborted();for(let[n,o]of this.data.entries())yield{key:new Ze(n),value:o},t?.signal?.throwIfAborted()}*_allKeys(e,t){t?.signal?.throwIfAborted();for(let n of this.data.keys())yield new Ze(n),t?.signal?.throwIfAborted()}};var sue=new Ze(jS);var xue=on("datastore:core:tiered");async function XS(r){if(r.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new _("Private network is enforced, but no protector was provided");return r}var ad;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.publicKey!=null&&i.publicKey.byteLength>0&&(s.uint32(10),s.bytes(i.publicKey)),i.payloadType!=null&&i.payloadType.byteLength>0&&(s.uint32(18),s.bytes(i.payloadType)),i.payload!=null&&i.payload.byteLength>0&&(s.uint32(26),s.bytes(i.payload)),i.signature!=null&&i.signature.byteLength>0&&(s.uint32(42),s.bytes(i.signature)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={publicKey:de(0),payloadType:de(0),payload:de(0),signature:de(0)},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.publicKey=i.bytes();break}case 2:{c.payloadType=i.bytes();break}case 3:{c.payload=i.bytes();break}case 5:{c.signature=i.bytes();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.publicKey`,value:i.bytes()};break}case 2:{yield{field:`${a}.payloadType`,value:i.bytes()};break}case 3:{yield{field:`${a}.payload`,value:i.bytes()};break}case 5:{yield{field:`${a}.signature`,value:i.bytes()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(ad||(ad={}));var Fp=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var Yr=class r{static createFromProtobuf=e=>{let t=ad.decode(e),n=pt(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t,n)=>{if(t==null)throw new Error("Missing private key");let o=e.domain,i=e.codec,s=e.marshal(),a=QS(o,i,s),c=await t.sign(a.subarray(),n);return new r({publicKey:t.publicKey,payloadType:i,payload:s,signature:c})};static openAndCertify=async(e,t,n)=>{let o=r.createFromProtobuf(e);if(!await o.validate(t,n))throw new Fp("Envelope signature is not valid for the given domain");return o};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=ad.encode({publicKey:It(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return e==null?!1:se(this.marshal(),e.marshal())}async validate(e,t){let n=QS(e,this.payloadType,this.payload);return this.publicKey.verify(n.subarray(),this.signature,t)}},QS=(r,e,t)=>{let n=C(r),o=Zt(n.byteLength),i=Zt(e.length),s=Zt(t.length);return new ne(o,n,i,e,s,t)};var ZS="libp2p-peer-record",JS=Uint8Array.from([3,1]);var cd;(function(r){let e;(function(s){let a;s.codec=()=>(a==null&&(a=me((d,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),d.multiaddr!=null&&d.multiaddr.byteLength>0&&(f.uint32(10),f.bytes(d.multiaddr)),h.lengthDelimited!==!1&&f.ldelim()},(d,f,h={})=>{let p={multiaddr:de(0)},y=f==null?d.len:d.pos+f;for(;d.pos<y;){let g=d.uint32();switch(g>>>3){case 1:{p.multiaddr=d.bytes();break}default:{d.skipType(g&7);break}}}return p},function*(d,f,h,p={}){let y=f==null?d.len:d.pos+f;for(;d.pos<y;){let g=d.uint32();switch(g>>>3){case 1:{yield{field:`${h}.multiaddr`,value:d.bytes()};break}default:{d.skipType(g&7);break}}}})),a);function c(d){return he(d,s.codec())}s.encode=c;function l(d,f){return fe(d,s.codec(),f)}s.decode=l;function u(d,f){return pe(d,s.codec(),f)}s.stream=u})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=me((s,a,c={})=>{if(c.lengthDelimited!==!1&&a.fork(),s.peerId!=null&&s.peerId.byteLength>0&&(a.uint32(10),a.bytes(s.peerId)),s.seq!=null&&s.seq!==0n&&(a.uint32(16),a.uint64(s.seq)),s.addresses!=null&&s.addresses.length>0)for(let l of s.addresses)a.uint32(26),r.AddressInfo.codec().encode(l,a);c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={peerId:de(0),seq:0n,addresses:[]},u=a==null?s.len:s.pos+a;for(;s.pos<u;){let d=s.uint32();switch(d>>>3){case 1:{l.peerId=s.bytes();break}case 2:{l.seq=s.uint64();break}case 3:{if(c.limits?.addresses!=null&&l.addresses.length===c.limits.addresses)throw new Ee('Decode error - repeated field "addresses" had too many elements');l.addresses.push(r.AddressInfo.codec().decode(s,s.uint32(),{limits:c.limits?.addresses$}));break}default:{s.skipType(d&7);break}}}return l},function*(s,a,c,l={}){let u={addresses:0},d=a==null?s.len:s.pos+a;for(;s.pos<d;){let f=s.uint32();switch(f>>>3){case 1:{yield{field:`${c}.peerId`,value:s.bytes()};break}case 2:{yield{field:`${c}.seq`,value:s.uint64()};break}case 3:{if(l.limits?.addresses!=null&&u.addresses===l.limits.addresses)throw new Ee('Streaming decode error - repeated field "addresses" had too many elements');for(let h of r.AddressInfo.codec().stream(s,s.uint32(),`${c}.addresses[]`,{limits:l.limits?.addresses$}))yield{...h,index:u.addresses};u.addresses++;break}default:{s.skipType(f&7);break}}}})),t);function n(s){return he(s,r.codec())}r.encode=n;function o(s,a){return fe(s,r.codec(),a)}r.decode=o;function i(s,a){return pe(s,r.codec(),a)}r.stream=i})(cd||(cd={}));function eA(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 pr=class r{static createFromProtobuf=e=>{let t=cd.decode(e),n=dt(He(t.peerId)),o=(t.addresses??[]).map(s=>X(s.multiaddr)),i=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:i})};static DOMAIN=ZS;static CODEC=JS;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=cd.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||!eA(this.multiaddrs,e.multiaddrs))}};var Yo;(function(r){let e;(function(a){let c;a.codec=()=>(c==null&&(c=me((f,h,p={})=>{p.lengthDelimited!==!1&&h.fork(),f.key!=null&&f.key!==""&&(h.uint32(10),h.string(f.key)),f.value!=null&&f.value.byteLength>0&&(h.uint32(18),h.bytes(f.value)),p.lengthDelimited!==!1&&h.ldelim()},(f,h,p={})=>{let y={key:"",value:de(0)},g=h==null?f.len:f.pos+h;for(;f.pos<g;){let m=f.uint32();switch(m>>>3){case 1:{y.key=f.string();break}case 2:{y.value=f.bytes();break}default:{f.skipType(m&7);break}}}return y},function*(f,h,p,y={}){let g=h==null?f.len:f.pos+h;for(;f.pos<g;){let m=f.uint32();switch(m>>>3){case 1:{yield{field:`${p}.key`,value:f.string()};break}case 2:{yield{field:`${p}.value`,value:f.bytes()};break}default:{f.skipType(m&7);break}}}})),c);function l(f){return he(f,a.codec())}a.encode=l;function u(f,h){return fe(f,a.codec(),h)}a.decode=u;function d(f,h){return pe(f,a.codec(),h)}a.stream=d})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(a){let c;a.codec=()=>(c==null&&(c=me((f,h,p={})=>{p.lengthDelimited!==!1&&h.fork(),f.key!=null&&f.key!==""&&(h.uint32(10),h.string(f.key)),f.value!=null&&(h.uint32(18),ud.codec().encode(f.value,h)),p.lengthDelimited!==!1&&h.ldelim()},(f,h,p={})=>{let y={key:""},g=h==null?f.len:f.pos+h;for(;f.pos<g;){let m=f.uint32();switch(m>>>3){case 1:{y.key=f.string();break}case 2:{y.value=ud.codec().decode(f,f.uint32(),{limits:p.limits?.value});break}default:{f.skipType(m&7);break}}}return y},function*(f,h,p,y={}){let g=h==null?f.len:f.pos+h;for(;f.pos<g;){let m=f.uint32();switch(m>>>3){case 1:{yield{field:`${p}.key`,value:f.string()};break}case 2:{yield*ud.codec().stream(f,f.uint32(),`${p}.value`,{limits:y.limits?.value});break}default:{f.skipType(m&7);break}}}})),c);function l(f){return he(f,a.codec())}a.encode=l;function u(f,h){return fe(f,a.codec(),h)}a.decode=u;function d(f,h){return pe(f,a.codec(),h)}a.stream=d})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=me((a,c,l={})=>{if(l.lengthDelimited!==!1&&c.fork(),a.addresses!=null&&a.addresses.length>0)for(let u of a.addresses)c.uint32(10),ld.codec().encode(u,c);if(a.protocols!=null&&a.protocols.length>0)for(let u of a.protocols)c.uint32(18),c.string(u);if(a.publicKey!=null&&(c.uint32(34),c.bytes(a.publicKey)),a.peerRecordEnvelope!=null&&(c.uint32(42),c.bytes(a.peerRecordEnvelope)),a.metadata!=null&&a.metadata.size>0)for(let[u,d]of a.metadata.entries())c.uint32(50),r.Peer$metadataEntry.codec().encode({key:u,value:d},c);if(a.tags!=null&&a.tags.size>0)for(let[u,d]of a.tags.entries())c.uint32(58),r.Peer$tagsEntry.codec().encode({key:u,value:d},c);a.updated!=null&&(c.uint32(64),c.uint64Number(a.updated)),l.lengthDelimited!==!1&&c.ldelim()},(a,c,l={})=>{let u={addresses:[],protocols:[],metadata:new Map,tags:new Map},d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{if(l.limits?.addresses!=null&&u.addresses.length===l.limits.addresses)throw new Ee('Decode error - repeated field "addresses" had too many elements');u.addresses.push(ld.codec().decode(a,a.uint32(),{limits:l.limits?.addresses$}));break}case 2:{if(l.limits?.protocols!=null&&u.protocols.length===l.limits.protocols)throw new Ee('Decode error - repeated field "protocols" had too many elements');u.protocols.push(a.string());break}case 4:{u.publicKey=a.bytes();break}case 5:{u.peerRecordEnvelope=a.bytes();break}case 6:{if(l.limits?.metadata!=null&&u.metadata.size===l.limits.metadata)throw new ql('Decode error - map field "metadata" had too many elements');let h=r.Peer$metadataEntry.codec().decode(a,a.uint32(),{limits:{value:l.limits?.metadata$value}});u.metadata.set(h.key,h.value);break}case 7:{if(l.limits?.tags!=null&&u.tags.size===l.limits.tags)throw new ql('Decode error - map field "tags" had too many elements');let h=r.Peer$tagsEntry.codec().decode(a,a.uint32(),{limits:{value:l.limits?.tags$value}});u.tags.set(h.key,h.value);break}case 8:{u.updated=a.uint64Number();break}default:{a.skipType(f&7);break}}}return u},function*(a,c,l,u={}){let d={addresses:0,protocols:0,metadata:0,tags:0},f=c==null?a.len:a.pos+c;for(;a.pos<f;){let h=a.uint32();switch(h>>>3){case 1:{if(u.limits?.addresses!=null&&d.addresses===u.limits.addresses)throw new Ee('Streaming decode error - repeated field "addresses" had too many elements');for(let p of ld.codec().stream(a,a.uint32(),`${l}.addresses[]`,{limits:u.limits?.addresses$}))yield{...p,index:d.addresses};d.addresses++;break}case 2:{if(u.limits?.protocols!=null&&d.protocols===u.limits.protocols)throw new Ee('Streaming decode error - repeated field "protocols" had too many elements');yield{field:`${l}.protocols[]`,index:d.protocols,value:a.string()},d.protocols++;break}case 4:{yield{field:`${l}.publicKey`,value:a.bytes()};break}case 5:{yield{field:`${l}.peerRecordEnvelope`,value:a.bytes()};break}case 6:{if(u.limits?.metadata!=null&&d.metadata===u.limits.metadata)throw new Ee('Decode error - map field "metadata" had too many elements');yield*r.Peer$metadataEntry.codec().stream(a,a.uint32(),`${l}.metadata{}`,{limits:{value:u.limits?.metadata$value}}),d.metadata++;break}case 7:{if(u.limits?.tags!=null&&d.tags===u.limits.tags)throw new Ee('Decode error - map field "tags" had too many elements');yield*r.Peer$tagsEntry.codec().stream(a,a.uint32(),`${l}.tags{}`,{limits:{value:u.limits?.tags$value}}),d.tags++;break}case 8:{yield{field:`${l}.updated`,value:a.uint64Number()};break}default:{a.skipType(h&7);break}}}})),n);function o(a){return he(a,r.codec())}r.encode=o;function i(a,c){return fe(a,r.codec(),c)}r.decode=i;function s(a,c){return pe(a,r.codec(),c)}r.stream=s})(Yo||(Yo={}));var ld;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.multiaddr!=null&&i.multiaddr.byteLength>0&&(s.uint32(10),s.bytes(i.multiaddr)),i.isCertified!=null&&(s.uint32(16),s.bool(i.isCertified)),i.observed!=null&&(s.uint32(24),s.uint64Number(i.observed)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={multiaddr:de(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}case 2:{c.isCertified=i.bool();break}case 3:{c.observed=i.uint64Number();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.multiaddr`,value:i.bytes()};break}case 2:{yield{field:`${a}.isCertified`,value:i.bool()};break}case 3:{yield{field:`${a}.observed`,value:i.uint64Number()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(ld||(ld={}));var ud;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.value!=null&&i.value!==0&&(s.uint32(8),s.uint32(i.value)),i.expiry!=null&&(s.uint32(16),s.uint64(i.expiry)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={value:0},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.value=i.uint32();break}case 2:{c.expiry=i.uint64();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.value`,value:i.uint32()};break}case 2:{yield{field:`${a}.expiry`,value:i.uint64()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(ud||(ud={}));function UM(r,e){if(r.publicKey!=null||e.publicKey==null)return r;let t;r.type==="RSA"&&(t=r.toMultihash());let n=pt(e.publicKey,t);return so(n)}function tA(r,e,t){let n=Yo.decode(e);return Kc(r,n,t)}function Kc(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:UM(r,e),addresses:e.addresses.filter(({observed:i})=>i!=null&&i>Date.now()-t).map(({multiaddr:i,isCertified:s})=>({multiaddr:X(i),isCertified:s??!1})),metadata:e.metadata,peerRecordEnvelope:e.peerRecordEnvelope??void 0,tags:n}}function rA(r,e){return FM(r.addresses,e.addresses)&&$M(r.protocols,e.protocols)&&VM(r.publicKey,e.publicKey)&&KM(r.peerRecordEnvelope,e.peerRecordEnvelope)&&HM(r.metadata,e.metadata)&&qM(r.tags,e.tags)}function FM(r,e){return oA(r,e,(t,n)=>!(t.isCertified!==n.isCertified||!se(t.multiaddr,n.multiaddr)))}function $M(r,e){return oA(r,e,(t,n)=>t===n)}function VM(r,e){return nA(r,e)}function KM(r,e){return nA(r,e)}function HM(r,e){return iA(r,e,(t,n)=>se(t,n))}function qM(r,e){return iA(r,e,(t,n)=>t.value===n.value&&t.expiry===n.expiry)}function nA(r,e){return r==null&&e==null?!0:r!=null&&e!=null?se(r,e):!1}function oA(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 iA(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 B8="/peers/";function dd(r){if(!At(r)||r.type==null)throw new _("Invalid PeerId");let e=r.toCID().toString();return new Ze(`${B8}${e}`)}async function sA(r,e,t,n,o){let i=new Map;for(let s of t){if(s==null)continue;if(s.multiaddr instanceof Uint8Array&&(s.multiaddr=X(s.multiaddr)),!eo(s.multiaddr))throw new _("Multiaddr was invalid");if(!await e(r,s.multiaddr,o))continue;let a=s.isCertified??!1,c=s.multiaddr.toString(),l=i.get(c);l!=null?s.isCertified=l.isCertified||a:i.set(c,{multiaddr:s.multiaddr,isCertified:a})}return[...i.values()].sort((s,a)=>s.multiaddr.toString().localeCompare(a.multiaddr.toString())).map(({isCertified:s,multiaddr:a})=>{let c=a.getComponents().find(l=>l.code===421)?.value;return r.equals(c)&&(a=a.decapsulate(X(`/p2p/${r}`))),{isCertified:s,multiaddr:a.bytes}})}async function Vp(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?.peer;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=$p(f,{validate:aA})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=$p(f,{validate:cA,map:lA})}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=$p([...a.entries()],{validate:aA})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),h=new Map(c);for(let[p,y]of f)y==null?h.delete(p):h.set(p,y);c=$p([...h.entries()],{validate:cA,map:lA})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let u;o?.id.publicKey!=null?u=It(o.id.publicKey):e.publicKey!=null?u=It(e.publicKey):r.publicKey!=null&&(u=It(r.publicKey));let d={addresses:await sA(r,n.addressFilter??(async()=>!0),i,n.existingPeer?.peerPB.addresses,n),protocols:[...s.values()].sort((f,h)=>f.localeCompare(h)),metadata:a,tags:c,publicKey:u,peerRecordEnvelope:l};return d.addresses.forEach(f=>{f.observed=n.existingPeer?.peerPB.addresses?.find(h=>se(h.multiaddr,h.multiaddr))?.observed??Date.now()}),r.type!=="RSA"&&delete d.publicKey,d}function $p(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 aA(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 cA(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 lA(r,e){let t;e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl)));let n={value:e.value??0};return t!=null&&(n.expiry=t),n}function uA(r){let e=r.toString().split("/")[2],t=Z.parse(e,_t);return Wr(t)}function M8(r,e,t){let n=uA(r);return tA(n,e,t)}function zM(r,e){return{prefix:B8,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(M8(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(M8(n.key,n.value,e),M8(o.key,o.value,e)))}}var Kp=class{peerId;datastore;locks;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.locks=qo({name:"libp2p_peer_store_locks",metrics:e.metrics}),this.maxAddressAge=t.maxAddressAge??36e5,this.maxPeerAge=t.maxPeerAge??216e5}getLock(e){let t=this.locks.get(e);return t==null&&(t={refs:0,lock:Iu({name:e.toString(),singleProcess:!0})},this.locks.set(e,t)),t.refs++,t}maybeRemoveLock(e,t){t.refs--,t.refs===0&&(t.lock.finalize(),this.locks.delete(e))}async getReadLock(e,t){let n=this.getLock(e);try{let o=await n.lock.readLock(t);return()=>{o(),this.maybeRemoveLock(e,n)}}catch(o){throw this.maybeRemoveLock(e,n),o}}async getWriteLock(e,t){let n=this.getLock(e);try{let o=await n.lock.writeLock(t);return()=>{o(),this.maybeRemoveLock(e,n)}}catch(o){throw this.maybeRemoveLock(e,n),o}}async has(e,t){try{return await this.load(e,t),!0}catch(n){if(n.name!=="NotFoundError")throw n}return!1}async delete(e,t){this.peerId.equals(e)||await this.datastore.delete(dd(e),t)}async load(e,t){let n=dd(e),o=await this.datastore.get(n,t),i=Yo.decode(o);if(this.#r(e,i))throw await this.datastore.delete(n,t),new We;return Kc(e,i,this.peerId.equals(e)?1/0:this.maxAddressAge)}async save(e,t,n){let o=await this.#e(e,n),i=await Vp(e,t,"patch",{...n,addressFilter:this.addressFilter});return this.#t(e,i,o)}async patch(e,t,n){let o=await this.#e(e,n),i=await Vp(e,t,"patch",{...n,addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,i,o)}async merge(e,t,n){let o=await this.#e(e,n),i=await Vp(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,i,o)}async*all(e){for await(let{key:t,value:n}of this.datastore.query(zM(e??{},this.maxAddressAge),e)){let o=uA(t);if(o.equals(this.peerId))continue;let i=Yo.decode(n);if(this.#r(o,i)){await this.datastore.delete(t,e);continue}yield Kc(o,i,this.peerId.equals(o)?1/0:this.maxAddressAge)}}async#e(e,t){try{let n=dd(e),o=await this.datastore.get(n,t),i=Yo.decode(o);if(this.#r(e,i))throw await this.datastore.delete(n,t),new We;return{peerPB:i,peer:Kc(e,i,this.maxAddressAge)}}catch(n){n.name!=="NotFoundError"&&this.log.error("invalid peer data found in peer store - %e",n)}}async#t(e,t,n,o){t.updated=Date.now();let i=Yo.encode(t);return await this.datastore.put(dd(e),i,o),{peer:Kc(e,t,this.maxAddressAge),previous:n?.peer,updated:n==null||!rA(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 U8=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 Kp(e,t)}[Symbol.toStringTag]="@libp2p/peer-store";async forEach(e,t){for await(let n of this.store.all(t))e(n)}async all(e){return Go(this.store.all(e))}async delete(e,t){let n=await this.store.getReadLock(e,t);try{await this.store.delete(e,t)}finally{n()}}async has(e,t){let n=await this.store.getReadLock(e,t);try{return await this.store.has(e,t)}finally{this.log.trace("has release read lock"),n?.()}}async get(e,t){let n=await this.store.getReadLock(e,t);try{return await this.store.load(e,t)}finally{n?.()}}async getInfo(e,t){let n=await this.get(e,t);return{id:n.id,multiaddrs:n.addresses.map(({multiaddr:o})=>o)}}async save(e,t,n){let o=await this.store.getWriteLock(e,n);try{let i=await this.store.save(e,t,n);return this.#e(e,i),i.peer}finally{o?.()}}async patch(e,t,n){let o=await this.store.getWriteLock(e,n);try{let i=await this.store.patch(e,t,n);return this.#e(e,i),i.peer}finally{o?.()}}async merge(e,t,n){let o=await this.store.getWriteLock(e,n);try{let i=await this.store.merge(e,t,n);return this.#e(e,i),i.peer}finally{o?.()}}async consumePeerRecord(e,t,n){let o=At(t)?t:At(t?.expectedPeer)?t.expectedPeer:void 0,i=At(t)||t===void 0?n:t,s=await Yr.openAndCertify(e,pr.DOMAIN,i),a=Wr(s.publicKey.toCID());if(o?.equals(a)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",o,a),!1;let c=pr.createFromProtobuf(s.payload),l;try{l=await this.get(a,i)}catch(u){if(u.name!=="NotFoundError")throw u}if(l?.peerRecordEnvelope!=null){let u=Yr.createFromProtobuf(l.peerRecordEnvelope),d=pr.createFromProtobuf(u.payload);if(d.seqNumber>=c.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",d.seqNumber,c.seqNumber),!1}return await this.patch(c.peerId,{peerRecordEnvelope:e,addresses:c.multiaddrs.map(u=>({isCertified:!0,multiaddr:u}))},i),!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 dA(r,e={}){return new U8(r,e)}var fA=864e13;var Hp=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:dns-mappings"),this.mappings=wt({name:"libp2p_address_manager_dns_mappings",metrics:e.metrics})}has(e){let t=ce(e),n=t.host;(t.type==="ip4"||t.type==="ip6")&&t.sni!=null&&(n=t.sni);for(let o of this.mappings.values())if(o.domain===n)return!0;return!1}add(e,t){t.forEach(n=>{this.log("add DNS mapping %s to %s",n,e);let o=ec(n)===!0;this.mappings.set(n,{domain:e,verified:o,expires:o?fA-Date.now():0,lastVerified:o?fA-Date.now():void 0})})}remove(e){let t=ce(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;let n=!1;for(let[o,i]of this.mappings.entries())i.domain===t.sni&&(this.log("removing %s to %s DNS mapping %e",o,i.domain),this.mappings.delete(o),n=n||i.verified);return n}getAll(e){let t=[];for(let n=0;n<e.length;n++){let o=e[n].multiaddr;if(!Ft(o))continue;let i=ce(o);for(let[s,a]of this.mappings.entries()){if(i.host!==s)continue;let c=this.maybeAddSNIComponent(o,a.domain);c!=null&&(e.splice(n,1),n--,t.push({multiaddr:c,verified:a.verified,type:"dns-mapping",expires:a.expires,lastVerified:a.lastVerified}))}}return t}maybeAddSNIComponent(e,t){let n=e.getComponents();for(let o=0;o<n.length;o++)if(n[o].code===448&&n[o+1]?.code!==449)return n.splice(o+1,0,{name:"sni",code:449,value:t}),X(n)}confirm(e,t){let n=ce(e),o=n.host;(n.type==="ip4"||n.type==="ip6")&&n.sni!=null&&(o=n.sni);let i=!1;for(let[s,a]of this.mappings.entries())a.domain===o&&(this.log("marking %s to %s DNS mapping as verified",s,a.domain),i=a.verified,a.verified=!0,a.expires=Date.now()+t,a.lastVerified=Date.now());return i}unconfirm(e,t){let n=ce(e);if(n.type!=="ip4"&&n.type!=="ip6")return!1;let o=n.sni??n.host,i=!1;for(let[s,a]of this.mappings.entries())a.domain===o&&(this.log("removing verification of %s to %s DNS mapping",s,a.domain),i=i||a.verified,a.verified=!1,a.expires=Date.now()+t);return i}};var qp=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:ip-mappings"),this.mappings=wt({name:"libp2p_address_manager_ip_mappings",metrics:e.metrics})}has(e){let t=ce(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;for(let n of this.mappings.values())for(let o of n)if(o.externalIp===t.host)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:An(n)?4:6,protocol:i,verified:!1,expires:0};a.push(c),this.mappings.set(s,a)}remove(e){let t=ce(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;let n=!1;for(let[o,i]of this.mappings.entries()){for(let s=0;s<i.length;s++){let a=i[s];a.externalIp===t.host&&a.externalPort===t.port&&a.protocol===t.protocol&&(this.log("removing %s:%s to %s:%s %s IP mapping",a.externalIp,a.externalPort,t.host,t.port,t.protocol),n=n||a.verified,i.splice(s,1),s--)}i.length===0&&this.mappings.delete(o)}return n}getAll(e){let t=[];for(let{multiaddr:n}of e){if(!Ft(n))continue;let o=ce(n);if(o.type!=="ip4"&&o.type!=="ip6")continue;let i;if(o.protocol==="tcp"?i=`${o.host}-${o.port}-tcp`:o.protocol==="udp"&&(i=`${o.host}-${o.port}-udp`),i==null)continue;let s=this.mappings.get(i);if(s!=null)for(let a of s)t.push({multiaddr:this.maybeOverrideIp(n,a.externalIp,a.externalFamily,a.protocol,a.externalPort),verified:a.verified,type:"ip-mapping",expires:a.expires,lastVerified:a.lastVerified})}return t}maybeOverrideIp(e,t,n,o,i){let s=e.getComponents(),a=s.findIndex(l=>l.code===4||l.code===41),c=s.findIndex(l=>l.name===o);return a>-1&&c>-1?(s[a].value=t,s[a].code=n===4?4:41,s[c].value=`${i}`,X(s)):e}confirm(e,t){if(!Ft(e))return!1;let n=ce(e),o=!1;for(let i of this.mappings.values())for(let s of i)s.externalIp===n.host&&(this.log("marking %s to %s IP mapping as verified",s.internalIp,s.externalIp),o=s.verified,s.verified=!0,s.expires=Date.now()+t,s.lastVerified=Date.now());return o}unconfirm(e,t){if(!Ft(e))return!1;let n=ce(e),o=!1;for(let i of this.mappings.values())for(let s=0;s<i.length;s++){let a=i[s];a.externalIp===n.host&&a.externalPort===n.port&&a.protocol===n.protocol&&(this.log("removing verification of %s:%s to %s:%s %s IP mapping",a.externalIp,a.externalPort,n.host,n.port,n.protocol),o=o||a.verified,a.verified=!1,a.expires=Date.now()+t)}return o}};var WM={maxObservedAddresses:10},zp=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=wt({name:"libp2p_address_manager_observed_addresses",metrics:e.metrics}),this.maxObservedAddresses=t.maxObservedAddresses??WM.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&&(ut(e)||Aw(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:X(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 GM={maxObservedAddresses:10},Wp=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=wt({name:"libp2p_address_manager_transport_addresses",metrics:e.metrics}),this.maxObservedAddresses=t.maxObservedAddresses??GM.maxObservedAddresses}get(e,t){if(ut(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:!Ft(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(!Ft(e))return e.toString();let t=ce(e);return`${t.host}-${t.port}-${t.protocol}`}};var hA=6e4,pA={maxObservedAddresses:10,addressVerificationTTL:hA*10,addressVerificationRetry:hA*5},jM=r=>r;function F8(r,e){let t=r.getComponents().findLast(n=>n.code===421)?.value;return t!=null&&Xe(t).equals(e)&&(r=r.decapsulate(X(`/p2p/${e.toString()}`))),r}var Gp=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 zp(e,t),this.dnsMappings=new Hp(e,t),this.ipMappings=new qp(e,t),this.transportAddresses=new Wp(e,t),this.announceFilter=t.announceFilter??jM,this.observedAddressFilter=Ut(1024),this.addressVerificationTTL=t.addressVerificationTTL??pA.addressVerificationTTL,this.addressVerificationRetry=t.addressVerificationRetry??pA.addressVerificationRetry,this._updatePeerStoreAddresses=Po(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.getComponents().findLast(n=>n.code===421)?.value===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 - %e",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>X(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>X(e))}getAppendAnnounceAddrs(){return Array.from(this.appendAnnounce).map(e=>X(e))}getObservedAddrs(){return this.observed.getAll().map(e=>e.multiaddr)}addObservedAddr(e){let t=ce(e),n;switch(t.type){case"ip4":{n=`${t.host}:${t.port}`;break}case"ip6":{n=`[${t.host}]:${t.port}`;break}default:return}this.observedAddressFilter.has(n)||(this.observedAddressFilter.add(n),e=F8(e,this.components.peerId),!this.ipMappings.has(e)&&(this.dnsMappings.has(e)||this.observed.add(e)))}confirmObservedAddr(e,t){e=F8(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=F8(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=X(n);return o.getComponents().pop()?.value===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(X(`/dns/${e}`))&&this._updatePeerStoreAddresses()}addPublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.add(e,t,n,o,i),this.observed.removePrefixed(`/ip${An(n)?4:6}/${n}/${i}/${o}`)}removePublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.remove(X(`/ip${An(n)?4:6}/${n}/${i}/${o}`))&&this._updatePeerStoreAddresses()}maybeUpgradeToIPMapping(e){if(this.ipMappings.has(e)||!Ft(e))return!1;let t=ce(e);if(t.type!=="ip4"||ec(t.host)===!0)return!1;let n=this.components.transportManager.getListeners(),o=[i=>Wo.exactMatch(i)||na.exactMatch(i),i=>ra.exactMatch(i),i=>ES.exactMatch(i)];for(let i of o){if(!i(e))continue;let s=n.filter(l=>l.getAddrs().filter(u=>ce(u).type==="ip4"&&i(u)).length>0);if(s.length!==1)continue;let a=s[0].getAddrs().filter(l=>!tu(l)).pop();if(a==null)continue;let c=ce(a);return c.port==null?!1:(this.observed.remove(e),this.ipMappings.add(c.host,c.port,t.host,t.port,t.protocol),!0)}return!1}};var mA;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(mA||(mA={}));var jp=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},Yp=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},Hc=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},fd=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},Xp=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},Qp=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},Zp=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},hd=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},Jp=class extends Error{constructor(e="No transport was configured to listen on this address"){super(e),this.name="UnsupportedListenAddressError"}},e0=class extends Error{constructor(e="Configured listen addresses could not be listened on"){super(e),this.name="UnsupportedListenAddressesError"}},t0=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},r0=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},n0=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},Vi=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},ca=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},o0=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}},i0=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}};var $8=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=mc())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>Sf(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")}},YM=["metrics","connectionProtector","dns"],XM=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function gA(r={}){let e=new $8(r);return new Proxy(e,{get(n,o,i){if(typeof o=="string"&&!XM.includes(o)){let s=e.components[o];if(s==null&&!YM.includes(o))throw new jp(`${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 yA(r){let e={};for(let t of Object.values(r.components))for(let n of QM(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of ZM(t))if(e[n]!==!0)throw new Yp(`Service "${JM(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function QM(r){return Array.isArray(r?.[Te])?r[Te]:[]}function ZM(r){return Array.isArray(r?.[Ir])?r[Ir]:[]}function JM(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}function wA(r={}){return r.denyDialMultiaddr==null&&(r.denyDialMultiaddr=e=>Wo.matches(e)?!0:ut(e)),r}function s0(r){if(At(r))return{peerId:r,multiaddrs:[]};let e=Array.isArray(r)?r:[r],t;if(e.length>0){let n=e[0].getComponents().findLast(o=>o.code===421)?.value;t=n==null?void 0:Xe(n),e.forEach(o=>{if(!eo(o))throw new qn("Invalid multiaddr");let i=o.getComponents().findLast(s=>s.code===421)?.value;if(i==null){if(t!=null)throw new _("Multiaddrs must all have the same peer id or have no peer id")}else{let s=Xe(i);if(t?.equals(s)!==!0)throw new _("Multiaddrs must all have the same peer id or have no peer id")}})}return e=e.filter(n=>!gS.exactMatch(n)),{peerId:t,multiaddrs:e}}var eU=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function bA(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??eU;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}function pd(r){let e=ce(r),t=e.cidr;if(e.type!=="ip4"&&e.type!=="ip6")throw new _(`Multiaddr ${r} was not an IPv4 or IPv6 address`);if(t==null)switch(e.type){case"ip4":{t=32;break}case"ip6":{t=128;break}default:throw new _(`Multiaddr ${r} was not an IPv4 or IPv6 address`)}return new Ns(e.host,t)}function V8(r){return!Ot.exactMatch(r)}function a0(r,e,t){if(r==null||e==null)return;let n=e.filter(i=>i.status==="open").sort((i,s)=>i.direct?-1:s.direct?1:0).find(i=>i.limits==null);if(n==null||n.direct||t==null)return n;if(!t.some(i=>V8(i)))return n}var c0=class{connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.allow=(t.allow??[]).map(n=>pd(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,n=this.connectionManager.getMaxConnections();if(this.log("checking max connections limit %d/%d",t,n),t<=n)return;let o=new er;for(let c of e){let l=c.remotePeer;if(!o.has(l)){o.set(l,0);try{let u=await this.peerStore.get(l);o.set(l,[...u.tags.values()].reduce((d,f)=>d+f.value,0))}catch(u){u.name!=="NotFoundError"&&this.log.error("error loading peer tags - %e",u)}}}let i=this.sortConnections(e,o),s=Math.max(t-n,0),a=[];for(let c of i)if(this.log("too many connections open - closing a connection to %p",c.remotePeer),this.allow.some(u=>{if(Ft(c.remoteAddr)){let d=ce(c.remoteAddr);return u.contains(d.host)}return!0})||a.push(c),a.length===s)break;await Promise.all(a.map(async c=>{await bA(c,{signal:AbortSignal.timeout(1e3)})})),this.events.safeDispatchEvent("connection:prune",{detail:a})}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 xA="last-dial-failure",EA="last-dial-success";var vA=100,l0=50;function tU(r,e){let t=ra.exactMatch(r.multiaddr),n=ra.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=na.exactMatch(r.multiaddr),i=na.exactMatch(e.multiaddr);if(o&&!i)return-1;if(!o&&i)return 1;let s=Wo.exactMatch(r.multiaddr),a=Wo.exactMatch(e.multiaddr);if(s&&!a)return-1;if(!s&&a)return 1;let c=Ju.exactMatch(r.multiaddr),l=Ju.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let u=Zu.exactMatch(r.multiaddr),d=Zu.exactMatch(e.multiaddr);if(u&&!d)return-1;if(!u&&d)return 1;let f=d8.exactMatch(r.multiaddr),h=d8.exactMatch(e.multiaddr);return f&&!h?-1:!f&&h?1:0}function rU(r,e){let t=tu(r.multiaddr),n=tu(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function nU(r,e){let t=ut(r.multiaddr),n=ut(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function oU(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function iU(r,e){let t=Ot.exactMatch(r.multiaddr),n=Ot.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function SA(r){return r.sort(tU).sort(oU).sort(iU).sort(nU).sort(rU)}var K8=class{dns;canResolve(e){return e.getComponents().some(({name:t})=>t==="dnsaddr")}async resolve(e,t){let n=e.getComponents().find(c=>c.name==="dnsaddr")?.value;if(n==null)return[e];let i=await this.getDNS(t).query(`_dnsaddr.${n}`,{signal:t?.signal,types:[kr.TXT]}),s=e.getComponents().find(c=>c.name==="p2p")?.value,a=[];for(let c of i.Answer){let l=c.data.replace(/["']/g,"").trim().split("=")[1];l!=null&&(s!=null&&!l.includes(s)||a.push(X(l)))}return a}getDNS(e){return e.dns!=null?e.dns:(this.dns==null&&(this.dns=Df()),this.dns)}},md=new K8;async function H8(r,e,t){let n=t.depth??0;if(n>(t.maxRecursiveDepth??32))throw new i0("Max recursive depth reached");let o=!1,i=[];for(let s of Object.values(e))if(s.canResolve(r)){o=!0;let a=await s.resolve(r,t);for(let c of a)i.push(...await H8(c,e,{...t,depth:n+1}))}return o===!1&&i.push(r),i}var gd={maxParallelDials:l0,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:1e4,resolvers:{dnsaddr:md}},u0=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;resolvers;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??gd.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??gd.maxDialQueueLength,this.dialTimeout=t.dialTimeout??gd.dialTimeout,this.connections=t.connections??new er,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.resolvers=t.resolvers??gd.resolvers,this.shutDownController=new AbortController,this.shutDownController.signal,this.queue=new Gh({concurrency:t.maxParallelDials??gd.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("failure",n=>{n.detail?.error.name!==sr.name&&this.log.error("error in dial queue - %e",n.detail.error)})}start(){this.shutDownController=new AbortController,this.shutDownController.signal}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=s0(e);if(n!=null&&t.force!==!0){let s=a0(n,this.connections.get(n),o);if(s!=null)return this.log("already connected to %a",s.remoteAddr),t.onProgress?.(new O("dial-queue:already-connected",s)),s}let i=this.queue.queue.find(s=>{if(n?.equals(s.options.peerId)===!0)return!0;let a=s.options.multiaddrs;if(a==null)return!1;for(let c of o)if(a.has(c.toString()))return!0;return!1});if(i!=null){this.log("joining existing dial target for %p",n);for(let s of o)i.options.multiaddrs.add(s.toString());return t.onProgress?.(new O("dial-queue:already-in-dial-queue")),i.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new ci("Dial queue is full");return this.log("creating dial target for %p",n,o.map(s=>s.toString())),t.onProgress?.(new O("dial-queue:add-to-dial-queue")),this.queue.add(async s=>{s.onProgress?.(new O("dial-queue:start-dial"));let a=we([this.shutDownController.signal,s.signal]);try{return await this.dialPeer(s,a)}finally{a.clear()}},{peerId:n,priority:t.priority??G8,multiaddrs:new Set(o.map(s=>s.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 f=await this.calculateMultiaddrs(n,d,{...e,signal:t});for(let h of f){if(i.has(h.multiaddr.toString())){this.log.trace("skipping previously failed multiaddr %a while dialing %p",h.multiaddr,n);continue}u.push(h)}this.log("%s dial to %p with %s",c===1?"starting":"continuing",n,u.map(h=>h.multiaddr.toString())),e?.onProgress?.(new O("dial-queue:calculated-addresses",u));for(let h of u){if(a===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",a,e.peerId),new ci("Peer had more than maxPeerAddrsToDial");a++;try{let p=await this.components.transportManager.dial(h.multiaddr,{...e,signal:t});this.log("dial to %a succeeded",h.multiaddr);try{await this.components.peerStore.merge(p.remotePeer,{multiaddrs:[p.remoteAddr],metadata:{[EA]:C(Date.now().toString())}})}catch(y){this.log.error("could not update last dial failure key for %p - %e",n,y)}return p}catch(p){if(this.log.error("dial failed to %a - %e",h.multiaddr,p),i.add(h.multiaddr.toString()),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[xA]:C(Date.now().toString())}})}catch(y){this.log.error("could not update last dial failure key for %p - %e",n,y)}if(t.aborted)throw new zn(p.message);l.push(p)}}}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:X(d),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new ci("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new hd("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("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 f=await H8(d.multiaddr,this.resolvers,{dns:this.components.dns,log:this.log,...n});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.getComponents().pop()?.name!=="p2p"?{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.getComponents().findLast(h=>h.code===421)?.value;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 t0("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?SA(l):l.sort(this.addressSorter);if(u.length===0)throw new hd("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=>!Ot.matches(o.multiaddr))!=null:!0}catch{}return!1}};var sU=Object.prototype.toString,aU=r=>sU.call(r)==="[object Error]",cU=new Set(["network error","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Network request failed","fetch failed","terminated"," A network error occurred.","Network connection lost"]);function j8(r){if(!(r&&aU(r)&&r.name==="TypeError"&&typeof r.message=="string"))return!1;let{message:t,stack:n}=r;return t==="Load failed"?n===void 0||"__sentry_captured__"in r:t.startsWith("error sending request for url")||t==="Failed to fetch"||t.startsWith("Failed to fetch (")&&t.endsWith(")")?!0:cU.has(t)}function lU(r){if(typeof r=="number"){if(r<0)throw new TypeError("Expected `retries` to be a non-negative number.");if(Number.isNaN(r))throw new TypeError("Expected `retries` to be a valid number or Infinity, got NaN.")}else if(r!==void 0)throw new TypeError("Expected `retries` to be a number or Infinity.")}function d0(r,e,{min:t=0,allowInfinity:n=!1}={}){if(e!==void 0){if(typeof e!="number"||Number.isNaN(e))throw new TypeError(`Expected \`${r}\` to be a number${n?" or Infinity":""}.`);if(!n&&!Number.isFinite(e))throw new TypeError(`Expected \`${r}\` to be a finite number.`);if(e<t)throw new TypeError(`Expected \`${r}\` to be \u2265 ${t}.`)}}var Y8=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}};function uU(r,e){let t=Math.max(1,r+1),n=e.randomize?Math.random()+1:1,o=Math.round(n*e.minTimeout*e.factor**(t-1));return o=Math.min(o,e.maxTimeout),o}function AA(r,e){return Number.isFinite(e)?e-(performance.now()-r):e}async function dU({error:r,attemptNumber:e,retriesConsumed:t,startTime:n,options:o}){let i=r instanceof Error?r:new TypeError(`Non-error was thrown: "${r}". You should only throw errors.`);if(i instanceof Y8)throw i.originalError;let s=Number.isFinite(o.retries)?Math.max(0,o.retries-t):o.retries,a=o.maxRetryTime??Number.POSITIVE_INFINITY,c=Object.freeze({error:i,attemptNumber:e,retriesLeft:s,retriesConsumed:t});if(await o.onFailedAttempt(c),AA(n,a)<=0)throw i;let l=await o.shouldConsumeRetry(c),u=AA(n,a);if(u<=0||s<=0)throw i;if(i instanceof TypeError&&!j8(i)){if(l)throw i;return o.signal?.throwIfAborted(),!1}if(!await o.shouldRetry(c))throw i;if(!l)return o.signal?.throwIfAborted(),!1;let d=uU(t,o),f=Math.min(d,u);return o.signal?.throwIfAborted(),f>0&&await new Promise((h,p)=>{let y=()=>{clearTimeout(g),o.signal?.removeEventListener("abort",y),p(o.signal.reason)},g=setTimeout(()=>{o.signal?.removeEventListener("abort",y),h()},f);o.unref&&g.unref?.(),o.signal?.addEventListener("abort",y,{once:!0})}),o.signal?.throwIfAborted(),!0}async function X8(r,e={}){if(e={...e},lU(e.retries),Object.hasOwn(e,"forever"))throw new Error("The `forever` option is no longer supported. For many use-cases, you can set `retries: Infinity` instead.");e.retries??=10,e.factor??=2,e.minTimeout??=1e3,e.maxTimeout??=Number.POSITIVE_INFINITY,e.maxRetryTime??=Number.POSITIVE_INFINITY,e.randomize??=!1,e.onFailedAttempt??=()=>{},e.shouldRetry??=()=>!0,e.shouldConsumeRetry??=()=>!0,d0("factor",e.factor,{min:0,allowInfinity:!1}),d0("minTimeout",e.minTimeout,{min:0,allowInfinity:!1}),d0("maxTimeout",e.maxTimeout,{min:0,allowInfinity:!0}),d0("maxRetryTime",e.maxRetryTime,{min:0,allowInfinity:!0}),e.factor>0||(e.factor=1),e.signal?.throwIfAborted();let t=0,n=0,o=performance.now();for(;!Number.isFinite(e.retries)||n<=e.retries;){t++;try{e.signal?.throwIfAborted();let i=await r(t);return e.signal?.throwIfAborted(),i}catch(i){await dU({error:i,attemptNumber:t,retriesConsumed:n,startTime:o,options:e})&&n++}}throw new Error("Retry attempts exhausted without throwing an error.")}var f0=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 Ht({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);TA(t)&&(this.queue.has(e)||this.queue.add(async n=>{await X8(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(ls)&&(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=>TA(t)]});await Promise.all(e.map(async t=>{await this.connectionManager.openConnection(t.id).catch(n=>{this.log.error("could not open connection to keepalive peer - %e",n)})}))}).catch(e=>{this.log.error("error reconnect to peers after start - %e",e)})}stop(){this.started=!1,this.queue.abort()}};function TA(r){for(let e of r.tags.keys())if(e.startsWith(ls))return!0;return!1}var G8=50,Q8={maxConnections:vA,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},h0=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??Q8.maxConnections,this.maxConnections<1)throw new _("Connection Manager maxConnections must be greater than 0");this.connections=new er,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=>pd(X(n))),this.deny=(t.deny??[]).map(n=>pd(X(n))),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??Q8.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new gc({points:t.inboundConnectionThreshold??Q8.inboundConnectionThreshold,duration:1}),this.connectionPruner=new c0({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{allow:t.allow?.map(n=>X(n))}),this.dialQueue=new u0(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??l0,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??1e4,resolvers:t.resolvers??{dnsaddr:md},connections:this.connections}),this.reconnectQueue=new f0({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 Et(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 Tt(this.reconnectQueue,this.dialQueue,this.connectionPruner);let e=[];for(let t of this.connections.values())for(let n of t)e.push(Promise.all([Le(n,"close",{signal:AbortSignal.timeout(500)}),n.close({signal:AbortSignal.timeout(500)})]).catch(o=>{n.abort(o)}));this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}getMaxConnections(){return this.maxConnections}setMaxConnections(e){if(e<1)throw new _("Connection Manager maxConnections must be greater than 0");let t=!1;e<this.maxConnections&&(t=!0),this.maxConnections=e,t&&this.connectionPruner.maybePruneConnections()}onConnect(e){this._onConnect(e).catch(t=>{this.log.error("could not connect - %e",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.trace("peer %p disconnected, removing connection map entry",n),this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:n}))}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 gn("Not started");this.outboundPendingConnections++;try{t.signal?.throwIfAborted(),t?.onProgress?.(new O("connection:open",e));let{peerId:n,multiaddrs:o}=s0(e);if(this.peerId.equals(n))throw new Aa("Can not dial self");if(n!=null&&t.force!==!0){this.log("dial %p",n);let c=a0(n,this.getConnections(n),o);if(c!=null)return this.log("had an existing connection to %p as %a",n,c.remoteAddr),t.onProgress?.(new O("dial-queue:already-connected")),t.onProgress?.(new O("connection:opened",c)),c}let i=await this.dialQueue.dial(e,{...t,priority:t.priority??G8});if(i.status!=="open")throw new is("Remote closed connection during opening");let s=this.connections.get(i.remotePeer);s==null&&(s=[],this.connections.set(i.remotePeer,s));let a=!1;for(let c of s)if(c.id===i.id&&(a=!0),t.force!==!0&&c.id!==i.id&&c.remoteAddr.equals(i.remoteAddr))return i.abort(new qn("Duplicate multiaddr connection")),c;return a||s.push(i),t.onProgress?.(new O("connection:opened",i)),i}finally{this.outboundPendingConnections--}}async openStream(e,t,n={}){return(await this.openConnection(e,n)).newStream(t,n)}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await Promise.all([Le(o,"close",t),o.close(t)])}catch(i){o.abort(i)}}))}acceptIncomingConnection(e){if(this.deny.some(o=>{if(Ft(e.remoteAddr)){let i=ce(e.remoteAddr);return o.contains(i.host)}return!1}))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>{if(Ft(e.remoteAddr)){let i=ce(e.remoteAddr);return o.contains(i.host)}return!0}))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(Ft(e.remoteAddr)){let o=ce(e.remoteAddr);try{this.inboundConnectionRateLimiter.consume(o.host,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o.host),!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=>X(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var pU=1e4,mU="1.0.0",gU="ping",yU="ipfs",_A=32,wU=!0,p0=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??yU}/${gU}/${mU}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??pU,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??wU,this.timeout=new Tn({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[Te]=["@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(),n=this.timeout.getTimeoutSignal({signal:this.abortController?.signal});try{let o=await e.newStream(this.protocol,{signal:n,runOnLimitedConnection:!0}),i=Sh(o);t=Date.now(),await Promise.all([i.write(dr(_A),{signal:n}),i.read({bytes:_A,signal:n})]),e.rtt=Date.now()-t,await o.close({signal:n})}catch(o){if(o.name!=="UnsupportedProtocolError")throw o;e.rtt=(Date.now()-t)/2}finally{this.timeout.cleanUp(n)}}).catch(t=>{this.log.error("error during heartbeat - %e",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 m0=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:N(n,"base36")})})??this.put,this.get=e.metrics?.traceFunction("libp2p.contentRouting.get",this.get.bind(this),{optionsIndex:1,getAttributesFromArgs:([n])=>({key:N(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 Hc("No content routers available");let n=this,o=new Gr;for await(let i of fr(...n.routers.filter(s=>s.findProviders instanceof Function).map(s=>s.findProviders(e,t))))i!=null&&(i.multiaddrs.length>0&&await this.components.peerStore.merge(i.id,{multiaddrs:i.multiaddrs},t),!o.has(i.id)&&(o.add(i.id),yield i))}async provide(e,t={}){if(this.routers.length===0)throw new Hc("No content routers available");await Promise.all(this.routers.filter(n=>n.provide instanceof Function).map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){if(this.routers.length===0)throw new Hc("No content routers available");await Promise.all(this.routers.filter(n=>n.cancelReprovide instanceof Function).map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new gn;await Promise.all(this.routers.filter(o=>o.put instanceof Function).map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new gn;return Promise.any(this.routers.filter(n=>n.get instanceof Function).map(async n=>n.get(e,t)))}};var g0=globalThis.CustomEvent??Event;async function*Xo(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered??!1,o=new EventTarget,i=[],s=Se(),a=Se(),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=Se(),await s.promise),u)break;let y={done:!1};i.push(y),p().then(g=>{y.done=!0,y.ok=!0,y.value=g,o.dispatchEvent(new g0("task-complete"))},g=>{y.done=!0,y.err=g,o.dispatchEvent(new g0("task-complete"))})}c=!0,o.dispatchEvent(new g0("task-complete"))}catch(p){l=p,o.dispatchEvent(new g0("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 y=i[p];if(i.splice(p,1),p--,y.ok)yield y.value;else throw u=!0,s.resolve(),y.err;s.resolve()}}for(;;){if(d()||(a=Se(),await a.promise),l!=null||(n?yield*f():yield*h(),l!=null))throw l;if(c&&i.length===0)break}}var y0=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:N(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 fd("No peer routers available");if(e.toString()===this.peerId.toString())throw new Xp("Should not try to find self");let n=this,o=fr(...this.routers.filter(i=>i.findPeer instanceof Function).map(i=>(async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error("router failed to find peer - %e",s)}})()));for await(let i of o)if(i!=null)return i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs},t),i;throw new We}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new fd("No peer routers available");let n=this,o=Ut(1024);for await(let i of Xo((async function*(){let s=fr(...n.routers.filter(a=>a.getClosestPeers instanceof Function).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 - %e",c);return}return a}})()))i!=null&&(i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs},t),!o.has(i.id.toMultihash().bytes)&&(o.add(i.id.toMultihash().bytes),yield i))}};var w0=class extends ue{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=we([this.shutdownController.signal,e?.signal]);try{for(;;)this.needNext?.resolve(),this.needNext=Se(),yield(await Le(this,"walk:peer",{signal:t,rejectionEvents:["walk:error"]})).detail}catch(n){throw n.detail!=null?n.detail:n}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=we([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=dr(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 qe(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 - %e",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("random walk errored - %e",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var Z8=32,J8=64,b0=class{log;topologies;handlers;components;middleware;constructor(e){this.components=e,this.log=e.logger.forComponent("libp2p:registrar"),this.middleware=new Map,this.topologies=new Map,e.metrics?.registerMetricGroup("libp2p_registrar_topologies",{calculate:()=>{let t={};for(let[n,o]of this.topologies)t[n]=o.size;return t}}),this.handlers=wt({name:"libp2p_registrar_protocol_handlers",metrics:e.metrics}),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 Qp(`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 Zp(`Handler already registered for protocol ${e}`);this.handlers.set(e,{handler:t,options:{maxInboundStreams:Z8,maxOutboundStreams:J8,...n}}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]},n)}async unhandle(e,t){(Array.isArray(e)?e:[e]).forEach(o=>{this.handlers.delete(o)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()},t)}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))}use(e,t){this.middleware.set(e,t)}unuse(e){this.middleware.delete(e)}getMiddleware(e){return this.middleware.get(e)??[]}async _onDisconnect(e){let t=e.detail,n={signal:AbortSignal.timeout(5e3)};try{let o=await this.components.peerStore.get(t,n);for(let i of o.protocols){let s=this.topologies.get(i);s!=null&&await Promise.all([...s.values()].map(async a=>{a.filter!=null&&a.filter.has(t)!==!0||(a.filter?.remove(t),await a.onDisconnect?.(t))}))}}catch(o){if(o.name==="NotFoundError")return;this.log.error("could not inform topologies of disconnecting peer %p - %e",t,o)}}async _onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(i=>!t.protocols.includes(i));try{for(let i of o){let s=this.topologies.get(i);s!=null&&await Promise.all([...s.values()].map(async a=>{a.filter!=null&&a.filter.has(t.id)!==!0||(a.filter?.remove(t.id),await a.onDisconnect?.(t.id))}))}}catch(i){this.log.error("could not inform topologies of updated peer %p - %e",t.id,i)}}async _onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;try{for(let i of t){let s=this.topologies.get(i);s!=null&&await Promise.all([...s.values()].map(async a=>{n.limits!=null&&a.notifyOnLimitedConnection!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),await a.onConnect?.(o,n))}))}}catch(i){this.log.error("could not inform topologies of updated peer after identify %p - %e",o,i)}}};var x0=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=wt({name:"libp2p_transport_manager_transports",metrics:this.components.metrics}),this.listeners=wt({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??ml.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 o0(`No transport available for address ${String(e)}`);return t?.onProgress?.(new O("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 gn("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 Jp)});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(f=>f===l);u.splice(d,1),this.components.events.safeDispatchEvent("transport:close",{detail:l})}),a8.matches(c)?t.ipv4.attempts++:c8.matches(c)&&t.ipv6.attempts++,n.push(l.listen(c).then(()=>{t.errors.delete(c.toString()),a8.matches(c)&&t.ipv4.success++,c8.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===ml.NO_FATAL){this.log("failed to listen on any address but fault tolerance allows this");return}throw new e0(`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:
33
+ ${[...t.errors.entries()].map(([i,s])=>`
34
+ ${i}: ${`${bU(s)}`.split(`
35
35
  `).join(`
36
36
  `)}
37
- `).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)}};function XR(r){return r.stack!=null&&r.stack.trim()!==""?r.stack:r.message!=null?r.message:r.toString()}var vn="/multistream/1.0.0";var QR=C(`
38
- `);async function Rl(r,e){let n=(await r.read(e)).subarray();if(n.byteLength===0||n[n.length-1]!==QR[0])throw new de("Missing newline");return P(n).trimEnd()}async function ba(r,e,t={}){if(e=Array.isArray(e)?[...e]:[e],e.length===0)throw new Error("At least one protocol must be specified");let n=r.log.newScope("mss:select"),o=Mo(r,{...t,maxDataLength:1024});for(let s=0;s<e.length;s++){let i=e[s],a;if(s===0){n.trace('write ["%s", "%s"]',vn,i);let c=C(`${vn}
39
- `),l=C(`${i}
40
- `);if(await o.writeV([c,l],t),n.trace("reading multistream-select header"),a=await Rl(o,t),n.trace('read "%s"',a),a!==vn){n.error("did not read multistream-select header from response");break}}else n.trace('write "%s"',i),await o.write(C(`${i}
41
- `),t);if(n.trace("reading protocol response"),a=await Rl(o,t),n.trace('read "%s"',a),a===i)return n.trace('selected "%s" after negotiation',a),o.unwrap(),i}throw new fi(`Protocol selection failed - could not negotiate ${e}`)}async function Ea(r,e,t={}){e=Array.isArray(e)?e:[e];let n=r.log.newScope("mss:handle"),o=Mo(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){n.trace("reading incoming string");let s=await Rl(o,t);if(n.trace('read "%s"',s),s===vn){n.trace('respond with "%s" for "%s"',vn,s),await o.write(C(`${vn}
42
- `),t),n.trace('responded with "%s" for "%s"',vn,s);continue}if(e.includes(s))return n.trace('respond with "%s" for "%s"',s,s),await o.write(C(`${s}
43
- `),t),n.trace('responded with "%s" for "%s"',s,s),o.unwrap(),s;if(s==="ls"){let i=new Q(...e.map(a=>Qn.single(C(`${a}
37
+ `).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)}};function bU(r){return r.stack!=null&&r.stack.trim()!==""?r.stack:r.message!=null?r.message:r.toString()}var co="/multistream/1.0.0";var xU=C(`
38
+ `);async function yd(r,e){let n=(await r.read(e)).subarray();if(n.byteLength===0||n[n.length-1]!==xU[0])throw new ve("Missing newline");return N(n).trimEnd()}async function qc(r,e,t={}){if(e=Array.isArray(e)?[...e]:[e],e.length===0)throw new Error("At least one protocol must be specified");let n=r.log.newScope("mss:select"),o=Ii(r,{...t,maxDataLength:1024});for(let i=0;i<e.length;i++){let s=e[i],a;if(i===0){n.trace('write ["%s", "%s"]',co,s);let c=C(`${co}
39
+ `),l=C(`${s}
40
+ `);if(await o.writeV([c,l],t),n.trace("reading multistream-select header"),a=await yd(o,t),n.trace('read "%s"',a),a!==co){n.error("did not read multistream-select header from response");break}}else n.trace('write "%s"',s),await o.write(C(`${s}
41
+ `),t);if(n.trace("reading protocol response"),a=await yd(o,t),n.trace('read "%s"',a),a===s)return n.trace('selected "%s" after negotiation',a),o.unwrap(),s}throw new Ta(`Protocol selection failed - could not negotiate ${e}`)}async function zc(r,e,t={}){e=Array.isArray(e)?e:[e];let n=r.log.newScope("mss:handle"),o=Ii(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){n.trace("reading incoming string");let i=await yd(o,t);if(n.trace('read "%s"',i),i===co){n.trace('respond with "%s" for "%s"',co,i),await o.write(C(`${co}
42
+ `),t),n.trace('responded with "%s" for "%s"',co,i);continue}if(e.includes(i))return n.trace('respond with "%s" for "%s"',i,i),await o.write(C(`${i}
43
+ `),t),n.trace('responded with "%s" for "%s"',i,i),o.unwrap(),i;if(i==="ls"){let s=new ne(...e.map(a=>Uo.single(C(`${a}
44
44
  `))),C(`
45
- `));n.trace('respond with "%s" for %s',e,s),await o.write(i,t),n.trace('responded with "%s" for %s',e,s);continue}n.trace('respond with "na" for "%s"',s),await o.write(C(`na
46
- `),t),n('responded with "na" for "%s"',s)}}var Wg=class extends ie{id;remoteAddr;remotePeer;direction;timeline;direct;multiplexer;encryption;limits;log;maConn;muxer;components;outboundStreamProtocolNegotiationTimeout;inboundStreamProtocolNegotiationTimeout;closeTimeout;constructor(e,t){super(),this.components=e,this.id=t.id,this.remoteAddr=t.maConn.remoteAddr,this.remotePeer=t.remotePeer,this.direction=t.direction??"outbound",this.timeline=t.maConn.timeline,this.encryption=t.cryptoProtocol,this.limits=t.limits,this.maConn=t.maConn,this.log=t.maConn.log,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.closeTimeout=t.closeTimeout??1e3,this.direct=Pg(t.maConn.remoteAddr),this.onIncomingStream=this.onIncomingStream.bind(this),this.remoteAddr.getComponents().find(n=>n.code===421)==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),t.muxer!=null&&(this.multiplexer=t.muxer.protocol,this.muxer=t.muxer,this.muxer.addEventListener("stream",this.onIncomingStream)),this.maConn.addEventListener("close",n=>{this.dispatchEvent(new bo(n.local,n.error))})}[Symbol.toStringTag]="Connection";[S6]=!0;get streams(){return this.muxer?.streams??[]}get status(){return this.maConn.status}newStream=async(e,t={})=>{if(this.muxer==null)throw new qo("Connection is not multiplexed");if(this.muxer.status!=="open")throw new os(`The connection muxer is "${this.muxer.status}" and not "open"`);if(this.maConn.status!=="open")throw new os(`The connection is "${this.status}" and not "open"`);if(this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new Ga("Cannot open protocol stream on limited connection");Array.isArray(e)||(e=[e]),this.log.trace("starting new stream for protocols %s",e);let n=await this.muxer.createStream({...t,protocol:e.length===1?e[0]:void 0});this.log.trace("started new stream %s for protocols %s",n.id,e);try{if(t.signal==null){n.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",e);let a=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);t={...t,signal:a}}n.protocol===""?(n.log.trace("selecting protocol from protocols %s",e),n.protocol=await ba(n,e,t),n.log("negotiated protocol %s",n.protocol)):n.log("pre-negotiated protocol %s",n.protocol);let o=JR(n.protocol,this.components.registrar,t),s=$w(n.protocol,"outbound",this);if(s>o){let a=new hi(`Too many outbound protocol streams for protocol "${n.protocol}" - ${s}/${o}`);throw n.abort(a),a}await this.components.peerStore.merge(this.remotePeer,{protocols:[n.protocol]}),this.components.metrics?.trackProtocolStream(n);let i=this.components.registrar.getMiddleware(n.protocol);return await this.runMiddlewareChain(n,this,i)}catch(o){throw n.status==="open"?n.abort(o):this.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",this.direction==="inbound"?"from":"to",this.remoteAddr,e,o),o}};async onIncomingStream(e){let t=e.detail,n=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);t.log("start protocol negotiation, timing out after %dms",this.inboundStreamProtocolNegotiationTimeout);try{if(t.protocol===""){let l=this.components.registrar.getProtocols();t.log.trace("selecting protocol from protocols %s",l),t.protocol=await Ea(t,l,{signal:n}),t.log("negotiated protocol %s",t.protocol)}else t.log("pre-negotiated protocol %s",t.protocol);let o=ZR(t.protocol,this.components.registrar);if($w(t.protocol,"inbound",this)>o)throw new Su(`Too many inbound protocol streams for protocol "${t.protocol}" - limit ${o}`);await this.components.peerStore.merge(this.remotePeer,{protocols:[t.protocol]},{signal:n}),this.components.metrics?.trackProtocolStream(t);let{handler:i,options:a}=this.components.registrar.getHandler(t.protocol);if(this.limits!=null&&a.runOnLimitedConnection!==!0)throw new Ga("Cannot open protocol stream on limited connection");let c=this.components.registrar.getMiddleware(t.protocol);c.push(async(l,d,u)=>{await i(l,d),u(l,d)}),await this.runMiddlewareChain(t,this,c)}catch(o){t.abort(o)}}async runMiddlewareChain(e,t,n){for(let o=0;o<n.length;o++){let s=n[o];e.log.trace("running middleware",o,s),await new Promise((i,a)=>{try{let c=s(e,t,(l,d)=>{e=l,t=d,i()});c instanceof Promise&&c.catch(a)}catch(c){a(c)}}),e.log.trace("ran middleware",o,s)}return e}async close(e={}){if(this.log("closing connection to %a",this.remoteAddr),e.signal==null){let t=AbortSignal.timeout(this.closeTimeout);e={...e,signal:t}}await this.muxer?.close(e),await this.maConn.close(e)}abort(e){this.muxer?.abort(e),this.maConn.abort(e)}};function Kw(r,e){return new Wg(r,e)}function ZR(r,e){try{let{options:t}=e.getHandler(r);if(t.maxInboundStreams!=null)return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return Vg}function JR(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??Hg}function $w(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var Jh=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;connectionCloseTimeout;constructor(e,t){this.components=e,this.connectionEncrypters=st({name:"libp2p_upgrader_connection_encrypters",metrics:this.components.metrics}),t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=st({name:"libp2p_upgrader_stream_multiplexers",metrics:this.components.metrics}),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.connectionCloseTimeout=t.connectionCloseTimeout??1e3,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"),inboundErrors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_inbound_errors_total"),outboundErrors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_outbound_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 Nh(`The multiaddr connection is blocked by gater.${e}`)}createInboundAbortSignal(e){let t=le([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=this.components.connectionManager.acceptIncomingConnection(e),!n)throw new Oh("Connection denied");await Pe(this.shouldBlockConnection("denyInboundConnection",e),o),await this._performUpgrade(e,"inbound",{...t,signal:o})}catch(s){throw this.metrics.errors?.increment({inbound:!0}),this.metrics.inboundErrors?.increment({[s.name??"Error"]:!0}),s}finally{o.clear(),n&&this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){try{this.metrics.dials?.increment({outbound:!0});let n=e.remoteAddr.getComponents().findLast(i=>i.code===421)?.value,o;n!=null&&(o=Me(n),await Pe(this.shouldBlockConnection("denyOutboundConnection",o,e),t.signal));let s="outbound";return t.initiator===!1&&(s="inbound"),await this._performUpgrade(e,s,t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),this.metrics.outboundErrors?.increment({[n.name??"Error"]:!0}),n}}async _performUpgrade(e,t,n){let o=e,s,i,a,c,l=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`;if(e.log=e.log.newScope(`${t}:${l}`),this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t),n?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(e.log("protecting the %s connection",t),o=await u.protect(o,n))}try{if(eP(n)){if(n.remotePeer==null)throw new cn(`${t} connection that skipped encryption must have a peer id`);c="native",s=n.remotePeer}else{let u=e.remoteAddr.getComponents().findLast(h=>h.code===421)?.value,f;u!=null&&(f=Me(u)),n?.onProgress?.(new H(`upgrader:encrypt-${t}-connection`)),{connection:o,remotePeer:s,protocol:c,streamMuxer:i}=await(t==="inbound"?this._encryptInbound(o,{...n,remotePeer:f}):this._encryptOutbound(o,{...n,remotePeer:f}))}if(s.equals(this.components.peerId)){let u=new di("Can not dial self");throw e.abort(u),u}await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",s,e),n?.muxerFactory!=null?i=n.muxerFactory:i==null&&this.streamMuxers.size>0&&(n?.onProgress?.(new H(`upgrader:multiplex-${t}-connection`)),i=await(t==="inbound"?this._multiplexInbound(o,this.streamMuxers,n):this._multiplexOutbound(o,this.streamMuxers,n)))}catch(u){throw e.log.error("failed to upgrade %s connection %s %a - %e",t,t==="inbound"?"from":"to",e.remoteAddr,u),u}i!=null&&(e.log("create muxer %s",i.protocol),a=i.createStreamMuxer(o)),await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",s,e);let d=this._createConnection({id:l,cryptoProtocol:c,direction:t,maConn:e,stream:o,muxer:a,remotePeer:s,limits:n?.limits,closeTimeout:this.connectionCloseTimeout});return d.log("successfully upgraded connection"),d}_createConnection(e){let t=Kw(this.components,{...e,outboundStreamProtocolNegotiationTimeout:this.outboundStreamProtocolNegotiationTimeout,inboundStreamProtocolNegotiationTimeout:this.inboundStreamProtocolNegotiationTimeout});return t.addEventListener("close",()=>{this.events.safeDispatchEvent("connection:close",{detail:t})}),this.events.safeDispatchEvent("connection:open",{detail:t}),t}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{let o=await Ea(e,n,t),s=this.connectionEncrypters.get(o);if(s==null)throw new Zs(`no crypto module found for ${o}`);return e.log("encrypting inbound connection using %s",o),{...await s.secureInbound(e,t),protocol:o}}catch(o){throw new Zs(o.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let o=await ba(e,n,t),s=this.connectionEncrypters.get(o);if(s==null)throw new Zs(`no crypto module found for ${o}`);return e.log("encrypting outbound connection using %s",o),{...await s.secureOutbound(e,t),protocol:o}}catch(o){throw new Zs(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 s=await ba(e,o,n),i=t.get(s);if(i==null)throw new qo(`No muxer configured for protocol "${s}"`);return e.log("selected %s as muxer protocol",s),i}catch(s){throw e.log.error("error multiplexing outbound connection - %e",s),new qo(String(s))}}async _multiplexInbound(e,t,n){let o=Array.from(t.keys());e.log("inbound handling muxers %s",o);try{e.log.trace("selecting stream muxer from %s",o);let s=await Ea(e,o,n),i=t.get(s);if(i==null)throw new qo(`No muxer configured for protocol "${s}"`);return e.log("selected %s as muxer protocol",s),i}catch(s){throw e.log.error("error multiplexing inbound connection - %e",s),s}}getConnectionEncrypters(){return this.connectionEncrypters}getStreamMuxers(){return this.streamMuxers}};function eP(r){return r.skipEncryption===!0}var e1="3.1.6",t1="js-libp2p";function r1(r,e){return`${r??t1}/${e??e1} browser/${globalThis.navigator.userAgent}`}var Pl=class extends ie{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new ie,n=t.dispatchEvent.bind(t);t.dispatchEvent=l=>{let d=n(l),u=this.dispatchEvent(new CustomEvent(l.type,{detail:l.detail}));return d||u},this.peerId=e.peerId,this.logger=e.logger??ea(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=e.nodeInfo?.name??t1,s=e.nodeInfo?.version??e1,i=this.components=_w({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:o,version:s,userAgent:e.nodeInfo?.userAgent??r1(o,s)},logger:this.logger,events:t,datastore:e.datastore??new js,connectionGater:kw(e.connectionGater),dns:e.dns});e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),this.peerStore=this.configureComponent("peerStore",vw(i,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),i.events.addEventListener("peer:update",l=>{if(l.detail.previous==null){let d={id:l.detail.peer.id,multiaddrs:l.detail.peer.addresses.map(u=>u.multiaddr)};i.events.safeDispatchEvent("peer:discovery",{detail:d})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(i)),this.components.upgrader=new Jh(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((l,d)=>this.configureComponent(`connection-encryption-${d}`,l(this.components))),streamMuxers:(e.streamMuxers??[]).map((l,d)=>this.configureComponent(`stream-muxers-${d}`,l(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout,inboundStreamProtocolNegotiationTimeout:e.connectionManager?.inboundStreamProtocolNegotiationTimeout,outboundStreamProtocolNegotiationTimeout:e.connectionManager?.outboundStreamProtocolNegotiationTimeout,connectionCloseTimeout:e.connectionManager?.connectionCloseTimeout}),this.configureComponent("transportManager",new Zh(this.components,e.transportManager)),this.configureComponent("connectionManager",new Wh(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new zh(this.components,e.connectionMonitor)),this.configureComponent("registrar",new jh(this.components)),this.configureComponent("addressManager",new Th(this.components,e.addresses));let a=(e.peerRouters??[]).map((l,d)=>this.configureComponent(`peer-router-${d}`,l(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new Xh(this.components,{routers:a}));let c=(e.contentRouters??[]).map((l,d)=>this.configureComponent(`content-router-${d}`,l(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new Gh(this.components,{routers:c})),this.configureComponent("randomWalk",new Qh(this.components)),(e.peerDiscovery??[]).forEach((l,d)=>{this.configureComponent(`peer-discovery-${d}`,l(this.components)).addEventListener("peer",f=>{this.#e(f)})}),e.transports?.forEach((l,d)=>{this.components.transportManager.add(this.configureComponent(`transport-${d}`,l(this.components)))}),e.services!=null)for(let l of Object.keys(e.services)){let d=e.services[l],u=d(this.components);if(u==null){this.log.error("service factory %s returned null or undefined instance",l);continue}this.services[l]=u,this.configureComponent(l,u),u[Ln]!=null&&(this.log("registering service %s for content routing",l),c.push(u[Ln])),u[Nn]!=null&&(this.log("registering service %s for peer routing",l),a.push(u[Nn])),u[as]!=null&&(this.log("registering service %s for peer discovery",l),u[as].addEventListener?.("peer",f=>{this.#e(f)}))}Cw(i)}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 with peer id %p",this.peerId)}catch(e){throw this.log.error("an error occurred starting libp2p - %e",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 xr;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 A("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new A("no protocols were provided to open a stream");return this.components.connectionManager.openStream(e,t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){gn(e)&&(e=Me(e.getComponents().findLast(n=>n.code===421)?.value??"")),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 i=await this.peerStore.get(e,t);if(i.id.publicKey!=null)return i.id.publicKey}catch(i){if(i.name!=="NotFoundError")throw i}let n=Be([C("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),s=rt(o);return await this.peerStore.patch(e,{publicKey:s},t),s}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,t){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async n=>{await this.components.registrar.unhandle(n,t)}))}async register(e,t,n){return this.components.registrar.register(e,t,n)}unregister(e){this.components.registrar.unregister(e)}use(e,t){this.components.registrar.use(e,Array.isArray(t)?t:[t])}unuse(e){this.components.registrar.unuse(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("could not update multiaddrs of discovered peer - %e",n)})}};async function Hw(r={}){r.privateKey??=await rd("Ed25519");let e=new Pl({...await aw(r),peerId:w9(r.privateKey)});return r.start!==!1&&await e.start(),e}var tP=["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"];function qw(r){return r==null?!1:r instanceof Pl?!0:tP.every(e=>typeof r[e]=="function")}var Hb=Pn(Jw(),1);var zg={keyLength:64,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"};var xa={};tt(xa,{create:()=>pP,derivedEmptyPasswordKey:()=>n1});var n1={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function pP(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,o=r?.digest??"SHA-256",s=r?.saltLength??16,i=r?.iterations??32767,a=ot.get();t*=8;async function c(u,f){let h=a.getRandomValues(new Uint8Array(s)),p=a.getRandomValues(new Uint8Array(n)),g={name:e,iv:p};typeof f=="string"&&(f=C(f));let m;if(f.length===0){m=await a.subtle.importKey("jwk",n1,{name:"AES-GCM"},!0,["encrypt"]);try{let I={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},T=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(I,T,{name:e,length:t},!0,["encrypt"])}catch{m=await a.subtle.importKey("jwk",n1,{name:"AES-GCM"},!0,["encrypt"])}}else{let I={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},T=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(I,T,{name:e,length:t},!0,["encrypt"])}let w=await a.subtle.encrypt(g,m,u);return Be([h,g.iv,new Uint8Array(w)])}async function l(u,f){let h=u.subarray(0,s),p=u.subarray(s,s+n),g=u.subarray(s+n),m={name:e,iv:p};typeof f=="string"&&(f=C(f));let w;if(f.length===0)try{let T={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},D=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(T,D,{name:e,length:t},!0,["decrypt"])}catch{w=await a.subtle.importKey("jwk",n1,{name:"AES-GCM"},!0,["decrypt"])}else{let T={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},D=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(T,D,{name:e,length:t},!0,["decrypt"])}let I=await a.subtle.decrypt(m,w,g);return new Uint8Array(I)}return{encrypt:c,decrypt:l}}var ye=Pn(eb());function Js(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 Wo(r,e,t=-1){let n=t,o=r,s=0,i=Math.pow(2,e);for(let a=1;a<8;a++){if(r<i){let c;if(n<0)c=new ArrayBuffer(a),s=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),s=n}let l=new Uint8Array(c);for(let d=a-1;d>=0;d--){let u=Math.pow(2,d*e);l[s-d-1]=Math.floor(o/u),o-=l[s-d-1]*u}return c}i*=Math.pow(2,e)}return new ArrayBuffer(0)}function i1(...r){let e=0,t=0;for(let s of r)e+=s.length;let n=new ArrayBuffer(e),o=new Uint8Array(n);for(let s of r)o.set(s,t),t+=s.length;return o}function Yg(){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=Js(t,8),o=new ArrayBuffer(this.valueHex.byteLength),s=new Uint8Array(o);for(let a=0;a<this.valueHex.byteLength;a++)s[a]=r[a];return s[0]&=127,Js(s,8)-n}function tb(r){let e=r<0?r*-1:r,t=128;for(let n=1;n<8;n++){if(e<=t){if(r<0){let i=t-e,a=Wo(i,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=Wo(e,8,n),s=new Uint8Array(o);if(s[0]&128){let i=o.slice(0),a=new Uint8Array(i);o=new ArrayBuffer(o.byteLength+1),s=new Uint8Array(o);for(let c=0;c<i.byteLength;c++)s[c+1]=a[c];s[0]=0}return o}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function rb(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 sr(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,o=new Array(n);for(let i=0;i<n;i++)o[i]="0";return o.join("").concat(t)}var lse=Math.log(2);function a1(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function Xg(r){let e=0,t=0;for(let o=0;o<r.length;o++){let s=r[o];e+=s.byteLength}let n=new Uint8Array(e);for(let o=0;o<r.length;o++){let s=r[o];n.set(new Uint8Array(s),t),t+=s.byteLength}return n.buffer}function fo(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 Nl=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return Xg(this.items)}},Ll=[new Uint8Array([1])],nb="0123456789";var Sa="",Tn=new ArrayBuffer(0),Qg=new Uint8Array(0),Ol="EndOfContent",sb="OCTET STRING",ib="BIT STRING";function ho(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 s=n[0]||{};this.isHexOnly=(o=s.isHexOnly)!==null&&o!==void 0?o:!1,this.valueHexView=s.valueHex?ye.BufferSourceConverter.toUint8Array(s.valueHex):Qg}fromBER(n,o,s){let i=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!fo(this,i,o,s))return-1;let a=o+s;return this.valueHexView=i.subarray(o,a),this.valueHexView.length?(this.blockLength=s,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",Tn)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:ye.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var ao=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=Sa,warnings:n=[],valueBeforeDecode:o=Qg}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=ye.BufferSourceConverter.toUint8Array(o)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:ye.Convert.ToHex(this.valueBeforeDecodeView)}}};ao.NAME="baseBlock";var Kt=class extends ao{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'")}};Kt.NAME="valueBlock";var c1=class extends ho(ao){constructor({idBlock:e={}}={}){var t,n,o,s;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?ye.BufferSourceConverter.toUint8Array(e.valueHex):Qg,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(o=e.tagNumber)!==null&&o!==void 0?o:-1,this.isConstructed=(s=e.isConstructed)!==null&&s!==void 0?s:!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",Tn}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let o=new Uint8Array(1);if(!e){let s=this.tagNumber;s&=31,t|=s,o[0]=t}return o.buffer}if(!this.isHexOnly){let o=Wo(this.tagNumber,7),s=new Uint8Array(o),i=o.byteLength,a=new Uint8Array(i+1);if(a[0]=t|31,!e){for(let c=0;c<i-1;c++)a[c+1]=s[c]|128;a[i]=s[i-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let o=this.valueHexView;for(let s=0;s<o.length-1;s++)n[s+1]=o[s]|128;n[this.valueHexView.byteLength]=o[o.length-1]}return n.buffer}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!fo(this,o,t,n))return-1;let s=o.subarray(t,t+n);if(s.length===0)return this.error="Zero buffer length",-1;switch(s[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=(s[0]&32)===32,this.isHexOnly=!1;let a=s[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),d=255;for(;s[c]&128;){if(l[c-1]=s[c]&127,c++,c>=s.length)return this.error="End of input reached before message was fully decoded",-1;if(c===d){d+=255;let f=new Uint8Array(d);for(let h=0;h<l.length;h++)f[h]=l[h];l=this.valueHexView=new Uint8Array(d)}}this.blockLength=c+1,l[c-1]=s[c]&127;let u=new Uint8Array(c);for(let f=0;f<c;f++)u[f]=l[f];l=this.valueHexView=new Uint8Array(c),l.set(u),this.blockLength<=9?this.tagNumber=Js(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}}};c1.NAME="identificationBlock";var l1=class extends ao{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(!fo(this,o,t,n))return-1;let s=o.subarray(t,t+n);if(s.length===0)return this.error="Zero buffer length",-1;if(s[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=s[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(s[0]&128),this.longFormUsed===!1)return this.length=s[0],this.blockLength=1,t+this.blockLength;let i=s[0]&127;if(i>8)return this.error="Too big integer",-1;if(i+1>s.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=o.subarray(a,a+i);return c[i-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=Js(c,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=i+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=Wo(this.length,8);if(o.byteLength>127)return this.error="Too big length",Tn;if(t=new ArrayBuffer(o.byteLength+1),e)return t;let s=new Uint8Array(o);n=new Uint8Array(t),n[0]=o.byteLength|128;for(let i=0;i<o.byteLength;i++)n[i+1]=s[i];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}}};l1.NAME="lengthBlock";var j={},_t=class extends ao{constructor({name:e=Sa,optional:t=!1,primitiveSchema:n,...o}={},s){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new c1(o),this.lenBlock=new l1(o),this.valueBlock=s?new s(o):new Kt(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 Nl;t||ab(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 s=this.valueBlock.toBER(e);this.lenBlock.length=s.byteLength;let i=this.lenBlock.toBER(e);n.write(i),n.write(s)}return t?Tn: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(){let e=this.constructor.NAME,t=ye.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 rb(t,n)}};_t.NAME="BaseBlock";function ab(r){var e;if(r instanceof j.Constructed)for(let t of r.valueBlock.value)ab(t)&&(r.lenBlock.isIndefiniteForm=!0);return!!(!((e=r.lenBlock)===null||e===void 0)&&e.isIndefiniteForm)}var u1=class extends _t{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor({value:e=Sa,...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}'`}};u1.NAME="BaseStringBlock";var d1=class extends ho(Kt){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};d1.NAME="PrimitiveValueBlock";var cb,f1=class extends _t{constructor(e={}){super(e,d1),this.idBlock.isConstructed=!1}};cb=f1;j.Primitive=cb;f1.NAME="PRIMITIVE";function SP(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 z1(r,e=0,t=r.length){let n=e,o=new _t({},Kt),s=new ao;if(!fo(s,r,e,t))return o.error=s.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=_t;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=j.EndOfContent;break;case 1:c=j.Boolean;break;case 2:c=j.Integer;break;case 3:c=j.BitString;break;case 4:c=j.OctetString;break;case 5:c=j.Null;break;case 6:c=j.ObjectIdentifier;break;case 10:c=j.Enumerated;break;case 12:c=j.Utf8String;break;case 13:c=j.RelativeObjectIdentifier;break;case 14:c=j.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=j.Sequence;break;case 17:c=j.Set;break;case 18:c=j.NumericString;break;case 19:c=j.PrintableString;break;case 20:c=j.TeletexString;break;case 21:c=j.VideotexString;break;case 22:c=j.IA5String;break;case 23:c=j.UTCTime;break;case 24:c=j.GeneralizedTime;break;case 25:c=j.GraphicString;break;case 26:c=j.VisibleString;break;case 27:c=j.GeneralString;break;case 28:c=j.UniversalString;break;case 29:c=j.CharacterString;break;case 30:c=j.BmpString;break;case 31:c=j.DATE;break;case 32:c=j.TimeOfDay;break;case 33:c=j.DateTime;break;case 34:c=j.Duration;break;default:{let l=o.idBlock.isConstructed?new j.Constructed:new j.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?j.Constructed:j.Primitive}return o=SP(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 G1(r){if(!r.byteLength){let e=new _t({},Kt);return e.error="Input buffer has zero length",{offset:-1,result:e}}return z1(ye.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function AP(r,e){return r?1:e}var Sn=class extends Kt{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(!fo(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 s=t;for(;AP(this.isIndefiniteForm,n)>0;){let i=z1(o,s,n);if(i.offset===-1)return this.error=i.result.error,this.warnings.concat(i.result.warnings),-1;if(s=i.offset,this.blockLength+=i.result.blockLength,n-=i.result.blockLength,this.value.push(i.result),this.isIndefiniteForm&&i.result.constructor.NAME===Ol)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===Ol?this.value.pop():this.warnings.push("No EndOfContent block encoded")),s}toBER(e,t){let n=t||new Nl;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?Tn:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};Sn.NAME="ConstructedValueBlock";var lb,zo=class extends _t{constructor(e={}){super(e,Sn),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(`
45
+ `));n.trace('respond with "%s" for %s',e,i),await o.write(s,t),n.trace('responded with "%s" for %s',e,i);continue}n.trace('respond with "na" for "%s"',i),await o.write(C(`na
46
+ `),t),n('responded with "na" for "%s"',i)}}var t5=class extends ue{id;remoteAddr;remotePeer;direction;timeline;direct;multiplexer;encryption;limits;log;maConn;muxer;components;outboundStreamProtocolNegotiationTimeout;inboundStreamProtocolNegotiationTimeout;closeTimeout;constructor(e,t){super(),this.components=e,this.id=t.id,this.remoteAddr=t.maConn.remoteAddr,this.remotePeer=t.remotePeer,this.direction=t.direction??"outbound",this.timeline=t.maConn.timeline,this.encryption=t.cryptoProtocol,this.limits=t.limits,this.maConn=t.maConn,this.log=t.maConn.log,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.closeTimeout=t.closeTimeout??1e3,this.direct=V8(t.maConn.remoteAddr),this.onIncomingStream=this.onIncomingStream.bind(this),this.remoteAddr.getComponents().find(n=>n.code===421)==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),t.muxer!=null&&(this.multiplexer=t.muxer.protocol,this.muxer=t.muxer,this.muxer.addEventListener("stream",this.onIncomingStream)),this.maConn.addEventListener("close",n=>{this.dispatchEvent(new li(n.local,n.error))})}[Symbol.toStringTag]="Connection";[zy]=!0;get streams(){return this.muxer?.streams??[]}get status(){return this.maConn.status}newStream=async(e,t={})=>{if(this.muxer==null)throw new Vi("Connection is not multiplexed");if(this.muxer.status!=="open")throw new is(`The connection muxer is "${this.muxer.status}" and not "open"`);if(this.maConn.status!=="open")throw new is(`The connection is "${this.status}" and not "open"`);if(this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new pl("Cannot open protocol stream on limited connection");Array.isArray(e)||(e=[e]),t.onProgress?.(new O("connection:open-stream",{connection:this,protocols:e})),this.log.trace("starting new stream for protocols %s",e);let n=await this.muxer.createStream({...t,protocol:e.length===1?e[0]:void 0});this.log.trace("started new stream %s for protocols %s",n.id,e);try{if(t.signal==null){n.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",e);let c=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);t={...t,signal:c}}n.protocol===""?(n.log.trace("selecting protocol from protocols %s",e),n.protocol=await qc(n,e,t),n.log("negotiated protocol %s",n.protocol)):n.log("pre-negotiated protocol %s",n.protocol);let o=SU(n.protocol,this.components.registrar,t),i=CA(n.protocol,"outbound",this);if(i>o){let c=new _a(`Too many outbound protocol streams for protocol "${n.protocol}" - ${i}/${o}`);throw n.abort(c),c}await this.components.peerStore.merge(this.remotePeer,{protocols:[n.protocol]}),this.components.metrics?.trackProtocolStream(n);let s=this.components.registrar.getMiddleware(n.protocol),a=await this.runMiddlewareChain(n,this,s);return t.onProgress?.(new O("connection:opened-stream",{connection:this,stream:a})),a}catch(o){throw n.status==="open"?n.abort(o):this.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",this.direction==="inbound"?"from":"to",this.remoteAddr,e,o),o}};async onIncomingStream(e){let t=e.detail,n=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);t.log("start protocol negotiation, timing out after %dms",this.inboundStreamProtocolNegotiationTimeout);try{if(t.protocol===""){let l=this.components.registrar.getProtocols();t.log.trace("selecting protocol from protocols %s",l),t.protocol=await zc(t,l,{signal:n}),t.log("negotiated protocol %s",t.protocol)}else t.log("pre-negotiated protocol %s",t.protocol);let o=vU(t.protocol,this.components.registrar);if(CA(t.protocol,"inbound",this)>o)throw new wf(`Too many inbound protocol streams for protocol "${t.protocol}" - limit ${o}`);await this.components.peerStore.merge(this.remotePeer,{protocols:[t.protocol]},{signal:n}),this.components.metrics?.trackProtocolStream(t);let{handler:s,options:a}=this.components.registrar.getHandler(t.protocol);if(this.limits!=null&&a.runOnLimitedConnection!==!0)throw new pl("Cannot open protocol stream on limited connection");let c=this.components.registrar.getMiddleware(t.protocol);c.push(async(l,u,d)=>{await s(l,u),d(l,u)}),await this.runMiddlewareChain(t,this,c)}catch(o){t.abort(o)}}async runMiddlewareChain(e,t,n){for(let o=0;o<n.length;o++){let i=n[o];e.log.trace("running middleware",o,i),await new Promise((s,a)=>{try{let c=i(e,t,(l,u)=>{e=l,t=u,s()});c instanceof Promise&&c.catch(a)}catch(c){a(c)}}),e.log.trace("ran middleware",o,i)}return e}async close(e={}){if(this.log("closing connection to %a",this.remoteAddr),e.signal==null){let t=AbortSignal.timeout(this.closeTimeout);e={...e,signal:t}}await this.muxer?.close(e),await this.maConn.close(e)}abort(e){this.muxer?.abort(e),this.maConn.abort(e)}};function RA(r,e){return new t5(r,e)}function vU(r,e){try{let{options:t}=e.getHandler(r);if(t.maxInboundStreams!=null)return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return Z8}function SU(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??J8}function CA(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var E0=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;connectionCloseTimeout;constructor(e,t){this.components=e,this.connectionEncrypters=wt({name:"libp2p_upgrader_connection_encrypters",metrics:this.components.metrics}),t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=wt({name:"libp2p_upgrader_stream_multiplexers",metrics:this.components.metrics}),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.connectionCloseTimeout=t.connectionCloseTimeout??1e3,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"),inboundErrors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_inbound_errors_total"),outboundErrors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_outbound_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 r0(`The multiaddr connection is blocked by gater.${e}`)}createInboundAbortSignal(e){let t=we([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=this.components.connectionManager.acceptIncomingConnection(e),!n)throw new n0("Connection denied");await qe(this.shouldBlockConnection("denyInboundConnection",e),o),await this._performUpgrade(e,"inbound",{...t,signal:o})}catch(i){throw this.metrics.errors?.increment({inbound:!0}),this.metrics.inboundErrors?.increment({[i.name??"Error"]:!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.getComponents().findLast(s=>s.code===421)?.value,o;n!=null&&(o=Xe(n),await qe(this.shouldBlockConnection("denyOutboundConnection",o,e),t.signal));let i="outbound";return t.initiator===!1&&(i="inbound"),await this._performUpgrade(e,i,t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),this.metrics.outboundErrors?.increment({[n.name??"Error"]:!0}),n}}async _performUpgrade(e,t,n){let o=e,i,s,a,c,l=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`;if(e.log=e.log.newScope(`${t}:${l}`),this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t),n?.skipProtection!==!0){let d=this.components.connectionProtector;d!=null&&(e.log("protecting the %s connection",t),o=await d.protect(o,n))}try{if(AU(n)){if(n.remotePeer==null)throw new qn(`${t} connection that skipped encryption must have a peer id`);c="native",i=n.remotePeer}else{let d=e.remoteAddr.getComponents().findLast(h=>h.code===421)?.value,f;d!=null&&(f=Xe(d)),n?.onProgress?.(new O(`upgrader:encrypt-${t}-connection`)),{connection:o,remotePeer:i,protocol:c,streamMuxer:s}=await(t==="inbound"?this._encryptInbound(o,{...n,remotePeer:f}):this._encryptOutbound(o,{...n,remotePeer:f}))}if(i.equals(this.components.peerId)){let d=new Aa("Can not dial self");throw e.abort(d),d}await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",i,e),n?.muxerFactory!=null?s=n.muxerFactory:s==null&&this.streamMuxers.size>0&&(n?.onProgress?.(new O(`upgrader:multiplex-${t}-connection`)),s=await(t==="inbound"?this._multiplexInbound(o,this.streamMuxers,n):this._multiplexOutbound(o,this.streamMuxers,n)))}catch(d){throw e.log.error("failed to upgrade %s connection %s %a - %e",t,t==="inbound"?"from":"to",e.remoteAddr,d),d}s!=null&&(e.log("create muxer %s",s.protocol),a=s.createStreamMuxer(o)),await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",i,e);let u=this._createConnection({id:l,cryptoProtocol:c,direction:t,maConn:e,stream:o,muxer:a,remotePeer:i,limits:n?.limits,closeTimeout:this.connectionCloseTimeout});return u.log("successfully upgraded connection"),u}_createConnection(e){let t=RA(this.components,{...e,outboundStreamProtocolNegotiationTimeout:this.outboundStreamProtocolNegotiationTimeout,inboundStreamProtocolNegotiationTimeout:this.inboundStreamProtocolNegotiationTimeout});return t.addEventListener("close",()=>{this.events.safeDispatchEvent("connection:close",{detail:t})}),this.events.safeDispatchEvent("connection:open",{detail:t}),t}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{let o=await zc(e,n,t),i=this.connectionEncrypters.get(o);if(i==null)throw new ca(`no crypto module found for ${o}`);return e.log("encrypting inbound connection using %s",o),{...await i.secureInbound(e,t),protocol:o}}catch(o){throw new ca(o.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let o=await qc(e,n,t),i=this.connectionEncrypters.get(o);if(i==null)throw new ca(`no crypto module found for ${o}`);return e.log("encrypting outbound connection using %s",o),{...await i.secureOutbound(e,t),protocol:o}}catch(o){throw new ca(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 i=await qc(e,o,n),s=t.get(i);if(s==null)throw new Vi(`No muxer configured for protocol "${i}"`);return e.log("selected %s as muxer protocol",i),s}catch(i){throw e.log.error("error multiplexing outbound connection - %e",i),new Vi(String(i))}}async _multiplexInbound(e,t,n){let o=Array.from(t.keys());e.log("inbound handling muxers %s",o);try{e.log.trace("selecting stream muxer from %s",o);let i=await zc(e,o,n),s=t.get(i);if(s==null)throw new Vi(`No muxer configured for protocol "${i}"`);return e.log("selected %s as muxer protocol",i),s}catch(i){throw e.log.error("error multiplexing inbound connection - %e",i),i}}getConnectionEncrypters(){return this.connectionEncrypters}getStreamMuxers(){return this.streamMuxers}};function AU(r){return r.skipEncryption===!0}var v0="3.2.0",S0="js-libp2p";function A0(r,e){return`${r??S0}/${e??v0} browser/${globalThis.navigator.userAgent}`}var wd=class extends ue{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new ue,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??mc(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=e.nodeInfo?.name??S0,i=e.nodeInfo?.version??v0,s=this.components=gA({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:o,version:i,userAgent:e.nodeInfo?.userAgent??A0(o,i)},logger:this.logger,events:t,datastore:e.datastore??new aa,connectionGater:wA(e.connectionGater),dns:e.dns});e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),this.peerStore=this.configureComponent("peerStore",dA(s,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),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 E0(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,outboundStreamProtocolNegotiationTimeout:e.connectionManager?.outboundStreamProtocolNegotiationTimeout,connectionCloseTimeout:e.connectionManager?.connectionCloseTimeout}),this.configureComponent("transportManager",new x0(this.components,e.transportManager)),this.configureComponent("connectionManager",new h0(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new p0(this.components,e.connectionMonitor)),this.configureComponent("registrar",new b0(this.components)),this.configureComponent("addressManager",new Gp(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 y0(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 m0(this.components,{routers:c})),this.configureComponent("randomWalk",new w0(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[bo]!=null&&(this.log("registering service %s for content routing",l),c.push(d[bo])),d[Eo]!=null&&(this.log("registering service %s for peer routing",l),a.push(d[Eo])),d[cs]!=null&&(this.log("registering service %s for peer discovery",l),d[cs].addEventListener?.("peer",f=>{this.#e(f)}))}yA(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 with peer id %p",this.peerId)}catch(e){throw this.log.error("an error occurred starting libp2p - %e",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 Gr;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 this.components.connectionManager.openStream(e,t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){eo(e)&&(e=Xe(e.getComponents().findLast(n=>n.code===421)?.value??"")),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,t);if(s.id.publicKey!=null)return s.id.publicKey}catch(s){if(s.name!=="NotFoundError")throw s}let n=Ye([C("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),i=pt(o);return await this.peerStore.patch(e,{publicKey:i},t),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,t){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async n=>{await this.components.registrar.unhandle(n,t)}))}async register(e,t,n){return this.components.registrar.register(e,t,n)}unregister(e){this.components.registrar.unregister(e)}use(e,t){this.components.registrar.use(e,Array.isArray(t)?t:[t])}unuse(e){this.components.registrar.unuse(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("could not update multiaddrs of discovered peer - %e",n)})}};async function LA(r={}){r.privateKey??=await Zf("Ed25519");let e=new wd({...await XS(r),peerId:Jv(r.privateKey)});return r.start!==!1&&await e.start(),e}var TU=["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"];function DA(r){return r==null?!1:r instanceof wd?!0:TU.every(e=>typeof r[e]=="function")}var LT=wo(KA(),1);var r5={keyLength:64,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"};var Wc={};ht(Wc,{create:()=>UU,derivedEmptyPasswordKey:()=>T0});var T0={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function UU(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=yt.get();t*=8;async function c(d,f){let h=a.getRandomValues(new Uint8Array(i)),p=a.getRandomValues(new Uint8Array(n)),y={name:e,iv:p};typeof f=="string"&&(f=C(f));let g;if(f.length===0){g=await a.subtle.importKey("jwk",T0,{name:"AES-GCM"},!0,["encrypt"]);try{let b={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},v=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(b,v,{name:e,length:t},!0,["encrypt"])}catch{g=await a.subtle.importKey("jwk",T0,{name:"AES-GCM"},!0,["encrypt"])}}else{let b={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},v=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(b,v,{name:e,length:t},!0,["encrypt"])}let m=await a.subtle.encrypt(y,g,d);return Ye([h,y.iv,new Uint8Array(m)])}async function l(d,f){let h=d.subarray(0,i),p=d.subarray(i,i+n),y=d.subarray(i+n),g={name:e,iv:p};typeof f=="string"&&(f=C(f));let m;if(f.length===0)try{let v={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},L=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(v,L,{name:e,length:t},!0,["decrypt"])}catch{m=await a.subtle.importKey("jwk",T0,{name:"AES-GCM"},!0,["decrypt"])}else{let v={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},L=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(v,L,{name:e,length:t},!0,["decrypt"])}let b=await a.subtle.decrypt(g,m,y);return new Uint8Array(b)}return{encrypt:c,decrypt:l}}var Ie=wo(HA());function la(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 Ki(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 k0(...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 o5(){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=la(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,la(i,8)-n}function qA(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=Ki(s,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=Ki(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 zA(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 vr(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 jpe=Math.log(2);function C0(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function i5(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 ri(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 Ed=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return i5(this.items)}},bd=[new Uint8Array([1])],WA="0123456789";var jc="",fo=new ArrayBuffer(0),s5=new Uint8Array(0),vd="EndOfContent",jA="OCTET STRING",YA="BIT STRING";function ni(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?Ie.BufferSourceConverter.toUint8Array(i.valueHex):s5}fromBER(n,o,i){let s=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!ri(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:Ie.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var Zo=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=jc,warnings:n=[],valueBeforeDecode:o=s5}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=Ie.BufferSourceConverter.toUint8Array(o)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:Ie.Convert.ToHex(this.valueBeforeDecodeView)}}};Zo.NAME="baseBlock";var nr=class extends Zo{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'")}};nr.NAME="valueBlock";var R0=class extends ni(Zo){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?Ie.BufferSourceConverter.toUint8Array(e.valueHex):s5,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=Ki(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=Ie.BufferSourceConverter.toUint8Array(e);if(!ri(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=la(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}}};R0.NAME="identificationBlock";var P0=class extends Zo{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=Ie.BufferSourceConverter.toUint8Array(e);if(!ri(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=la(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=Ki(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}}};P0.NAME="lengthBlock";var oe={},qt=class extends Zo{constructor({name:e=jc,optional:t=!1,primitiveSchema:n,...o}={},i){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new R0(o),this.lenBlock=new P0(o),this.valueBlock=i?new i(o):new nr(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 Ed;t||XA(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():Ie.Convert.ToHex(this.toBER())}onAsciiEncoding(){let e=this.constructor.NAME,t=Ie.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 zA(t,n)}};qt.NAME="BaseBlock";function XA(r){var e;if(r instanceof oe.Constructed)for(let t of r.valueBlock.value)XA(t)&&(r.lenBlock.isIndefiniteForm=!0);return!!(!((e=r.lenBlock)===null||e===void 0)&&e.isIndefiniteForm)}var L0=class extends qt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor({value:e=jc,...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}'`}};L0.NAME="BaseStringBlock";var D0=class extends ni(nr){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};D0.NAME="PrimitiveValueBlock";var QA,N0=class extends qt{constructor(e={}){super(e,D0),this.idBlock.isConstructed=!1}};QA=N0;oe.Primitive=QA;N0.NAME="PRIMITIVE";function GU(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 pm(r,e=0,t=r.length){let n=e,o=new qt({},nr),i=new Zo;if(!ri(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=qt;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=oe.EndOfContent;break;case 1:c=oe.Boolean;break;case 2:c=oe.Integer;break;case 3:c=oe.BitString;break;case 4:c=oe.OctetString;break;case 5:c=oe.Null;break;case 6:c=oe.ObjectIdentifier;break;case 10:c=oe.Enumerated;break;case 12:c=oe.Utf8String;break;case 13:c=oe.RelativeObjectIdentifier;break;case 14:c=oe.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=oe.Sequence;break;case 17:c=oe.Set;break;case 18:c=oe.NumericString;break;case 19:c=oe.PrintableString;break;case 20:c=oe.TeletexString;break;case 21:c=oe.VideotexString;break;case 22:c=oe.IA5String;break;case 23:c=oe.UTCTime;break;case 24:c=oe.GeneralizedTime;break;case 25:c=oe.GraphicString;break;case 26:c=oe.VisibleString;break;case 27:c=oe.GeneralString;break;case 28:c=oe.UniversalString;break;case 29:c=oe.CharacterString;break;case 30:c=oe.BmpString;break;case 31:c=oe.DATE;break;case 32:c=oe.TimeOfDay;break;case 33:c=oe.DateTime;break;case 34:c=oe.Duration;break;default:{let l=o.idBlock.isConstructed?new oe.Constructed:new oe.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?oe.Constructed:oe.Primitive}return o=GU(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 mm(r){if(!r.byteLength){let e=new qt({},nr);return e.error="Input buffer has zero length",{offset:-1,result:e}}return pm(Ie.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function jU(r,e){return r?1:e}var lo=class extends nr{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let o=Ie.BufferSourceConverter.toUint8Array(e);if(!ri(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(;jU(this.isIndefiniteForm,n)>0;){let s=pm(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===vd)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===vd?this.value.pop():this.warnings.push("No EndOfContent block encoded")),i}toBER(e,t){let n=t||new Ed;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}};lo.NAME="ConstructedValueBlock";var ZA,Hi=class extends qt{constructor(e={}){super(e,lo),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(`
47
47
  `).map(o=>` ${o}`).join(`
48
48
  `));let t=this.idBlock.tagClass===3?`[${this.idBlock.tagNumber}]`:this.constructor.NAME;return e.length?`${t} :
49
49
  ${e.join(`
50
- `)}`:`${t} :`}};lb=zo;j.Constructed=lb;zo.NAME="CONSTRUCTED";var h1=class extends Kt{fromBER(e,t,n){return t}toBER(e){return Tn}};h1.override="EndOfContentValueBlock";var ub,p1=class extends _t{constructor(e={}){super(e,h1),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};ub=p1;j.EndOfContent=ub;p1.NAME=Ol;var db,ei=class extends _t{constructor(e={}){super(e,Kt),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}`}};db=ei;j.Null=db;ei.NAME="NULL";var m1=class extends ho(Kt){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=ye.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);return fo(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,Yg.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};m1.NAME="BooleanValueBlock";var fb,g1=class extends _t{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor(e={}){super(e,m1),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};fb=g1;j.Boolean=fb;g1.NAME="BOOLEAN";var y1=class extends ho(Sn){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=Sn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let s=0;s<this.value.length;s++){let i=this.value[s].constructor.NAME;if(i===Ol){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(i!==sb)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?Sn.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};y1.NAME="OctetStringValueBlock";var jg,co=class extends _t{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,s;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((s=n.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},y1),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 s=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+n);try{if(s.byteLength){let i=z1(s,0,s.byteLength);i.offset!==-1&&i.offset===n&&(this.valueBlock.value=[i.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return zo.prototype.onAsciiEncoding.call(this);let e=this.constructor.NAME,t=ye.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 jg&&e.push(t.valueBlock.valueHexView);return ye.BufferSourceConverter.concat(e)}};jg=co;j.OctetString=jg;co.NAME=sb;var w1=class extends ho(Sn){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=Sn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===Ol){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==ib)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 s=ye.BufferSourceConverter.toUint8Array(e);if(!fo(this,s,t,n))return-1;let i=s.subarray(t,t+n);if(this.unusedBits=i[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let a=i.subarray(1);try{if(a.byteLength){let c=z1(a,0,a.byteLength);c.offset!==-1&&c.offset===n-1&&(this.value=[c.result])}}catch{}}return this.valueHexView=i.subarray(1),this.blockLength=i.length,t+n}toBER(e,t){if(this.isConstructed)return Sn.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength){let o=new Uint8Array(1);return o[0]=0,o.buffer}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}}};w1.NAME="BitStringValueBlock";var hb,b1=class extends _t{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,s;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((s=n.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},w1),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 zo.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let i of t)e.push(i.toString(2).padStart(8,"0"));let n=e.join(""),o=this.constructor.NAME,s=n.substring(0,n.length-this.valueBlock.unusedBits);return`${o} : ${s}`}}};hb=b1;j.BitString=hb;b1.NAME=ib;var pb;function TP(r,e){let t=new Uint8Array([0]),n=new Uint8Array(r),o=new Uint8Array(e),s=n.slice(0),i=s.length-1,a=o.slice(0),c=a.length-1,l=0,d=c<i?i:c,u=0;for(let f=d;f>=0;f--,u++){switch(!0){case u<a.length:l=s[i-u]+a[c-u]+t[0];break;default:l=s[i-u]+t[0]}switch(t[0]=l/10,!0){case u>=s.length:s=i1(new Uint8Array([l%10]),s);break;default:s[i-u]=l%10}}return t[0]>0&&(s=i1(t,s)),s}function ob(r){if(r>=Ll.length)for(let e=Ll.length;e<=r;e++){let t=new Uint8Array([0]),n=Ll[e-1].slice(0);for(let o=n.length-1;o>=0;o--){let s=new Uint8Array([(n[o]<<1)+t[0]]);t[0]=s[0]/10,n[o]=s[0]%10}t[0]>0&&(n=i1(t,n)),Ll.push(n)}return Ll[r]}function IP(r,e){let t=0,n=new Uint8Array(r),o=new Uint8Array(e),s=n.slice(0),i=s.length-1,a=o.slice(0),c=a.length-1,l,d=0;for(let u=c;u>=0;u--,d++)switch(l=s[i-d]-a[c-d]-t,!0){case l<0:t=1,s[i-d]=l+10;break;default:t=0,s[i-d]=l}if(t>0)for(let u=i-c+1;u>=0;u--,d++)if(l=s[i-d]-t,l<0)t=1,s[i-d]=l+10;else{t=0,s[i-d]=l;break}return s.slice()}var Bl=class extends ho(Kt){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=Yg.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(tb(e))}get valueDec(){return this._valueDec}fromDER(e,t,n,o=0){let s=this.fromBER(e,t,n);if(s===-1)return s;let i=this.valueHexView;return i[0]===0&&(i[1]&128)!==0?this.valueHexView=i.subarray(1):o!==0&&i.length<o&&(o-i.length>1&&(o=i.length+1),this.valueHexView=i.subarray(o-i.length)),s}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,s=this.valueHexView,i="",a=!1;for(let c=s.byteLength-1;c>=0;c--){o=s[c];for(let l=0;l<8;l++){if((o&1)===1)switch(n){case e:t=IP(ob(n),t),i="-";break;default:t=TP(t,ob(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(i+=nb.charAt(t[c]));return a===!1&&(i+=nb.charAt(0)),i}};pb=Bl;Bl.NAME="IntegerValueBlock";Object.defineProperty(pb.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var Dl,lo=class extends _t{constructor(e={}){super(e,Bl),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return a1(),BigInt(this.valueBlock.toString())}static fromBigInt(e){a1();let t=BigInt(e),n=new Nl,o=t.toString(16).replace(/^-/,""),s=new Uint8Array(ye.Convert.FromHex(o));if(t<0){let a=new Uint8Array(s.length+(s[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${ye.Convert.ToHex(a)}`)+t,d=ye.BufferSourceConverter.toUint8Array(ye.Convert.FromHex(l.toString(16)));d[0]|=128,n.write(d)}else s[0]&128&&n.write(new Uint8Array([0])),n.write(s);return new Dl({valueHex:n.final()})}convertToDER(){let e=new Dl({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new Dl({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};Dl=lo;j.Integer=Dl;lo.NAME="INTEGER";var mb,E1=class extends lo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};mb=E1;j.Enumerated=mb;E1.NAME="ENUMERATED";var Ml=class extends ho(Kt){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(!fo(this,o,t,n))return-1;let s=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=s[a]&127,this.blockLength++,(s[a]&128)!==0);a++);let i=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)i[a]=this.valueHexView[a];return this.valueHexView=i,(s[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=Js(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){a1();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,s=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)s[i]=o[i]|128;return s[this.blockLength-1]=o[this.blockLength-1],s.buffer}let t=Wo(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Tn;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}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}}};Ml.NAME="sidBlock";var x1=class extends Kt{constructor({value:e=Sa,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new Ml;if(o=s.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=s.error,o;this.value.length===0&&(s.isFirstSid=!0),this.blockLength+=s.blockLength,n-=s.blockLength,this.value.push(s)}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,Tn;t.push(o)}return Xg(t)}fromString(e){this.value=[];let t=0,n=0,o="",s=!1;do if(n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1,s){let i=this.value[0],a=0;switch(i.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;i.valueDec=c+a,s=!1}else{let i=new Ml;if(o>Number.MAX_SAFE_INTEGER){a1();let a=BigInt(o);i.valueBigInt=a}else if(i.valueDec=parseInt(o,10),isNaN(i.valueDec))return;this.value.length||(i.isFirstSid=!0,s=!0),this.value.push(i)}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}};x1.NAME="ObjectIdentifierValueBlock";var gb,An=class extends _t{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,x1),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};gb=An;j.ObjectIdentifier=gb;An.NAME="OBJECT IDENTIFIER";var Ul=class extends ho(ao){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(!fo(this,o,t,n))return-1;let s=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=s[a]&127,this.blockLength++,(s[a]&128)!==0);a++);let i=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)i[a]=this.valueHexView[a];return this.valueHexView=i,(s[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=Js(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,s=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)s[i]=o[i]|128;return s[this.blockLength-1]=o[this.blockLength-1],s.buffer}let t=Wo(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Tn;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}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}}};Ul.NAME="relativeSidBlock";var v1=class extends Kt{constructor({value:e=Sa,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new Ul;if(o=s.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=s.error,o;this.blockLength+=s.blockLength,n-=s.blockLength,this.value.push(s)}return o}toBER(e,t){let n=[];for(let o=0;o<this.value.length;o++){let s=this.value[o].toBER(e);if(s.byteLength===0)return this.error=this.value[o].error,Tn;n.push(s)}return Xg(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 s=new Ul;if(s.valueDec=parseInt(o,10),isNaN(s.valueDec))return!0;this.value.push(s)}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}};v1.NAME="RelativeObjectIdentifierValueBlock";var yb,S1=class extends _t{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,v1),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};yb=S1;j.RelativeObjectIdentifier=yb;S1.NAME="RelativeObjectIdentifier";var wb,ir=class extends zo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};wb=ir;j.Sequence=wb;ir.NAME="SEQUENCE";var bb,A1=class extends zo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};bb=A1;j.Set=bb;A1.NAME="SET";var T1=class extends ho(Kt){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=Sa}toJSON(){return{...super.toJSON(),value:this.value}}};T1.NAME="StringValueBlock";var I1=class extends T1{};I1.NAME="SimpleStringValueBlock";var Zt=class extends u1{constructor({...e}={}){super(e,I1)}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}};Zt.NAME="SIMPLE STRING";var _1=class extends Zt{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}};_1.NAME="Utf8StringValueBlock";var Eb,uo=class extends _1{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};Eb=uo;j.Utf8String=Eb;uo.NAME="UTF8String";var C1=class extends Zt{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))}};C1.NAME="BmpStringValueBlock";var xb,k1=class extends C1{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};xb=k1;j.BmpString=xb;k1.NAME="BMPString";var R1=class extends Zt{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 s=Wo(e.charCodeAt(o),8),i=new Uint8Array(s);if(i.length>4)continue;let a=4-i.length;for(let c=i.length-1;c>=0;c--)n[o*4+c+a]=i[c]}this.valueBlock.value=e}};R1.NAME="UniversalStringValueBlock";var vb,P1=class extends R1{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};vb=P1;j.UniversalString=vb;P1.NAME="UniversalString";var Sb,L1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};Sb=L1;j.NumericString=Sb;L1.NAME="NumericString";var Ab,D1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};Ab=D1;j.PrintableString=Ab;D1.NAME="PrintableString";var Tb,N1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};Tb=N1;j.TeletexString=Tb;N1.NAME="TeletexString";var Ib,O1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};Ib=O1;j.VideotexString=Ib;O1.NAME="VideotexString";var _b,B1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};_b=B1;j.IA5String=_b;B1.NAME="IA5String";var Cb,M1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};Cb=M1;j.GraphicString=Cb;M1.NAME="GraphicString";var kb,Fl=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};kb=Fl;j.VisibleString=kb;Fl.NAME="VisibleString";var Rb,U1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};Rb=U1;j.GeneralString=Rb;U1.NAME="GeneralString";var Pb,F1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};Pb=F1;j.CharacterString=Pb;F1.NAME="CharacterString";var Lb,$l=class extends Fl{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]=sr(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=sr(this.month,2),t[2]=sr(this.day,2),t[3]=sr(this.hour,2),t[4]=sr(this.minute,2),t[5]=sr(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}}};Lb=$l;j.UTCTime=Lb;$l.NAME="UTCTime";var Db,$1=class extends $l{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="",s=0,i,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),t=!0;else{let u=new Number(e[e.length-1]);if(isNaN(u.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 u=1,f=n.indexOf("+"),h="";if(f===-1&&(f=n.indexOf("-"),u=-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=u*p,h.length===4){if(p=parseInt(h.substring(2,4),10),isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");c=u*p}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let u=new Number(`0${n.substring(l)}`);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");s=u.valueOf(),o=n.substring(0,l)}else o=n;switch(!0){case o.length===8:if(i=/(\d{4})(\d{2})(\d{2})/ig,l!==-1)throw new Error("Wrong input string for conversion");break;case o.length===10:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*s;this.minute=Math.floor(u),u=60*(u-this.minute),this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===12:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*s;this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===14:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=1e3*s;this.millisecond=Math.floor(u)}break;default:throw new Error("Wrong input string for conversion")}let d=i.exec(o);if(d===null)throw new Error("Wrong input string for conversion");for(let u=1;u<d.length;u++)switch(u){case 1:this.year=parseInt(d[u],10);break;case 2:this.month=parseInt(d[u],10);break;case 3:this.day=parseInt(d[u],10);break;case 4:this.hour=parseInt(d[u],10)+a;break;case 5:this.minute=parseInt(d[u],10)+c;break;case 6:this.second=parseInt(d[u],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let u=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=u.getUTCFullYear(),this.month=u.getUTCMonth(),this.day=u.getUTCDay(),this.hour=u.getUTCHours(),this.minute=u.getUTCMinutes(),this.second=u.getUTCSeconds(),this.millisecond=u.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(sr(this.year,4)),t.push(sr(this.month,2)),t.push(sr(this.day,2)),t.push(sr(this.hour,2)),t.push(sr(this.minute,2)),t.push(sr(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(sr(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};Db=$1;j.GeneralizedTime=Db;$1.NAME="GeneralizedTime";var Nb,K1=class extends uo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};Nb=K1;j.DATE=Nb;K1.NAME="DATE";var Ob,V1=class extends uo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};Ob=V1;j.TimeOfDay=Ob;V1.NAME="TimeOfDay";var Bb,H1=class extends uo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};Bb=H1;j.DateTime=Bb;H1.NAME="DateTime";var Mb,q1=class extends uo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};Mb=q1;j.Duration=Mb;q1.NAME="Duration";var Ub,W1=class extends uo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};Ub=W1;j.TIME=Ub;W1.NAME="TIME";async function Y1(r,e){let n=await xa.create().encrypt(r,e);return nt.encode(n)}async function Zg(r,e,t){if(r.type==="RSA")return RP(r,e,t);if(r.type==="Ed25519")return _P(r,e,t);if(r.type==="secp256k1")return CP(r,e,t);if(r.type==="ECDSA")return kP(r,e,t);throw new Ur}async function _P(r,e,t="libp2p-key"){if(t==="libp2p-key")return Y1(_s(r),e);throw new A(`export format '${t}' is not supported`)}async function CP(r,e,t="libp2p-key"){if(t==="libp2p-key")return Y1(_s(r),e);throw new A("Export format is not supported")}async function kP(r,e,t="libp2p-key"){if(t==="libp2p-key")return Y1(_s(r),e);throw new A(`export format '${t}' is not supported`)}async function RP(r,e,t="pkcs-8"){if(t==="pkcs-8")return PP(r,e);if(t==="libp2p-key")return Y1(_s(r),e);throw new A("Export format is not supported")}async function PP(r,e){let t=ot.get(),o=new ir({value:[new lo({value:0}),new ir({value:[new An({value:"1.2.840.113549.1.1.1"}),new ei]}),new co({valueHex:r.raw})]}).toBER(),s=new Uint8Array(o,0,o.byteLength),i=Yt(16),a=await od(To,e,i,{c:1e4,dkLen:32}),c=Yt(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),d=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,s),u=new ir({value:[new co({valueHex:i}),new lo({value:1e4}),new lo({value:32}),new ir({value:[new An({value:"1.2.840.113549.2.11"}),new ei]})]}),f=new ir({value:[new An({value:"1.2.840.113549.1.5.13"}),new ir({value:[new ir({value:[new An({value:"1.2.840.113549.1.5.12"}),u]}),new ir({value:[new An({value:"2.16.840.1.101.3.4.1.42"}),new co({valueHex:c})]})]})]}),p=new ir({value:[f,new co({valueHex:d})]}).toBER(),g=new Uint8Array(p,0,p.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...P(g,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
51
- `)}async function Jg(r,e){try{let t=await LP(r,e);return F8(t)}catch{}if(!r.includes("BEGIN"))throw new A("Encrypted key was not a libp2p-key or a PEM file");return DP(r,e)}async function LP(r,e){let t=nt.decode(r);return xa.create().decrypt(t,e)}async function DP(r,e){let t=ot.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let s=C(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:i}=G1(s),{iv:a,salt:c,iterations:l,keySize:d,cipherText:u}=NP(i),f=await od(To,e,c,{c:l,dkLen:d}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=Kl(await t.subtle.decrypt({name:"AES-CBC",iv:a},h,u)),{result:g}=G1(p);n=Vb(g)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let s=C(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:i}=G1(s);n=Vb(i)}else throw new A("Could not parse private key from PEM data");let o=$8(n);if(o.type!=="RSA")throw new A("Could not parse RSA private key from PEM data");return o}function NP(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new A("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 A("Only pkcs5PBKDF2 key derivation functions are supported");let s=n.valueBlock.value[1],i=Kl(s.valueBlock.value[0].getValue()),a=1e4,c=32;if(s.valueBlock.value.length===3)a=Number(s.valueBlock.value[1].toBigInt()),c=Number(s.valueBlock.value[2].toBigInt());else if(s.valueBlock.value.length===2)throw new A("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],d=l.valueBlock.value[0].toString();if(d!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(d!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new A("Only AES-CBC encryption schemes are supported")}}}}let u=Kl(l.valueBlock.value[1].getValue());return{cipherText:Kl(r.valueBlock.value[1].getValue()),salt:i,iterations:a,keySize:c,iv:u}}function Vb(r){return Kl(r.valueBlock.value[2].getValue())}function Kl(r){return new Uint8Array(r,0,r.byteLength)}var OP="/pkcs8/",e4="/info/",Vl=new WeakMap,ti={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3};function Aa(r){return r==null||typeof r!="string"?!1:r===(0,Hb.default)(r.trim())&&r.length>0}async function Ct(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function ri(r){return new $e(OP+r)}function Ta(r){return new $e(e4+r)}async function BP(r){let e=_s(r),t=await Ge.digest(e);return Ne.encode(t.bytes).substring(1)}var X1=class{components;init;log;self;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init={...t,dek:{...zg,...t.dek}},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<ti.minKeyLength)throw new Error(`dek.keyLength must be least ${ti.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<ti.minSaltLength)throw new Error(`dek.saltLength must be least ${ti.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<ti.minIterationCount)throw new Error(`dek.iterationCount must be least ${ti.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Rc(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Vl.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[me]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},this.options),t=Math.ceil(ti.minSaltLength/3)*3;return e.dek!=null&&(e.dek.salt=P(Yt(t),"base64")),e}static get options(){return{dek:{...zg}}}async findKeyByName(e){if(!Aa(e))throw await Ct(),new A(`Invalid key name '${e}'`);let t=Ta(e);try{let n=await this.components.datastore.get(t);return JSON.parse(P(n))}catch(n){throw await Ct(),this.log.error("could not read key from datastore - %e",n),new De(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:e4};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(P(n.value));if(o.id===e)return o}throw new A(`Key with id '${e}' does not exist.`)}catch(t){throw await Ct(),t}}async importKey(e,t){if(!Aa(e))throw await Ct(),new A(`Invalid key name '${e}'`);if(t==null)throw await Ct(),new A("Key is required");let n=ri(e);if(await this.components.datastore.has(n))throw await Ct(),new A(`Key '${e}' already exists`);let s,i;try{s=await BP(t);let l=Vl.get(this);if(l==null)throw new A("dek missing");let d=l.dek;i=await Zg(t,d,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await Ct(),l}let a={name:e,id:s},c=this.components.datastore.batch();return c.put(n,C(i)),c.put(Ta(e),C(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!Aa(e))throw await Ct(),new A(`Invalid key name '${e}'`);let t=ri(e);try{let n=await this.components.datastore.get(t),o=P(n),s=Vl.get(this);if(s==null)throw new A("dek missing");let i=s.dek;return await Jg(o,i)}catch(n){throw await Ct(),n}}async removeKey(e){if(!Aa(e)||e===this.self)throw await Ct(),new A(`Invalid key name '${e}'`);let t=ri(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(Ta(e)),await o.commit(),n}async listKeys(){let e={prefix:e4},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(P(n.value)));return t}async renameKey(e,t){if(!Aa(e)||e===this.self)throw await Ct(),new A(`Invalid old key name '${e}'`);if(!Aa(t)||t===this.self)throw await Ct(),new A(`Invalid new key name '${t}'`);let n=ri(e),o=ri(t),s=Ta(e),i=Ta(t);if(await this.components.datastore.has(o))throw await Ct(),new A(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(s),d=JSON.parse(P(l));d.name=t;let u=this.components.datastore.batch();return u.put(o,c),u.put(i,C(JSON.stringify(d))),u.delete(n),u.delete(s),await u.commit(),d}catch(c){throw await Ct(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await Ct(),new A(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await Ct(),new A(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await Ct(),new A(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=Vl.get(this);if(n==null)throw new A("dek missing");let o=n.dek;this.init.pass=t;let s=t!=null&&this.init.dek?.salt!=null?Rc(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Vl.set(this,{dek:s});let i=await this.listKeys();for(let a of i){let c=await this.components.datastore.get(ri(a.name)),l=P(c),d=await Jg(l,o),u=s.toString(),f=await Zg(d,u,d.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(ri(a.name),C(f)),h.put(Ta(a.name),C(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function Q1(r={}){return e=>new X1(e,r)}async function t4(r,e={}){let t=e.selfKey??"self",n=Q1(e)({datastore:r,logger:ea()}),o;return await r.has(new $e(`/pkcs8/${t}`))?o=await n.exportKey(t):(o=await rd(e.keyType??"Ed25519"),await n.importKey(t,o)),o}var Ia=!!globalThis.process?.env?.DUMP_SESSION_KEYS,r4=16;function MP(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function j1(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function Z1(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function bt(r,e,t=""){let n=MP(r),o=r?.length,s=e!==void 0;if(!n||s&&o!==e){let i=t&&`"${t}" `,a=s?` of length ${e}`:"",c=n?`length=${o}`:`type=${typeof r}`;throw new Error(i+"expected Uint8Array"+a+", got "+c)}return r}function n4(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 qb(r,e){bt(r,void 0,"output");let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}function po(r){return new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4))}function mo(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function UP(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}var FP=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Wb(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function zb(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 o4=(r,e)=>{function t(n,...o){if(bt(n,void 0,"key"),!FP)throw new Error("Non little-endian hardware is not yet supported");if(r.nonceLength!==void 0){let d=o[0];bt(d,r.varSizeNonce?void 0:r.nonceLength,"nonce")}let s=r.tagLength;s&&o[1]!==void 0&&bt(o[1],void 0,"AAD");let i=e(n,...o),a=(d,u)=>{if(u!==void 0){if(d!==2)throw new Error("cipher output not supported");bt(u,void 0,"output")}},c=!1;return{encrypt(d,u){if(c)throw new Error("cannot encrypt() twice with same key + nonce");return c=!0,bt(d),a(i.encrypt.length,u),i.encrypt(d,u)},decrypt(d,u){if(bt(d),s&&d.length<s)throw new Error('"ciphertext" expected length bigger than tagLength='+s);return a(i.decrypt.length,u),i.decrypt(d,u)}}}return Object.assign(t,r),t};function s4(r,e,t=!0){if(e===void 0)return new Uint8Array(r);if(e.length!==r)throw new Error('"output" expected Uint8Array of length '+r+", got: "+e.length);if(t&&!$P(e))throw new Error("invalid output, must be aligned");return e}function Gb(r,e,t){j1(t);let n=new Uint8Array(16),o=UP(n);return o.setBigUint64(0,BigInt(e),t),o.setBigUint64(8,BigInt(r),t),n}function $P(r){return r.byteOffset%4===0}function _a(r){return Uint8Array.from(r)}var Xb=r=>Uint8Array.from(r.split(""),e=>e.charCodeAt(0)),KP=Xb("expand 16-byte k"),VP=Xb("expand 32-byte k"),HP=po(KP),qP=po(VP);function Z(r,e){return r<<e|r>>>32-e}function i4(r){return r.byteOffset%4===0}var J1=64,WP=16,Qb=2**32-1,Yb=Uint32Array.of();function zP(r,e,t,n,o,s,i,a){let c=o.length,l=new Uint8Array(J1),d=po(l),u=i4(o)&&i4(s),f=u?po(o):Yb,h=u?po(s):Yb;for(let p=0;p<c;i++){if(r(e,t,n,d,i,a),i>=Qb)throw new Error("arx: counter overflow");let g=Math.min(J1,c-p);if(u&&g===J1){let m=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let w=0,I;w<WP;w++)I=m+w,h[I]=f[I]^d[w];p+=J1;continue}for(let m=0,w;m<g;m++)w=p+m,s[w]=o[w]^l[m];p+=g}}function a4(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:s,rounds:i}=Wb({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return Z1(o),Z1(i),j1(s),j1(t),(a,c,l,d,u=0)=>{bt(a,void 0,"key"),bt(c,void 0,"nonce"),bt(l,void 0,"data");let f=l.length;if(d===void 0&&(d=new Uint8Array(f)),bt(d,void 0,"output"),Z1(u),u<0||u>=Qb)throw new Error("arx: counter overflow");if(d.length<f)throw new Error(`arx: output (${d.length}) is shorter than data (${f})`);let h=[],p=a.length,g,m;if(p===32)h.push(g=_a(a)),m=qP;else if(p===16&&t)g=new Uint8Array(32),g.set(a),g.set(a,16),m=HP,h.push(g);else throw bt(a,32,"arx key"),new Error("invalid key size");i4(c)||h.push(c=_a(c));let w=po(g);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(m,w,po(c.subarray(0,16)),w),c=c.subarray(16)}let I=16-o;if(I!==c.length)throw new Error(`arx: nonce must be ${I} or 16 bytes`);if(I!==12){let D=new Uint8Array(12);D.set(c,s?0:12-c.length),c=D,h.push(c)}let T=po(c);return zP(r,m,w,T,l,d,u,i),mo(...h),d}}function kt(r,e){return r[e++]&255|(r[e++]&255)<<8}var c4=class{blockLen=16;outputLen=16;buffer=new Uint8Array(16);r=new Uint16Array(10);h=new Uint16Array(10);pad=new Uint16Array(8);pos=0;finished=!1;constructor(e){e=_a(bt(e,32,"key"));let t=kt(e,0),n=kt(e,2),o=kt(e,4),s=kt(e,6),i=kt(e,8),a=kt(e,10),c=kt(e,12),l=kt(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|s<<9)&8191,this.r[4]=(s>>>4|i<<12)&255,this.r[5]=i>>>1&8190,this.r[6]=(i>>>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 d=0;d<8;d++)this.pad[d]=kt(e,16+2*d)}process(e,t,n=!1){let o=n?0:2048,{h:s,r:i}=this,a=i[0],c=i[1],l=i[2],d=i[3],u=i[4],f=i[5],h=i[6],p=i[7],g=i[8],m=i[9],w=kt(e,t+0),I=kt(e,t+2),T=kt(e,t+4),D=kt(e,t+6),F=kt(e,t+8),$=kt(e,t+10),z=kt(e,t+12),S=kt(e,t+14),x=s[0]+(w&8191),L=s[1]+((w>>>13|I<<3)&8191),M=s[2]+((I>>>10|T<<6)&8191),R=s[3]+((T>>>7|D<<9)&8191),v=s[4]+((D>>>4|F<<12)&8191),E=s[5]+(F>>>1&8191),b=s[6]+((F>>>14|$<<2)&8191),_=s[7]+(($>>>11|z<<5)&8191),B=s[8]+((z>>>8|S<<8)&8191),O=s[9]+(S>>>5|o),k=0,U=k+x*a+L*(5*m)+M*(5*g)+R*(5*p)+v*(5*h);k=U>>>13,U&=8191,U+=E*(5*f)+b*(5*u)+_*(5*d)+B*(5*l)+O*(5*c),k+=U>>>13,U&=8191;let K=k+x*c+L*a+M*(5*m)+R*(5*g)+v*(5*p);k=K>>>13,K&=8191,K+=E*(5*h)+b*(5*f)+_*(5*u)+B*(5*d)+O*(5*l),k+=K>>>13,K&=8191;let W=k+x*l+L*c+M*a+R*(5*m)+v*(5*g);k=W>>>13,W&=8191,W+=E*(5*p)+b*(5*h)+_*(5*f)+B*(5*u)+O*(5*d),k+=W>>>13,W&=8191;let we=k+x*d+L*l+M*c+R*a+v*(5*m);k=we>>>13,we&=8191,we+=E*(5*g)+b*(5*p)+_*(5*h)+B*(5*f)+O*(5*u),k+=we>>>13,we&=8191;let pe=k+x*u+L*d+M*l+R*c+v*a;k=pe>>>13,pe&=8191,pe+=E*(5*m)+b*(5*g)+_*(5*p)+B*(5*h)+O*(5*f),k+=pe>>>13,pe&=8191;let ue=k+x*f+L*u+M*d+R*l+v*c;k=ue>>>13,ue&=8191,ue+=E*a+b*(5*m)+_*(5*g)+B*(5*p)+O*(5*h),k+=ue>>>13,ue&=8191;let be=k+x*h+L*f+M*u+R*d+v*l;k=be>>>13,be&=8191,be+=E*c+b*a+_*(5*m)+B*(5*g)+O*(5*p),k+=be>>>13,be&=8191;let Le=k+x*p+L*h+M*f+R*u+v*d;k=Le>>>13,Le&=8191,Le+=E*l+b*c+_*a+B*(5*m)+O*(5*g),k+=Le>>>13,Le&=8191;let et=k+x*g+L*p+M*h+R*f+v*u;k=et>>>13,et&=8191,et+=E*d+b*l+_*c+B*a+O*(5*m),k+=et>>>13,et&=8191;let Ee=k+x*m+L*g+M*p+R*h+v*f;k=Ee>>>13,Ee&=8191,Ee+=E*u+b*d+_*l+B*c+O*a,k+=Ee>>>13,Ee&=8191,k=(k<<2)+k|0,k=k+U|0,U=k&8191,k=k>>>13,K+=k,s[0]=U,s[1]=K,s[2]=W,s[3]=we,s[4]=pe,s[5]=ue,s[6]=be,s[7]=Le,s[8]=et,s[9]=Ee}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 s=(o^1)-1;for(let a=0;a<10;a++)n[a]&=s;s=~s;for(let a=0;a<10;a++)e[a]=e[a]&s|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 i=e[0]+t[0];e[0]=i&65535;for(let a=1;a<8;a++)i=(e[a]+t[a]|0)+(i>>>16)|0,e[a]=i&65535;mo(n)}update(e){n4(this),bt(e),e=_a(e);let{buffer:t,blockLen:n}=this,o=e.length;for(let s=0;s<o;){let i=Math.min(n-this.pos,o-s);if(i===n){for(;n<=o-s;s+=n)this.process(e,s);continue}t.set(e.subarray(s,s+i),this.pos),this.pos+=i,s+=i,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){mo(this.h,this.r,this.buffer,this.pad)}digestInto(e){n4(this),qb(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 s=0;for(let i=0;i<8;i++)e[s++]=n[i]>>>0,e[s++]=n[i]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function GP(r){let e=(n,o)=>r(o).update(n).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var jb=GP(r=>new c4(r));function eE(r,e,t,n,o,s=20){let i=r[0],a=r[1],c=r[2],l=r[3],d=e[0],u=e[1],f=e[2],h=e[3],p=e[4],g=e[5],m=e[6],w=e[7],I=o,T=t[0],D=t[1],F=t[2],$=i,z=a,S=c,x=l,L=d,M=u,R=f,v=h,E=p,b=g,_=m,B=w,O=I,k=T,U=D,K=F;for(let we=0;we<s;we+=2)$=$+L|0,O=Z(O^$,16),E=E+O|0,L=Z(L^E,12),$=$+L|0,O=Z(O^$,8),E=E+O|0,L=Z(L^E,7),z=z+M|0,k=Z(k^z,16),b=b+k|0,M=Z(M^b,12),z=z+M|0,k=Z(k^z,8),b=b+k|0,M=Z(M^b,7),S=S+R|0,U=Z(U^S,16),_=_+U|0,R=Z(R^_,12),S=S+R|0,U=Z(U^S,8),_=_+U|0,R=Z(R^_,7),x=x+v|0,K=Z(K^x,16),B=B+K|0,v=Z(v^B,12),x=x+v|0,K=Z(K^x,8),B=B+K|0,v=Z(v^B,7),$=$+M|0,K=Z(K^$,16),_=_+K|0,M=Z(M^_,12),$=$+M|0,K=Z(K^$,8),_=_+K|0,M=Z(M^_,7),z=z+R|0,O=Z(O^z,16),B=B+O|0,R=Z(R^B,12),z=z+R|0,O=Z(O^z,8),B=B+O|0,R=Z(R^B,7),S=S+v|0,k=Z(k^S,16),E=E+k|0,v=Z(v^E,12),S=S+v|0,k=Z(k^S,8),E=E+k|0,v=Z(v^E,7),x=x+L|0,U=Z(U^x,16),b=b+U|0,L=Z(L^b,12),x=x+L|0,U=Z(U^x,8),b=b+U|0,L=Z(L^b,7);let W=0;n[W++]=i+$|0,n[W++]=a+z|0,n[W++]=c+S|0,n[W++]=l+x|0,n[W++]=d+L|0,n[W++]=u+M|0,n[W++]=f+R|0,n[W++]=h+v|0,n[W++]=p+E|0,n[W++]=g+b|0,n[W++]=m+_|0,n[W++]=w+B|0,n[W++]=I+O|0,n[W++]=T+k|0,n[W++]=D+U|0,n[W++]=F+K|0}function YP(r,e,t,n){let o=r[0],s=r[1],i=r[2],a=r[3],c=e[0],l=e[1],d=e[2],u=e[3],f=e[4],h=e[5],p=e[6],g=e[7],m=t[0],w=t[1],I=t[2],T=t[3];for(let F=0;F<20;F+=2)o=o+c|0,m=Z(m^o,16),f=f+m|0,c=Z(c^f,12),o=o+c|0,m=Z(m^o,8),f=f+m|0,c=Z(c^f,7),s=s+l|0,w=Z(w^s,16),h=h+w|0,l=Z(l^h,12),s=s+l|0,w=Z(w^s,8),h=h+w|0,l=Z(l^h,7),i=i+d|0,I=Z(I^i,16),p=p+I|0,d=Z(d^p,12),i=i+d|0,I=Z(I^i,8),p=p+I|0,d=Z(d^p,7),a=a+u|0,T=Z(T^a,16),g=g+T|0,u=Z(u^g,12),a=a+u|0,T=Z(T^a,8),g=g+T|0,u=Z(u^g,7),o=o+l|0,T=Z(T^o,16),p=p+T|0,l=Z(l^p,12),o=o+l|0,T=Z(T^o,8),p=p+T|0,l=Z(l^p,7),s=s+d|0,m=Z(m^s,16),g=g+m|0,d=Z(d^g,12),s=s+d|0,m=Z(m^s,8),g=g+m|0,d=Z(d^g,7),i=i+u|0,w=Z(w^i,16),f=f+w|0,u=Z(u^f,12),i=i+u|0,w=Z(w^i,8),f=f+w|0,u=Z(u^f,7),a=a+c|0,I=Z(I^a,16),h=h+I|0,c=Z(c^h,12),a=a+c|0,I=Z(I^a,8),h=h+I|0,c=Z(c^h,7);let D=0;n[D++]=o,n[D++]=s,n[D++]=i,n[D++]=a,n[D++]=m,n[D++]=w,n[D++]=I,n[D++]=T}var XP=a4(eE,{counterRight:!1,counterLength:4,allowShortKeys:!1}),QP=a4(eE,{counterRight:!1,counterLength:8,extendNonceFn:YP,allowShortKeys:!1});var jP=new Uint8Array(16),Zb=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(jP.subarray(t))},ZP=new Uint8Array(32);function Jb(r,e,t,n,o){o!==void 0&&bt(o,void 0,"AAD");let s=r(e,t,ZP),i=Gb(n.length,o?o.length:0,!0),a=jb.create(s);o&&Zb(a,o),Zb(a,n),a.update(i);let c=a.digest();return mo(s,i),c}var tE=r=>(e,t,n)=>({encrypt(s,i){let a=s.length;i=s4(a+16,i,!1),i.set(s);let c=i.subarray(0,-16);r(e,t,c,c,1);let l=Jb(r,e,t,c,n);return i.set(l,a),mo(l),i},decrypt(s,i){i=s4(s.length-16,i,!1);let a=s.subarray(0,-16),c=s.subarray(-16),l=Jb(r,e,t,a,n);if(!zb(c,l))throw new Error("invalid tag");return i.set(s.subarray(0,-16)),r(e,t,i,i,1),mo(l),i}}),l4=o4({blockSize:64,nonceLength:12,tagLength:16},tE(XP)),hie=o4({blockSize:64,nonceLength:24,tagLength:16},tE(QP));function nE(r,e,t){return Mn(r),t===void 0&&(t=new Uint8Array(r.outputLen)),ko(r,t,e)}var u4=Uint8Array.of(0),rE=Uint8Array.of();function oE(r,e,t,n=32){Mn(r),Nt(n,"length");let o=r.outputLen;if(n>255*o)throw new Error("Length must be <= 255*HashLen");let s=Math.ceil(n/o);t===void 0?t=rE:ce(t,void 0,"info");let i=new Uint8Array(s*o),a=ko.create(r,e),c=a._cloneInto(),l=new Uint8Array(a.outputLen);for(let d=0;d<s;d++)u4[0]=d+1,c.update(d===0?rE:l).update(t).update(u4).digestInto(l),i.set(l,o*d),a._cloneInto(c);return a.destroy(),c.destroy(),Ot(l,u4),i.slice(0,n)}var d4={hashSHA256(r){return Ir(r.subarray())},getHKDF(r,e){let t=nE(Ir,e,r),o=oE(Ir,t,void 0,96),s=o.subarray(0,32),i=o.subarray(32,64),a=o.subarray(64,96);return[s,i,a]},generateX25519KeyPair(){let r=bc.utils.randomSecretKey();return{publicKey:bc.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:bc.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return bc.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return l4(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return l4(n,e,t).decrypt(r.subarray(),o)}};var sE=d4;function iE(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 Ca=r=>{let e=Ye(2);return e[0]=r>>8,e[1]=r,e};Ca.bytes=2;var ka=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)};ka.bytes=2;function aE(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 f4(r,e){!e.enabled||!Ia||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${P(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${P(r.privateKey,"hex")}`)):e("Missing local static keys."))}function h4(r,e){!e.enabled||!Ia||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${P(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${P(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function cE(r,e){!e.enabled||!Ia||e(r?`REMOTE_STATIC_PUBLIC_KEY ${P(r.subarray(),"hex")}`:"Missing remote static public key.")}function p4(r,e){!e.enabled||!Ia||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${P(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function m4(r,e,t){!t.enabled||!Ia||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&P(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&P(e.k,"hex")}`))}function rn(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=Ye(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var Ra=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var JP=0,eL=4294967295,tL="Cipherstate has reached maximum n, a new handshake must be performed",ep=class{n;bytes;view;constructor(e=JP){this.n=e,this.bytes=ae(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>eL)throw new Error(tL)}};var ni=ae(0),Pa=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new ep(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}},g4=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=C(t,"utf-8");this.h=rL(e,n),this.ck=this.h,this.cs=new Pa(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new Pa(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new Q(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,ni);return[new Pa(this.crypto,e),new Pa(this.crypto,t)]}},y4=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:o,initiator:s,s:i,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new g4(t,n),this.ss.mixHash(o),this.initiator=s,this.s=i,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()}},Hl=class extends y4{writeMessageA(e){return new Q(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new Q(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new Q(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new Ra(`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 Ra(`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 Ra(`handshake stage 2 validation fail: ${t.message}`)}}};function rL(r,e){if(e.length<=32){let t=ae(32);return t.set(e),t}else return r.hash(e)}var tp;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let s of t.webtransportCerthashes)n.uint32(10),n.bytes(s);if(t.streamMuxers!=null)for(let s of t.streamMuxers)n.uint32(18),n.string(s);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={webtransportCerthashes:[],streamMuxers:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.webtransportCerthashes!=null&&s.webtransportCerthashes.length===o.limits.webtransportCerthashes)throw new Oe('Decode error - map field "webtransportCerthashes" had too many elements');s.webtransportCerthashes.push(t.bytes());break}case 2:{if(o.limits?.streamMuxers!=null&&s.streamMuxers.length===o.limits.streamMuxers)throw new Oe('Decode error - map field "streamMuxers" had too many elements');s.streamMuxers.push(t.string());break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(tp||(tp={}));var ql;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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),tp.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={identityKey:ae(0),identitySig:ae(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.identityKey=t.bytes();break}case 2:{s.identitySig=t.bytes();break}case 4:{s.extensions=tp.codec().decode(t,t.uint32(),{limits:o.limits?.extensions});break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(ql||(ql={}));async function b4(r,e,t){let n=await r.sign(uE(e));return ql.encode({identityKey:ht(r.publicKey),identitySig:n,extensions:t})}async function E4(r,e,t){try{let n=ql.decode(r),o=rt(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 s=uE(e);if(!await o.verify(s,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new Eu(n.message)}}function uE(r){let e=C("noise-libp2p-static-key:");return r instanceof Uint8Array?Be([e,r],e.length+r.length):(r.prepend(e),r)}var w4=class extends Lo{stream;handshake;metrics;decoder;constructor(e,t,n){super({log:e.log,inactivityTimeout:e.inactivityTimeout,maxReadBufferLength:e.maxReadBufferLength,direction:e.direction}),this.stream=e,this.handshake=t,this.metrics=n,this.decoder=new _d({lengthDecoder:ka,maxBufferSize:16*1024*1024,encodingLength:()=>2});let o=c=>{try{for(let l of this.decoder.decode(c.data))this.onData(this.decrypt(l))}catch(l){this.abort(l)}};this.stream.addEventListener("message",o);let s=c=>{c.error!=null?c.local===!0?this.abort(c.error):this.onRemoteReset():this.onTransportClosed()};this.stream.addEventListener("close",s);let i=()=>{this.safeDispatchEvent("drain")};this.stream.addEventListener("drain",i);let a=()=>{this.onRemoteCloseWrite()};this.stream.addEventListener("remoteCloseWrite",a)}encrypt(e){let t=new Q;for(let n=0;n<e.byteLength;n+=65519){let o=n+65519;o>e.byteLength&&(o=e.byteLength);let s;e instanceof Uint8Array?s=this.handshake.encrypt(e.subarray(n,o)):s=this.handshake.encrypt(e.sublist(n,o)),this.metrics?.encryptedPackets.increment(),t.append(Ca(s.byteLength)),t.append(s)}return t}decrypt(e){let t=new Q;for(let n=0;n<e.byteLength;n+=65535){let o=n+65535;if(o>e.byteLength&&(o=e.byteLength),o-r4<n)throw new Error("Invalid chunk");let s;e instanceof Uint8Array?s=e.subarray(n,o):s=e.sublist(n,o);let i=e.subarray(n,o-r4);try{let a=this.handshake.decrypt(s,i);this.metrics?.decryptedPackets.increment(),t.append(a)}catch(a){throw this.metrics?.decryptErrors.increment(),a}}return t}close(e){return this.stream.close(e)}sendPause(){this.stream.pause()}sendResume(){this.stream.resume()}sendReset(e){this.stream.abort(e)}sendData(e){return{sentBytes:e.byteLength,canSendMore:this.stream.send(this.encrypt(e))}}};function x4(r,e,t){return new w4(r,e,t)}async function dE(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await b4(s,a.publicKey,l),u=new Hl({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:i,s:a});f4(u.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(u.writeMessageA(ni),e),t.trace("Stage 0 - Initiator finished sending first message."),h4(u.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let f=u.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),p4(u.re,t),cE(u.rs,t),t.trace("Initiator going to check remote's signature...");let h=await E4(f,u.rs,c);t.trace("All good with the signature!"),t.trace("Stage 2 - Initiator sending third handshake message."),await n.write(u.writeMessageC(d),e),t.trace("Stage 2 - Initiator sent message with signed payload.");let[p,g]=u.ss.split();return m4(p,g,t),{payload:h,encrypt:m=>p.encryptWithAd(ni,m),decrypt:(m,w)=>g.decryptWithAd(ni,m,w)}}async function fE(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await b4(s,a.publicKey,l),u=new Hl({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:i,s:a});f4(u.s,t),t.trace("Stage 0 - Responder waiting to receive first message."),u.readMessageA(await n.read(e)),t.trace("Stage 0 - Responder received first message."),p4(u.re,t),t.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await n.write(u.writeMessageB(d),e),t.trace("Stage 1 - Responder sent the second handshake message with signed payload."),h4(u.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let f=u.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let h=await E4(f,u.rs,c),[p,g]=u.ss.split();return m4(p,g,t),{payload:h,encrypt:m=>g.encryptWithAd(ni,m),decrypt:(m,w)=>p.decryptWithAd(ni,m,w)}}var rp=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;log;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:s,prologueBytes:i}=t,{metrics:a}=e;this.components=e,this.log=e.logger.forComponent("libp2p:noise");let c=s??sE;this.crypto=iE(c),this.extensions={webtransportCerthashes:[],...o},this.metrics=a?aE(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=i??ae(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[me]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=e.log?.newScope("noise")??this.log,o=Mo(e,{lengthEncoder:Ca,lengthDecoder:ka,maxDataLength:65535}),s=await this.performHandshakeInitiator(o,this.components.privateKey,n,t?.remotePeer?.publicKey,t),i=rt(s.payload.identityKey);return{connection:x4(o.unwrap(),s,this.metrics),remoteExtensions:s.payload.extensions,remotePeer:En(i),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(s.payload.extensions?.streamMuxers)}}getStreamMuxer(e){if(e==null||e.length===0)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 xu("Early muxer negotiation was requested but the initiator and responder had no common muxers")}async secureInbound(e,t){let n=e.log?.newScope("noise")??this.log,o=Mo(e,{lengthEncoder:Ca,lengthDecoder:ka,maxDataLength:65535}),s=await this.performHandshakeResponder(o,this.components.privateKey,n,t?.remotePeer?.publicKey,t),i=rt(s.payload.identityKey);return{connection:x4(o.unwrap(),s,this.metrics),remoteExtensions:s.payload.extensions,remotePeer:En(i),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(s.payload.extensions?.streamMuxers)}}async performHandshakeInitiator(e,t,n,o,s){let i,a=s?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{i=await dE({connection:e,privateKey:t,remoteIdentityKey:o,log:n.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},s),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return i}async performHandshakeResponder(e,t,n,o,s){let i,a=s?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{i=await fE({connection:e,privateKey:t,remoteIdentityKey:o,log:n.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},s),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return i}};function np(r={}){return e=>new rp(e,r)}var Qe;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Qe||(Qe={}));var Ae;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(Ae||(Ae={}));var Dae=Object.values(Ae).filter(r=>typeof r!="string"),hE=0,lt;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(lt||(lt={}));var In=12;var go=class extends Error{static name="ProtocolError";reason;constructor(e,t){super(e),this.name="ProtocolError",this.reason=t}};function pE(r){return r?.reason!==null}var Sr=class extends go{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e,lt.ProtocolError),this.name="InvalidFrameError"}},La=class extends go{static name="UnRequestedPingError";constructor(e="Un-requested ping error"){super(e,lt.ProtocolError),this.name="UnRequestedPingError"}},Da=class extends go{static name="NotMatchingPingError";constructor(e="Not matching ping error"){super(e,lt.ProtocolError),this.name="NotMatchingPingError"}};var op=class extends go{static name="StreamAlreadyExistsError";constructor(e="Stream already exists"){super(e,lt.ProtocolError),this.name="StreamAlreadyExistsError"}},sp=class extends go{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e,lt.ProtocolError),this.name="DecodeInvalidVersionError"}},ip=class extends go{static name="BothClientsError";constructor(e="Both clients"){super(e,lt.ProtocolError),this.name="BothClientsError"}},Na=class extends go{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e,lt.ProtocolError),this.name="ReceiveWindowExceededError"}};var Uae=new Set([Sr.name,La.name,Da.name,op.name,sp.name,ip.name,Na.name]),zl=256*1024,ap=16*1024*1024;var Gl={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,maxMessageSize:64*1024,maxEarlyStreams:10,streamOptions:{initialStreamWindowSize:zl,maxStreamWindowSize:ap,inactivityTimeout:12e4,maxReadBufferLength:4194304,maxWriteBufferLength:1/0}};function mE(r){if(r.keepAliveInterval!=null&&r.keepAliveInterval<=0)throw new A("keep-alive interval must be positive");if(r.maxInboundStreams!=null&&r.maxInboundStreams<0)throw new A("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams!=null&&r.maxOutboundStreams<0)throw new A("max outbound streams must be larger or equal 0");if(r.maxMessageSize!=null&&r.maxMessageSize<1024)throw new A("MaxMessageSize must be greater than a kilobyte");if(r.streamOptions?.initialStreamWindowSize!=null&&r.streamOptions?.initialStreamWindowSize<zl)throw new A("InitialStreamWindowSize must be larger or equal 256 kB");if(r.streamOptions?.maxStreamWindowSize!=null&&r.streamOptions?.initialStreamWindowSize!=null&&r.streamOptions?.maxStreamWindowSize<r.streamOptions?.initialStreamWindowSize)throw new A("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.streamOptions?.maxStreamWindowSize!=null&&r.streamOptions?.maxStreamWindowSize>2**32-1)throw new A("MaxStreamWindowSize must be less than equal MAX_UINT32")}function yE(r){return r.header.type===Qe.Data&&r.data!==null}var gE=2**24;function nL(r){if(r[0]!==hE)throw new Sr("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*gE+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*gE+(r[9]<<16)+(r[10]<<8)+r[11]}}var cp=class{buffer;constructor(){this.buffer=new Q}*emitFrames(e){for(this.buffer.append(e);;){let t=this.readFrame();if(t===void 0)break;yield t}}readFrame(){let e=In;if(this.buffer.byteLength<In)return;let t=nL(this.buffer.subarray(0,In));if(t.type===Qe.Data){if(e+=t.length,this.buffer.byteLength<e)return;let n=this.buffer.sublist(In,e);return this.buffer.consume(e),{header:t,data:n}}return this.buffer.consume(e),{header:t}}};function v4(r){let e=new Uint8Array(In);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}var Jt;(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",r[r.Paused=5]="Paused"})(Jt||(Jt={}));var lp=class extends Oo{streamId;state;sendWindowCapacity;recvWindow;recvWindowCapacity;maxStreamWindowSize;epochStart;getRTT;sendFrame;constructor(e){let t=e.initialStreamWindowSize??zl;super({...e,maxMessageSize:t-In}),this.streamId=e.streamId,this.state=e.state,this.sendWindowCapacity=t,this.recvWindow=t,this.recvWindowCapacity=this.recvWindow,this.maxStreamWindowSize=e.maxStreamWindowSize??ap,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame;let n=()=>{this.state=Jt.Finished};this.addEventListener("close",n)}sendData(e){let t=e.byteLength,n=0,o=!0;for(this.log?.trace("send window capacity is %d bytes",this.sendWindowCapacity);e.byteLength>0;){if(this.sendWindowCapacity===0){o=!1,this.log?.trace("sent %d/%d bytes, exhausted send window, waiting for window update",n,t);break}let s=Math.min(this.sendWindowCapacity,e.byteLength),i=this.getSendFlags(),a=e.sublist(0,s);e.consume(s);let c=this.sendFrame({type:Qe.Data,flag:i,streamID:this.streamId,length:s},a);if(this.sendWindowCapacity-=s,n+=s,!c){o=c,this.log.trace("sent %d/%d bytes, wait for muxer to have more send capacity",n,t);break}}return{sentBytes:n,canSendMore:o}}sendReset(){this.sendFrame({type:Qe.WindowUpdate,flag:Ae.RST,streamID:this.streamId,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|Ae.FIN;this.sendFrame({type:Qe.WindowUpdate,flag:e,streamID:this.streamId,length:0})}async sendCloseRead(e){e?.signal?.throwIfAborted()}sendPause(){this.state=Jt.Paused}sendResume(){this.state=Jt.Established,this.sendWindowUpdate()}handleWindowUpdate(e){this.processFlags(e.header.flag),this.sendWindowCapacity+=e.header.length,this.maxMessageSize=this.sendWindowCapacity-In,this.maxMessageSize<0&&(this.maxMessageSize=0),this.maxMessageSize!==0&&this.writeBuffer.byteLength>0&&(this.log?.trace("window update of %d bytes allows more data to be sent, have %d bytes queued, sending data %s",e.header.length,this.writeBuffer.byteLength,this.sendingData),this.safeDispatchEvent("drain"))}handleData(e){if(!yE(e))throw new Sr("Frame was not data frame");if(this.processFlags(e.header.flag),this.recvWindowCapacity<e.header.length)throw new Na("Receive window exceeded");this.recvWindowCapacity-=e.header.length,this.onData(e.data),this.sendWindowUpdate()}processFlags(e){(e&Ae.ACK)===Ae.ACK&&this.state===Jt.SYNSent&&(this.state=Jt.Established),(e&Ae.FIN)===Ae.FIN&&this.onRemoteCloseWrite(),(e&Ae.RST)===Ae.RST&&this.onRemoteReset()}getSendFlags(){switch(this.state){case Jt.Init:return this.state=Jt.SYNSent,Ae.SYN;case Jt.SYNReceived:return this.state=Jt.Established,Ae.ACK;default:return 0}}sendWindowUpdate(){if(this.state===Jt.Paused){this.epochStart=Date.now();return}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.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let o=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:Qe.WindowUpdate,flag:e,streamID:this.streamId,length:o})}};function wE(r){return{type:Qe[r.type],flags:[(r.flag&Ae.SYN)===Ae.SYN?"SYN":void 0,(r.flag&Ae.ACK)===Ae.ACK?"ACK":void 0,(r.flag&Ae.FIN)===Ae.FIN?"FIN":void 0,(r.flag&Ae.RST)===Ae.RST?"RST":void 0].filter(Boolean),streamID:r.streamID,length:r.length}}var bE="/yamux/1.0.0",up=class{protocol=bE;_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[me]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new S4(e,{...this._init})}},S4=class extends No{nextStreamID;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;decoder;keepAlive;enableKeepAlive;keepAliveInterval;maxInboundStreams;maxOutboundStreams;constructor(e,t={}){super(e,{...t,protocol:bE,name:"yamux"}),this.client=e.direction==="outbound",mE(t),this.enableKeepAlive=t.enableKeepAlive??Gl.enableKeepAlive,this.keepAliveInterval=t.keepAliveInterval??Gl.keepAliveInterval,this.maxInboundStreams=t.maxInboundStreams??Gl.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Gl.maxOutboundStreams,this.decoder=new cp,this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log.trace("muxer created"),this.enableKeepAlive&&(this.log.trace("muxer keepalive enabled interval=%s",this.keepAliveInterval),this.keepAlive=ra(async n=>{try{await this.ping(n)}catch(o){this.log.error("ping error: %s",o)}},this.keepAliveInterval,{runImmediately:!0}),this.keepAlive.start())}onData(e){for(let t of this.decoder.emitFrames(e))this.handleFrame(t)}onCreateStream(){if(this.remoteGoAway!==void 0)throw new Br("Muxer closed remotely");if(this.localGoAway!==void 0)throw new Br("Muxer closed locally");let e=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.maxOutboundStreams)throw new hi("max outbound streams exceeded");this.log.trace("new outgoing stream id=%s",e);let t=this._newStream(e,Jt.Init,"outbound");return this.numOutboundStreams++,queueMicrotask(()=>{t.sendWindowUpdate()}),t}async ping(e){if(this.remoteGoAway!==void 0)throw new Br("Muxer closed remotely");if(this.localGoAway!==void 0)throw new Br("Muxer closed locally");if(this.activePing!=null)return Pe(this.activePing.promise,e?.signal);this.activePing=Object.assign(Promise.withResolvers(),{id:this.nextPingID++,start:Date.now()}),this.sendPing(this.activePing.id);try{this.rtt=await Pe(this.activePing.promise,e?.signal)}finally{this.activePing=void 0}return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.status==="open")try{let t=e?.reason??lt.NormalTermination;this.log.trace("muxer close reason=%s",lt[t]),await super.close(e),this.sendGoAway(t)}finally{this.keepAlive?.stop()}}abort(e){if(this.status==="open")try{super.abort(e);let t=lt.InternalError;pE(e)&&(t=e.reason),this.log.error("muxer abort reason=%s error=%s",t,e),this.sendGoAway(t)}finally{this.keepAlive?.stop()}}onTransportClosed(){try{super.onTransportClosed()}finally{this.keepAlive?.stop()}}_newStream(e,t,n){if(this.streams.find(s=>s.streamId===e)!=null)throw new A("Stream already exists with that id");let o=new lp({...this.streamOptions,id:`${e}`,streamId:e,state:t,direction:n,sendFrame:this.sendFrame.bind(this),log:this.log.newScope(`${n}:${e}`),getRTT:this.getRTT.bind(this)});return o.addEventListener("close",()=>{this.closeStream(e)},{once:!0}),o}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--}handleFrame(e){let{streamID:t,type:n,length:o}=e.header;if(this.log.trace("received frame %o",wE(e.header)),t===0)switch(n){case Qe.Ping:{this.handlePing(e.header);return}case Qe.GoAway:{this.handleGoAway(o);return}default:throw new Sr("Invalid frame type")}else switch(e.header.type){case Qe.Data:case Qe.WindowUpdate:{this.handleStreamMessage(e);return}default:throw new Sr("Invalid frame type")}}handlePing(e){if(e.flag===Ae.SYN)this.log.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,Ae.ACK);else if(e.flag===Ae.ACK)this.log.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new Sr("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new La("ping not requested");if(this.activePing.id!==e)throw new Da("ping doesn't match our id");this.activePing.resolve(Date.now()-this.activePing.start)}handleGoAway(e){this.log.trace("received GoAway reason=%s",lt[e]??"unknown"),this.remoteGoAway=e,e===lt.NormalTermination?this.onTransportClosed():this.abort(new Error("Remote sent GoAway"))}handleStreamMessage(e){let{streamID:t,flag:n,type:o}=e.header;(n&Ae.SYN)===Ae.SYN&&this.incomingStream(t);let s=this.streams.find(i=>i.streamId===t);if(s===void 0){this.log.trace("frame for missing stream id=%s",t);return}switch(o){case Qe.WindowUpdate:{s.handleWindowUpdate(e);return}case Qe.Data:{s.handleData(e);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new A("Both endpoints are clients");if(this.streams.find(n=>n.streamId===e))return;if(this.log.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:Qe.WindowUpdate,flag:Ae.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.maxInboundStreams){this.log("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:Qe.WindowUpdate,flag:Ae.RST,streamID:e,length:0});return}let t=this._newStream(e,Jt.SYNReceived,"inbound");this.numInboundStreams++,this.onRemoteStream(t)}sendFrame(e,t){let n;if(e.type===Qe.Data){if(t==null)throw new Sr("Invalid frame");n=new Q(v4(e),t)}else n=v4(e);return this.log.trace("sending frame %o",wE(e)),this.send(n)}sendPing(e,t=Ae.SYN){t===Ae.SYN?this.log.trace("sending ping request pingId=%s",e):this.log.trace("sending ping response pingId=%s",e),this.sendFrame({type:Qe.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=lt.NormalTermination){this.log("sending GoAway reason=%s",lt[e]),this.localGoAway=e,this.sendFrame({type:Qe.GoAway,flag:0,streamID:0,length:e})}};function EE(r={}){return()=>new up(r)}var xE="libp2p",vE="autonat",SE="1.0.0";var He;(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=()=>ze(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=()=>ze(o)})(n=r.ResponseStatus||(r.ResponseStatus={}));let s;(function(l){let d;l.codec=()=>(d==null&&(d=ne((u,f,h={})=>{if(h.lengthDelimited!==!1&&f.fork(),u.id!=null&&(f.uint32(10),f.bytes(u.id)),u.addrs!=null)for(let p of u.addrs)f.uint32(18),f.bytes(p);h.lengthDelimited!==!1&&f.ldelim()},(u,f,h={})=>{let p={addrs:[]},g=f==null?u.len:u.pos+f;for(;u.pos<g;){let m=u.uint32();switch(m>>>3){case 1:{p.id=u.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(u.bytes());break}default:{u.skipType(m&7);break}}}return p})),d),l.encode=u=>re(u,l.codec()),l.decode=(u,f)=>te(u,l.codec(),f)})(s=r.PeerInfo||(r.PeerInfo={}));let i;(function(l){let d;l.codec=()=>(d==null&&(d=ne((u,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),u.peer!=null&&(f.uint32(10),r.PeerInfo.codec().encode(u.peer,f)),h.lengthDelimited!==!1&&f.ldelim()},(u,f,h={})=>{let p={},g=f==null?u.len:u.pos+f;for(;u.pos<g;){let m=u.uint32();switch(m>>>3){case 1:{p.peer=r.PeerInfo.codec().decode(u,u.uint32(),{limits:h.limits?.peer});break}default:{u.skipType(m&7);break}}}return p})),d),l.encode=u=>re(u,l.codec()),l.decode=(u,f)=>te(u,l.codec(),f)})(i=r.Dial||(r.Dial={}));let a;(function(l){let d;l.codec=()=>(d==null&&(d=ne((u,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),u.status!=null&&(f.uint32(8),r.ResponseStatus.codec().encode(u.status,f)),u.statusText!=null&&(f.uint32(18),f.string(u.statusText)),u.addr!=null&&(f.uint32(26),f.bytes(u.addr)),h.lengthDelimited!==!1&&f.ldelim()},(u,f,h={})=>{let p={},g=f==null?u.len:u.pos+f;for(;u.pos<g;){let m=u.uint32();switch(m>>>3){case 1:{p.status=r.ResponseStatus.codec().decode(u);break}case 2:{p.statusText=u.string();break}case 3:{p.addr=u.bytes();break}default:{u.skipType(m&7);break}}}return p})),d),l.encode=u=>re(u,l.codec()),l.decode=(u,f)=>te(u,l.codec(),f)})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=ne((l,d,u={})=>{u.lengthDelimited!==!1&&d.fork(),l.type!=null&&(d.uint32(8),r.MessageType.codec().encode(l.type,d)),l.dial!=null&&(d.uint32(18),r.Dial.codec().encode(l.dial,d)),l.dialResponse!=null&&(d.uint32(26),r.DialResponse.codec().encode(l.dialResponse,d)),u.lengthDelimited!==!1&&d.ldelim()},(l,d,u={})=>{let f={},h=d==null?l.len:l.pos+d;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:u.limits?.dial});break}case 3:{f.dialResponse=r.DialResponse.codec().decode(l,l.uint32(),{limits:u.limits?.dialResponse});break}default:{l.skipType(p&7);break}}}return f})),c),r.encode=l=>re(l,r.codec()),r.decode=(l,d)=>te(l,r.codec(),d)})(He||(He={}));var lL=4,uL=8,dp=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??xE}/${vE}/${SE}`,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=st({name:"libp2p_autonat_dial_results",metrics:e.metrics}),this.findPeers=ra(this.findRandomPeers.bind(this),6e4),this.addressFilter=xt(1024)}[Symbol.toStringTag]="@libp2p/autonat";[me]=["@libp2p/autonat"];get[ur](){return["@libp2p/identify"]}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,(e,t)=>{this.handleIncomingAutonatStream(e,t).catch(n=>{this.log.error("error handling incoming autonat stream - %e",n)})},{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=le([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,t){let n=AbortSignal.timeout(this.timeout);try{let o=Fe(e,{maxDataLength:this.maxMessageSize}).pb(He),s=await o.read({signal:n}),i=await this.handleAutonatMessage(s,t,{signal:n});await o.write(i,{signal:n}),await e.close({signal:n})}catch(o){this.log.error("error handling incoming autonat stream - %e",o),e.abort(o)}}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(u=>oe(u).host),s=e.dial;if(s==null)return this.log.error("dial was missing from message"),{type:He.MessageType.DIAL_RESPONSE,dialResponse:{status:He.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}};let i,a=s.peer;if(a?.id==null)return this.log.error("peerId missing from message"),{type:He.MessageType.DIAL_RESPONSE,dialResponse:{status:He.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let u=Re(a.id);i=Je(u)}catch(u){return this.log.error("invalid PeerId - %e",u),{type:He.MessageType.DIAL_RESPONSE,dialResponse:{status:He.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}}}if(this.log("incoming request from %p",i),!t.remotePeer.equals(i))return this.log("target peer %p did not equal sending peer %p",i,t.remotePeer),{type:He.MessageType.DIAL_RESPONSE,dialResponse:{status:He.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(u=>q(u)).filter(u=>{try{let f=oe(u);return Ze(u)?!1:f.host!==oe(t.remoteAddr).host?(this.log.trace("not dialing %a - target host did not match remote host %a",u,t.remoteAddr),!1):o.includes(f.host)?!1:this.components.transportManager.dialTransportForMultiaddr(u)==null?(this.log.trace("not dialing %a - transport unsupported",u),!1):!0}catch{return!1}}).map(u=>(u.getComponents().find(f=>f.code===421)?.value==null&&(u=u.encapsulate(`/p2p/${i.toString()}`)),u));if(c.length===0)return this.log("refused to dial all multiaddrs for %p from message",i),{type:He.MessageType.DIAL_RESPONSE,dialResponse:{status:He.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}};this.log("dial multiaddrs %s for peer %p",c.map(u=>u.toString()).join(", "),i);let l="",d=c[0];for(let u of c){let f;d=u;try{if(f=await this.components.connectionManager.openConnection(u,n),!f.remoteAddr.equals(u))throw this.log.error("tried to dial %a but dialed %a",u,f.remoteAddr),new Error("Unexpected remote address");return this.log("successfully dialed %p via %a",i,u),{type:He.MessageType.DIAL_RESPONSE,dialResponse:{status:He.ResponseStatus.OK,addr:f.remoteAddr.decapsulateCode(421).bytes}}}catch(h){this.log.error("could not dial %p - %e",i,h),l=h.message}finally{f!=null&&await f.close()}}return{type:He.MessageType.DIAL_RESPONSE,dialResponse:{status:He.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:d.bytes}}}getFirstUnverifiedMultiaddr(e,t){let n=this.components.addressManager.getAddressesWithMetadata().sort((o,s)=>o.type==="observed"&&s.type!=="observed"?1:s.type==="observed"&&o.type!=="observed"?-1:0).filter(o=>!(!(o.expires<Date.now())||oe(o.multiaddr).type==="ip6"&&(!t||!ld(o.multiaddr))||Ze(o.multiaddr)));for(let o of n){let s=o.multiaddr.toString(),i=this.dialResults.get(s);if(i!=null){if(i.networkSegments.includes(e)){this.log.trace("%a already has a network segment result from %s",i.multiaddr,e);continue}if(i.queue.size>10){this.log.trace("%a already has enough peers queued",i.multiaddr);continue}}if(i==null){let a=o.expires<Date.now();if(a&&this.addressFilter.remove?.(s),this.addressFilter.has(s))continue;this.addressFilter.add(s),this.log.trace("creating dial result %s %s",a?"to revalidate":"for",s),i={multiaddr:o.multiaddr,success:0,failure:0,networkSegments:[],verifyingPeers:X3(),queue:new It({concurrency:3,maxSize:50}),type:o.type,lastVerified:o.lastVerified},this.dialResults.set(s,i)}return i}}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:i})=>oe(i).type==="ip6"),o=this.getNetworkSegment(e.remoteAddr),s=this.getFirstUnverifiedMultiaddr(o,n);if(s==null){this.log.trace("no unverified public addresses found for peer %p to verify, not requesting verification",e.remotePeer);return}if(!this.hasConnectionCapacity()){s.lastVerified!=null?(this.log("automatically re-verifying %a because we are too close to the connection limit",s.multiaddr),this.confirmAddress(s)):this.log("skipping verifying %a because we are too close to the connection limit",s.multiaddr);return}s.queue.add(async i=>{await this.askPeerToVerify(e,o,i)},{peerId:e.remotePeer,multiaddr:s.multiaddr}).catch(i=>{s?.result==null&&this.log.error("error from %p verifying address %a - %e",e.remotePeer,s?.multiaddr,i)})}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 s=AbortSignal.timeout(this.timeout);this.log.trace("asking %a to verify multiaddr %s",e.remoteAddr,n.multiaddr);let i=await e.newStream(this.protocol,{signal:s});try{let a=Fe(i).pb(He),[,c]=await Promise.all([a.write({type:He.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:s}),a.read({signal:s})]);if(c.type!==He.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!==He.ResponseStatus.OK&&l!==He.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===He.ResponseStatus.OK){if(o.success++,o.type!=="observed"){this.confirmAddress(o);return}}else l===He.ResponseStatus.E_DIAL_ERROR&&o.failure++;this.log("%a success %d failure %d",o.multiaddr,o.success,o.failure),o.success===lL&&this.confirmAddress(o),o.failure===uL&&this.unconfirmAddress(o)}finally{try{await i.close({signal:s})}catch(a){i.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=oe(e);switch(t.type){case"ip4":return t.host.split(".")[0].padStart(3,"0");case"ip6":return t.host.split(":")[0].padStart(4,"0");default:throw new A(`Remote address ${e} was not an IPv4 or Ipv6 address`)}}};function AE(r={}){return e=>new dp(e,r)}var dL="bootstrap",fL=50,hL=1e3,A4=class extends ie{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??hL,this.list=t.list.map(n=>q(n)).filter(n=>fa.matches(n)?n.getComponents().findLast(s=>s.code===421)?.value==null?(this.log.error("invalid bootstrap multiaddr without peer id"),!1):!0:(this.log.error("invalid multiaddr %a",n),!1)).map(n=>({id:Me(n.getComponents().findLast(o=>o.code===421)?.value??""),multiaddrs:[n]})),this._init=t}[as]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[me]=["@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("failed to discover bootstrap peers - %e",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??dL]:{value:this._init.tagValue??fL,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",e.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function TE(r){return e=>new A4(e,r)}var T4=1e3,IE=60*T4;var Uce=120*IE,_E=1,fp=5e3,CE=100;var Yl=`${cs}-circuit-relay`,Fce=2*IE,$ce=BigInt(1<<17),oi="/libp2p/circuit/relay/0.2.0/hop",I4="/libp2p/circuit/relay/0.2.0/stop",Kce=30*T4,Vce=30*T4,_4=300,kE=4096,RE=.001;var Go;(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=()=>ze(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.peer!=null&&(s.uint32(18),Oa.codec().encode(o.peer,s)),o.reservation!=null&&(s.uint32(26),hp.codec().encode(o.reservation,s)),o.limit!=null&&(s.uint32(34),Ba.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(40),Rt.codec().encode(o.status,s)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={},c=s==null?o.len:o.pos+s;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=Oa.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.reservation=hp.codec().decode(o,o.uint32(),{limits:i.limits?.reservation});break}case 4:{a.limit=Ba.codec().decode(o,o.uint32(),{limits:i.limits?.limit});break}case 5:{a.status=Rt.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(Go||(Go={}));var _n;(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=()=>ze(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.peer!=null&&(s.uint32(18),Oa.codec().encode(o.peer,s)),o.limit!=null&&(s.uint32(26),Ba.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(32),Rt.codec().encode(o.status,s)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={},c=s==null?o.len:o.pos+s;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=Oa.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.limit=Ba.codec().decode(o,o.uint32(),{limits:i.limits?.limit});break}case 4:{a.status=Rt.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(_n||(_n={}));var Oa;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s of t.addrs)n.uint32(18),n.bytes(s);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={id:ae(0),addrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.id=t.bytes();break}case 2:{if(o.limits?.addrs!=null&&s.addrs.length===o.limits.addrs)throw new Oe('Decode error - map field "addrs" had too many elements');s.addrs.push(t.bytes());break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Oa||(Oa={}));var hp;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s of t.addrs)n.uint32(18),n.bytes(s);t.voucher!=null&&(n.uint32(26),mp.codec().encode(t.voucher,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={expire:0n,addrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.expire=t.uint64();break}case 2:{if(o.limits?.addrs!=null&&s.addrs.length===o.limits.addrs)throw new Oe('Decode error - map field "addrs" had too many elements');s.addrs.push(t.bytes());break}case 3:{s.voucher=mp.codec().decode(t,t.uint32(),{limits:o.limits?.voucher});break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(hp||(hp={}));var Ba;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.duration=t.uint32();break}case 2:{s.data=t.uint64();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ba||(Ba={}));var Rt;(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"})(Rt||(Rt={}));var C4;(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"})(C4||(C4={}));(function(r){r.codec=()=>ze(C4)})(Rt||(Rt={}));var pp;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={relay:ae(0),peer:ae(0),expiration:0n},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.relay=t.bytes();break}case 2:{s.peer=t.bytes();break}case 3:{s.expiration=t.uint64();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(pp||(pp={}));var mp;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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),pp.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 s={publicKey:ae(0),payloadType:ae(0),signature:ae(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.publicKey=t.bytes();break}case 2:{s.payloadType=t.bytes();break}case 3:{s.payload=pp.codec().decode(t,t.uint32(),{limits:o.limits?.payload});break}case 5:{s.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(mp||(mp={}));var Xl=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},gp=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},yp=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function k4(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var Ql=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}},wp=ke(Se(fa.matchers[0],Ce(290))),bp=ke(Ce(290));var Ep=class extends ie{components;started;running;topologyId;log;discoveryController;filter;queue;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.components=e,this.started=!1,this.running=!1,this.filter=t.filter,this.discoveryController=new AbortController,this.discoveryController.signal,this.dialPeer=this.dialPeer.bind(this),this.onPeer=this.onPeer.bind(this)}isStarted(){return this.started}async start(){this.topologyId=await this.components.registrar.register(oi,{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.components.registrar.unregister(this.topologyId),this.running&&this.stopDiscovery(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,this.discoveryController.signal,this.components.events.addEventListener("peer:discovery",this.onPeer),Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.components.peerStore.all({filters:[n=>n.protocols.includes(oi)],orders:[()=>Math.random()<.5?1:-1,(n,o)=>{let s=PE(n),i=PE(o);return s>i?-1:i>s?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 It({concurrency:5});this.log("start random walk");for await(let n of this.components.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.components.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.components.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(this.dialPeer,{peerId:n.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to random peer %p - %e",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",e)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort(),this.queue?.clear(),this.components.events.removeEventListener("peer:discovery",this.onPeer)}onPeer(e){this.log.trace("maybe dialing discovered peer %p",e.detail.id),this.maybeDialPeer(e).catch(t=>{this.log.trace("error dialing discovered peer %p - %e",e.detail.id,t)})}async maybeDialPeer(e){if(this.queue==null)return;let t=e.detail.id,n=e.detail.multiaddrs;if(this.queue.has(t)){this.log.trace("random peer %p was already in queue",t);return}if(this.components.connectionManager.getConnections(t)?.length>0){this.log.trace("random peer %p was already connected",t);return}if(!await this.components.connectionManager.isDialable(n)){this.log.trace("random peer %p was not dialable",t);return}this.queue?.add(this.dialPeer,{peerId:e.detail.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to discovered peer %p - %e",e.detail.id,o)})}async dialPeer({peerId:e,signal:t}){let n=le([AbortSignal.timeout(5e3),t]);try{await this.components.connectionManager.openConnection(e,{signal:n})}finally{n.clear()}}};function PE(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(P(e)).getTime()}var R4=class extends ie{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??fp,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(bp.exactMatch(e))this.log("searching for circuit relay servers"),this.reservationId=this.reservationStore.reserveRelay();else if(wp.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 s=await this.reservationStore.addRelay(o.remotePeer,"configured");this.addedRelay(s)}}else throw new is(`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=>q(t).encapsulate("/p2p-circuit")),this.listeningAddrs.forEach(t=>{this.addressManager.confirmObservedAddr(t,{type:"transport"})}),queueMicrotask(()=>{this.safeDispatchEvent("listening")})}};function LE(r){return new R4(r)}var DE="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var NE=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=DE[t[r]&63];return e};var pL=60*1e3*10,mL=60*1e3*5,gL=30*1e3,xp=class extends ie{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 Ft,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??CE,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??fp,this.started=!1,this.relayFilter=xt(100),this.reserveQueue=new It({concurrency:t?.reservationConcurrency??_E,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("connection:close",n=>{[...this.reservations.values()].find(s=>s.connection===n.detail.id)!=null&&this.#t(n.detail.remotePeer).catch(s=>{this.log("could not remove relay %p - %e",n.detail,s)})})}isStarted(){return this.started}start(){this.started=!0}afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(Yl)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[Yl]: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("failed to clean up and redial old relays during afterStart - %e",e)})}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}reserveRelay(){let e=NE();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 is("Cannot use self as relay");if(this.reserveQueue.size>this.maxReservationQueueLength)throw new yp("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 is("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 s=this.reservations.get(e);if(s!=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(s.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),g=!0),g&&k4(s.reservation.expire)>pL)return this.log("already have relay reservation with %p but we are still connected and it does not expire soon",e),{relay:e,details:s};await this.#t(e)}if(t==="discovered"&&this.pendingReservations.length===0)throw new Xl("Not making reservation on discovered relay because we do not need any more relays");let i=AbortSignal.timeout(this.reservationCompletionTimeout);let a=await this.connectionManager.openConnection(e,{signal:i});if(wt.matches(a.remoteAddr))throw new gp("not creating reservation over relayed connection");let c=await this.#e(a,{signal:i}),l=k4(c.expire);this.log("created reservation on relay peer %p, expiry date is %s",e,new Date(Date.now()+l).toString());let d=Math.min(Math.max(l-mL,gL),Math.pow(2,31)-1),u=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)})},d),f;if(t==="discovered"){let p=this.pendingReservations.pop();if(p==null)throw new Xl("Made reservation on relay but did not need any more discovered relays");f={timeout:u,reservation:c,type:t,connection:a.id,id:p}}else f={timeout:u,reservation:c,type:t,connection:a.id};this.reservations.set(e,f),await this.peerStore.merge(e,{tags:{[Yl]:{value:1,ttl:l}}}),this.#r();let h={relay:e,details:f};return this.safeDispatchEvent("relay:created-reservation",{detail:h}),h}catch(s){throw t==="discovered"&&s.name==="HadEnoughRelaysError"||this.log.error("could not reserve slot on %p after %dms - %e",e,Date.now()-o,s),(s.name==="DialError"||s.name==="UnsupportedProtocolError")&&this.relayFilter.add(e.toMultihash().bytes),this.#t(e).catch(i=>{this.log.error("could not remove reservation on %p after reserving slot failed - %e",e,i)}),s}},{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(oi,t),s=Fe(n).pb(Go);this.log.trace("send RESERVE to %p",e.remotePeer),await s.write({type:Go.Type.RESERVE},t);let i;try{this.log.trace("reading response from %p",e.remotePeer),i=await s.read(t)}catch(c){throw n.abort(c),c}finally{n.status!=="closed"&&await n.close(t)}if(this.log.trace("read response %s",i.status),i.status===Rt.OK&&i.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of i.reservation.addrs){let d=q(l);d.getComponents().find(u=>u.code===421)==null&&(d=d.encapsulate(`/p2p/${e.remotePeer}`)),d=q(d.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(d.toString())}return i.reservation.addrs=[...c].map(l=>q(l).bytes),i.reservation}let a=`reservation failed with status ${i.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:{[Yl]: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=xt(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var P4=class extends Do{stream;init;constructor(e){super({...e,direction:e.stream.direction}),this.init=e,this.stream=e.stream,this.stream.addEventListener("close",t=>{this.onTransportClosed(t.error)}),this.stream.addEventListener("remoteCloseWrite",t=>{this.onRemoteCloseWrite(),this.close().catch(n=>{this.abort(n)})}),this.stream.addEventListener("message",t=>{e.onDataRead?.(t.data),this.onData(t.data)}),this.stream.addEventListener("drain",()=>{this.safeDispatchEvent("drain")})}sendData(e){return this.init.onDataWrite?.(e),{sentBytes:e.byteLength,canSendMore:this.stream.send(e)}}async sendClose(e){await this.stream.close(e)}sendReset(){this.stream.abort(new Error("An error occurred"))}sendPause(){this.stream.pause()}sendResume(){this.stream.resume()}};function L4(r){return new P4(r)}var yL=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(q)}catch{return!1}return!0},OE={maxInboundStopStreams:_4,maxOutboundStopStreams:_4,stopTimeout:3e4},vp=class{components;discovery;reservationStore;maxInboundStopStreams;maxOutboundStopStreams;started;log;shutdownController;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.maxInboundStopStreams=t.maxInboundStopStreams??OE.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??OE.maxOutboundStopStreams,this.shutdownController=new AbortController,this.discovery=new Ep(e,{filter:t.discoveryFilter??Q3(kE,RE)}),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 - %e",n.detail,o)})}),this.reservationStore=new xp(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,this.onStop=this.onStop.bind(this)}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[me]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[ur](){return this.discovery!=null?["@libp2p/identify"]:[]}[Eo]=!0;isStarted(){return this.started}async start(){this.shutdownController=new AbortController,this.shutdownController.signal,await this.components.registrar.handle(I4,this.onStop,{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await ct(this.discovery,this.reservationStore),this.started=!0}async stop(){this.shutdownController.abort(),await ut(this.discovery,this.reservationStore),await this.components.registrar.unhandle(I4),this.started=!1}async dial(e,t){let n=e.toString().split("/p2p-circuit"),o=q(n[0]),s=q(n[n.length-1]),i=o.getComponents().find(h=>h.code===421)?.value,a=s.getComponents().find(h=>h.code===421)?.value;if(i==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 wo(`C${h}`)}let c=Me(i),l=Me(a),u=this.components.connectionManager.getConnections(c)[0];u==null?(await this.components.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new H("circuit-relay:open-connection")),u=await this.components.connectionManager.openConnection(c,t)):t.onProgress?.(new H("circuit-relay:reuse-connection"));let f;try{t.onProgress?.(new H("circuit-relay:open-hop-stream")),f=await u.newStream(oi,t);let h=Fe(f).pb(Go);t.onProgress?.(new H("circuit-relay:write-connect-message")),await h.write({type:Go.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[q(s).bytes]}},t),t.onProgress?.(new H("circuit-relay:read-connect-response"));let p=await h.read(t);if(p.status!==Rt.OK)throw new de(`failed to connect via relay with status ${p?.status?.toString()??"undefined"}`);let g=new Ql(p.limit),m=L4({stream:h.unwrap().unwrap(),remoteAddr:e,localAddr:o.encapsulate(`/p2p-circuit/p2p/${this.components.peerId.toString()}`),onDataRead:g.onData,onDataWrite:g.onData,log:f.log.newScope("circuit-relay:connection")}),w=await this.components.upgrader.upgradeOutbound(m,{...t,limits:g.getLimits()});return w.log("outbound relayed connection established to %p with limits %o, over connection %s",w.remotePeer,p.limit??"none",u.id),w}catch(h){throw this.log.error("circuit relay dial to destination %p via relay %p failed - %e",l,c,h),f?.abort(h),h}}createListener(e){return LE({peerId:this.components.peerId,connectionManager:this.components.connectionManager,addressManager:this.components.addressManager,reservationStore:this.reservationStore,logger:this.components.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>wp.exactMatch(t)||bp.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>wt.exactMatch(t))}async onStop(e,t){let n=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);try{if(!this.reservationStore.hasReservation(t.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.components.transportManager.listen([t.remoteAddr.encapsulate("/p2p-circuit")])}catch(u){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on - %e",u)}let o=Fe(e).pb(_n),s=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",t.remotePeer,s.type),s?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",t.remotePeer),await o.write({type:_n.Type.STATUS,status:Rt.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(s.type!==_n.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await o.write({type:_n.Type.STATUS,status:Rt.UNEXPECTED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(!yL(s)){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await o.write({type:_n.Type.STATUS,status:Rt.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}let i=Je(Re(s.peer.id));if(await this.components.connectionGater.denyInboundRelayedConnection?.(t.remotePeer,i)===!0){this.log.error("connection gater denied inbound relayed connection from %p",t.remotePeer),await o.write({type:_n.Type.STATUS,status:Rt.PERMISSION_DENIED},{signal:n}),await e.close({signal:n});return}this.log.trace("sending success response to %p",t.remotePeer),await o.write({type:_n.Type.STATUS,status:Rt.OK},{signal:n});let a=new Ql(s.limit),c=t.remoteAddr.encapsulate(`/p2p-circuit/p2p/${i.toString()}`),l=this.components.addressManager.getAddresses()[0],d=L4({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,onDataRead:a.onData,onDataWrite:a.onData,log:e.log.newScope("circuit-relay:connection")});await this.components.upgrader.upgradeInbound(d,{limits:a.getLimits(),signal:n}),d.log("inbound relayed connection established to %p with limits %o, over connection %s",i,s.limit??"none",t.id)}finally{n?.clear()}}};function BE(r={}){return e=>new vp(e,r)}var nn;(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=()=>ze(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{if(i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.observedAddresses!=null)for(let a of o.observedAddresses)s.uint32(18),s.bytes(a);i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={observedAddresses:[]},c=s==null?o.len:o.pos+s;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{if(i.limits?.observedAddresses!=null&&a.observedAddresses.length===i.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=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(nn||(nn={}));function D4(r,e){return wt.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:Gf.matches(r)?!0:D9.matches(r)?!Ze(r):!1}var ME=1024*4,UE=100,Sp={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},Ap=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??Sp.timeout,this.retries=t.retries??Sp.retries,this.maxInboundStreams=t.maxInboundStreams??Sp.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Sp.maxOutboundStreams,this.handleIncomingUpgrade=this.handleIncomingUpgrade.bind(this)}[Symbol.toStringTag]="@libp2p/dcutr";[ur]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(jl,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{wt.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt - %e",n)})}}),await this.registrar.handle(jl,this.handleIncomingUpgrade,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(jl),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([jl],{signal:o.signal,runOnLimitedConnection:!0});let s=Fe(t,{maxDataLength:ME}).pb(nn);this.log("B sending connect to %p",e.remotePeer);let i=Date.now();await s.write({type:nn.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(u=>u.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await s.read(o);if(a.type!==nn.Type.CONNECT)throw this.log("A sent wrong message type"),new de("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 de("DCUtR connect message had no multiaddrs");let l=Date.now()-i;this.log("A sending sync, rtt %dms",l),await s.write({type:nn.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await Oy(l/2),this.log("B dialing",c);let d=await this.connectionManager.openConnection(c,{signal:o.signal,priority:UE,force:!0,initiator:!1});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,d.remoteAddr),await e.close(o);break}catch(s){if(this.log.error("error while attempting DCUtR on attempt %d of %d - %e",n+1,this.retries,s),t?.abort(s),n===this.retries)throw s}finally{t!=null&&await t.close(o)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(o=>{let s=o.multiaddr;return s.getComponents().find(i=>i.code===421)?.value==null?s.encapsulate(`/p2p/${e.remotePeer}`):s}).filter(o=>D4(o,this.transportManager));if(n.length>0){let o=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let s=await this.connectionManager.openConnection(n,{signal:o,force:!0});if(wt.exactMatch(s.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,s.remoteAddr),await e.close({signal:o}),!0}catch(s){this.log.error("unilateral connection upgrade to %p on addresses %a failed - %e",e.remotePeer,n,s)}}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)},o=Fe(e,{maxDataLength:ME}).pb(nn);this.log("A receiving connect");let s=await o.read(n);if(s.type!==nn.Type.CONNECT)throw this.log("B sent wrong message type"),new de("DCUtR message type was incorrect");if(s.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new de("DCUtR connect message had no multiaddrs");let i=this.getDialableMultiaddrs(s.observedAddresses);if(i.length===0)throw this.log("B had no dialable multiaddrs in %o",s.observedAddresses.map(l=>q(l))),new de("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await o.write({type:nn.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==nn.Type.SYNC)throw new de("DCUtR message type was incorrect");this.log("A dialing",i);let c=await this.connectionManager.openConnection(i,{signal:n.signal,priority:UE,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n),await e.close(n)}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let o=q(n);if(!D4(o,this.transportManager))continue;t.push(o)}catch{}return t}};var jl="/libp2p/dcutr";function FE(r={}){return e=>new Ap(e,r)}function X(r){if(r!==void 0&&r!==X.REQUEST&&r!==X.RESPONSE)throw new Error("type must be REQUEST or RESPONSE");r===void 0||this.initialize(r),this.maxHeaderSize=X.maxHeaderSize}X.prototype.initialize=function(r,e){if(r!==X.REQUEST&&r!==X.RESPONSE)throw new Error("type must be REQUEST or RESPONSE");this.type=r,this.state=r+"_LINE",this.info={headers:[],upgrade:!1},this.trailers=[],this.line="",this.isChunked=!1,this.connection="",this.headerSize=0,this.body_bytes=null,this.isUserCall=!1,this.hadError=!1};X.encoding="ascii";X.maxHeaderSize=80*1024;X.REQUEST="REQUEST";X.RESPONSE="RESPONSE";var $E=X.kOnHeaders=1,N4=X.kOnHeadersComplete=2,Tp=X.kOnBody=3,O4=X.kOnMessageComplete=4;X.prototype[$E]=X.prototype[N4]=X.prototype[Tp]=X.prototype[O4]=function(){};var KE=!0;Object.defineProperty(X,"kOnExecute",{get:function(){return KE=!1,99}});var VE=X.methods=["DELETE","GET","HEAD","POST","PUT","CONNECT","OPTIONS","TRACE","COPY","LOCK","MKCOL","MOVE","PROPFIND","PROPPATCH","SEARCH","UNLOCK","BIND","REBIND","UNBIND","ACL","REPORT","MKACTIVITY","CHECKOUT","MERGE","M-SEARCH","NOTIFY","SUBSCRIBE","UNSUBSCRIBE","PATCH","PURGE","MKCALENDAR","LINK","UNLINK","SOURCE"],HE=VE.indexOf("CONNECT");X.prototype.reinitialize=X;X.prototype.close=X.prototype.pause=X.prototype.resume=X.prototype.remove=X.prototype.free=function(){};X.prototype._compatMode0_11=!1;X.prototype.getAsyncId=function(){return 0};var wL={REQUEST_LINE:!0,RESPONSE_LINE:!0,HEADER:!0};X.prototype.execute=function(r,e,t){if(!(this instanceof X))throw new TypeError("not a HTTPParser");e=e||0,t=typeof t=="number"?t:r.length,this.chunk=r,this.offset=e;var n=this.end=e+t;try{for(;this.offset<n&&!this[this.state](););}catch(o){if(this.isUserCall)throw o;return this.hadError=!0,o}return this.chunk=null,t=this.offset-e,wL[this.state]&&(this.headerSize+=t,this.headerSize>(this.maxHeaderSize||X.maxHeaderSize))?new Error("max header size exceeded"):t};var bL={REQUEST_LINE:!0,RESPONSE_LINE:!0,BODY_RAW:!0};X.prototype.finish=function(){if(!this.hadError){if(!bL[this.state])return new Error("invalid state for EOF");this.state==="BODY_RAW"&&this.userCall()(this[O4]())}};X.prototype.consume=X.prototype.unconsume=X.prototype.getCurrentBuffer=function(){};X.prototype.userCall=function(){this.isUserCall=!0;var r=this;return function(e){return r.isUserCall=!1,e}};X.prototype.nextRequest=function(){this.userCall()(this[O4]()),this.reinitialize(this.type)};X.prototype.consumeLine=function(){for(var r=this.end,e=this.chunk,t=this.offset;t<r;t++)if(e[t]===10){var n=this.line+P(e.subarray(this.offset,t),X.encoding);return n.charAt(n.length-1)==="\r"&&(n=n.substr(0,n.length-1)),this.line="",this.offset=t+1,n}this.line+=P(e.subarray(this.offset,this.end),X.encoding),this.offset=this.end};var EL=/^([^: \t]+):[ \t]*((?:.*[^ \t])|)/,xL=/^[ \t]+(.*[^ \t])/;X.prototype.parseHeader=function(r,e){if(r.indexOf("\r")!==-1)throw Ip("HPE_LF_EXPECTED");var t=EL.exec(r),n=t&&t[1];if(n)e.push(n),e.push(t[2]);else{var o=xL.exec(r);o&&e.length&&(e[e.length-1]&&(e[e.length-1]+=" "),e[e.length-1]+=o[1])}};var vL=/^([A-Z-]+) ([^ ]+) HTTP\/(\d)\.(\d)$/;X.prototype.REQUEST_LINE=function(){var r=this.consumeLine();if(r){var e=vL.exec(r);if(e===null)throw Ip("HPE_INVALID_CONSTANT");if(this.info.method=this._compatMode0_11?e[1]:VE.indexOf(e[1]),this.info.method===-1)throw new Error("invalid request method");this.info.url=e[2],this.info.versionMajor=+e[3],this.info.versionMinor=+e[4],this.body_bytes=0,this.state="HEADER"}};var SL=/^HTTP\/(\d)\.(\d) (\d{3}) ?(.*)$/;X.prototype.RESPONSE_LINE=function(){var r=this.consumeLine();if(r){var e=SL.exec(r);if(e===null)throw Ip("HPE_INVALID_CONSTANT");this.info.versionMajor=+e[1],this.info.versionMinor=+e[2];var t=this.info.statusCode=+e[3];this.info.statusMessage=e[4],((t/100|0)===1||t===204||t===304)&&(this.body_bytes=0),this.state="HEADER"}};X.prototype.shouldKeepAlive=function(){if(this.info.versionMajor>0&&this.info.versionMinor>0){if(this.connection.indexOf("close")!==-1)return!1}else if(this.connection.indexOf("keep-alive")===-1)return!1;return!!(this.body_bytes!==null||this.isChunked)};X.prototype.HEADER=function(){var r=this.consumeLine();if(r!==void 0){var e=this.info;if(r)this.parseHeader(r,e.headers);else{for(var t=e.headers,n=!1,o,s=!1,i=0;i<t.length;i+=2)switch(t[i].toLowerCase()){case"transfer-encoding":this.isChunked=t[i+1].toLowerCase()==="chunked";break;case"content-length":if(o=+t[i+1],n){if(o!==this.body_bytes)throw Ip("HPE_UNEXPECTED_CONTENT_LENGTH")}else n=!0,this.body_bytes=o;break;case"connection":this.connection+=t[i+1].toLowerCase();break;case"upgrade":s=!0;break}this.isChunked&&n&&(n=!1,this.body_bytes=null),s&&this.connection.indexOf("upgrade")!=-1?e.upgrade=this.type===X.REQUEST||e.statusCode===101:e.upgrade=e.method===HE,this.isChunked&&e.upgrade&&(this.isChunked=!1),e.shouldKeepAlive=this.shouldKeepAlive();var a;if(KE?a=this.userCall()(this[N4](e)):a=this.userCall()(this[N4](e.versionMajor,e.versionMinor,e.headers,e.method,e.url,e.statusCode,e.statusMessage,e.upgrade,e.shouldKeepAlive)),a===2)return this.nextRequest(),!0;if(this.isChunked&&!a)this.state="BODY_CHUNKHEAD";else{if(a||this.body_bytes===0)return this.nextRequest(),e.upgrade;this.body_bytes===null?this.state="BODY_RAW":this.state="BODY_SIZED"}}}};X.prototype.BODY_CHUNKHEAD=function(){var r=this.consumeLine();r!==void 0&&(this.body_bytes=parseInt(r,16),this.body_bytes?this.state="BODY_CHUNK":this.state="BODY_CHUNKTRAILERS")};X.prototype.BODY_CHUNK=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[Tp](this.chunk.slice(this.offset,this.offset+r),0,r)),this.offset+=r,this.body_bytes-=r,this.body_bytes||(this.state="BODY_CHUNKEMPTYLINE")};X.prototype.BODY_CHUNKEMPTYLINE=function(){var r=this.consumeLine();if(r!==void 0){if(r!=="")throw new Error("Expected empty line");this.state="BODY_CHUNKHEAD"}};X.prototype.BODY_CHUNKTRAILERS=function(){var r=this.consumeLine();r!==void 0&&(r?this.parseHeader(r,this.trailers):(this.trailers.length&&this.userCall()(this[$E](this.trailers,"")),this.nextRequest()))};X.prototype.BODY_RAW=function(){this.userCall()(this[Tp](this.chunk.slice(this.offset,this.end),0,this.end-this.offset)),this.offset=this.end};X.prototype.BODY_SIZED=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[Tp](this.chunk.slice(this.offset,this.offset+r),0,r)),this.offset+=r,this.body_bytes-=r,this.body_bytes||this.nextRequest()};["Headers","HeadersComplete","Body","MessageComplete"].forEach(function(r){var e=X["kOn"+r];Object.defineProperty(X.prototype,"on"+r,{get:function(){return this[e]},set:function(t){return this._compatMode0_11=!0,HE="CONNECT",this[e]=t}})});function Ip(r){var e=new Error("Parse Error");return e.code=r,e}function qE(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")}function B4(r,e={}){let t=qE(r),n={_cancelled:!1,async start(){this._cancelled=!1},async pull(o){try{let{value:s,done:i}=await t.next();if(this._cancelled)return;if(i===!0){o.close();return}o.enqueue(s)}catch(s){o.error(s)}},cancel(){this._cancelled=!0}};return new globalThis.ReadableStream(n,e)}var AL=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),WE=rc({name:"sha-1",code:17,encode:AL("SHA-1")});var _p=class extends globalThis.Request{constructor(e,t={}){let n=t.method??"GET",o=Cn(t),s=t.body;Cp(n,o)&&(t.method="UPGRADE"),super(e,t),Object.defineProperties(this,{body:{value:s,writable:!1},method:{value:n,writable:!1},headers:{value:o,writable:!1}})}};var zE={100:"Continue",101:"Switching Protocols",102:"Processing",103:"Early Hints",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",208:"Already Reported",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",308:"Permanent Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Payload Too Large",414:"URI Too Long",415:"Unsupported Media Type",416:"Range Not Satisfiable",417:"Expectation Failed",418:"I'm a Teapot",421:"Misdirected Request",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",425:"Too Early",426:"Upgrade Required",428:"Precondition Required",429:"Too Many Requests",431:"Request Header Fields Too Large",451:"Unavailable For Legal Reasons",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",508:"Loop Detected",509:"Bandwidth Limit Exceeded",510:"Not Extended",511:"Network Authentication Required"};var kn=class extends globalThis.Response{constructor(e,t={}){let n=Cn(t),o=t.status??200;(o<200||o>599)&&(t.status=200),super(e,t),Object.defineProperties(this,{status:{value:o,writable:!1},statusText:{value:zE[o],writable:!1},headers:{value:n,writable:!1}})}};var TL=["dns","dns4","dns6","dnsaddr"];function Jl(r,e){if(r instanceof URL)return r;let t=Rp(r,e),{httpPath:n}=Pp(r);return new URL(`http://${t}${n}`)}function eu(r){return r instanceof Uint8Array?r:r instanceof DataView?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):new Uint8Array(r,0,r.byteLength)}function YE(r,e){let t={method:r.method,headers:r.headers};if((t.method!=="GET"||r.upgrade)&&t.method!=="HEAD"){let n=e;r.upgrade||(n=_L(e,r.headers.get("content-length"))),t.body=B4(n),t.duplex="half"}return new _p(M4(r).toString(),t)}async function XE(r,e){if(e.send(C([`HTTP/1.1 ${r.status} ${r.statusText}`,...kp(r.headers),"",""].join(`\r
52
- `))),r.body==null){await e.close().catch(n=>{e.abort(n)});return}let t=r.body.getReader();for(;;){let n=await t.read();if(n.value!=null&&(e.send(n.value)||await e.onDrain()),n.done)break}await e.close().catch(n=>{e.abort(n)})}var QE=C(["HTTP/1.1 404 Not Found","Connection: close","",""].join(`\r
53
- `)),IL=C(["HTTP/1.1 400 Bad Request","Connection: close","",""].join(`\r
54
- `)),Fue=C(["HTTP/1.1 500 Internal Server Error","Connection: close","",""].join(`\r
55
- `)),$ue=C(["HTTP/1.1 501 Not Implemented","Connection: close","",""].join(`\r
56
- `));function kp(r){let e=[];r.get("Connection")==null&&r.set("Connection","close");for(let[t,n]of r.entries())e.push(`${t}: ${n}`);return e}async function*_L(r,e){if(e=parseInt(`${e??""}`),e==null||isNaN(e))return r;let t=0;for await(let n of r){if(t+=n.byteLength,t>e){yield n.subarray(0,t-e);return}if(yield n.subarray(),t===e)return}}function Ma(r,e){if(typeof r=="string"&&(r.startsWith("/")?r=q(r):r=new URL(r)),Lt(r)&&(r=q(`/p2p/${r}`)),r instanceof URL&&r.protocol==="multiaddr:"&&(r=hh(r.toString())),gn(r)&&(r=[r]),Array.isArray(r)){for(let t of r)if(t.getComponents().some(({name:o})=>o==="http")){let o=Vo(t);return new URL(`${o}${e??""}`)}}return e==null?r:r instanceof URL?new URL(`${r}${e.substring(1)}`):r.map(t=>t.encapsulate(`/http-path/${encodeURIComponent(e.substring(1))}`))}function Cn(r={}){return r.headers instanceof Headers||(r.headers=new Headers(r.headers)),r.headers}function Zl(r){return r!=null&&r!==""}function Rp(r,e){let t,n=80,o="http:";if(r instanceof URL&&(t=r.hostname,n=parseInt(r.port,10),o=r.protocol),Zl(t)||(t=e.get("host")??void 0),!Zl(t)&&Array.isArray(r))for(let s of r){let a=s.getComponents().filter(({name:c})=>TL.includes(c))?.[0]?.value;if(a!=null){t=a;break}}if(!Zl(t)&&Array.isArray(r))for(let s of r){let i=s.getComponents().findLast(a=>a.code===421)?.value;try{let a=oe(s);a.port!=null&&(n=a.port)}catch{}if(i!=null){t=Me(i).toCID().toString(Ar);break}}if(!Zl(t)&&Array.isArray(r))for(let s of r)try{let i=oe(s);i.host!=null&&(t=i.host);break}catch{}if(Zl(t))return o==="http:"&&n!==80&&(t=`${t}:${n}`),o==="https:"&&n!==443&&(t=`${t}:${n}`),t;throw new A("Could not determine request host name - a request must have a host header, be made to a DNS or IP-based multiaddr or an http(s) URL")}function Pp(r){let e="/";return r=r.map(t=>q(t.getComponents().filter(n=>n.name==="http-path"?(e=n.value??"/",!1):!0))),{httpPath:e,addresses:r}}function Lp(r,e=["GET"]){return r==null?e:(typeof r=="string"&&(r=[r]),r.map(t=>t.toUpperCase()))}function M4(r){let e=r.url??"/";if(e.startsWith("http"))return new URL(e);let t=CL(r);return new URL(`http://${t}${e}`)}function CL(r){let e=r.headers?.host;if(e==null&&(e=r.headers?.Host),e==null&&typeof r.headers.get=="function"&&(e=r.headers.get("host")),e==null)throw new A("Could not read host");return e}function Cp(r,e){return r==="GET"&&e.get("connection")?.toLowerCase()==="upgrade"&&e.get("upgrade")?.toLowerCase()==="websocket"}function GE(r,e){if(r instanceof Headers)return r.get(e)??void 0;let t=r[e];return Array.isArray(t)?t.join(","):t}async function U4(r){if(GE(r,"sec-websocket-version")!=="13")throw new ss("Invalid version");let e=GE(r,"sec-websocket-key");if(e==null)throw new ss("Missing sec-websocket-key");let t=`${e}258EAFA5-E914-47DA-95CA-C5AB0DC85B11`,n=await WE.digest(C(t)),o=Za.encode(n.digest).substring(1);return new Headers({Upgrade:"websocket",Connection:"upgrade","Sec-WebSocket-Accept":o})}async function jE(r,e){let t=new X("REQUEST"),n=new Q,o;t[X.kOnHeadersComplete]=s=>{let i=new Headers;for(let a=0;a<s.headers.length;a+=2)i.set(s.headers[a].toLowerCase(),s.headers[a+1]);o={...s,headers:i,raw:n,method:X.methods[s.method]}};try{for(;;){let{data:s}=await Qt(r,"message",e?.signal),i=s.subarray(),a=t.execute(i,0,i.byteLength);if(a instanceof Error)throw a;if(n.append(i.subarray(0,a)),a<i.byteLength&&r.push(i.subarray(a)),o!=null)return o}}catch(s){r.abort(s)}finally{t.finish()}throw new Error("Failed to read header info from request")}var Dp=class extends Error{static name="InvalidResponseError";name="InvalidResponseError"};var kL=[101,204,205,304];async function ZE(r,e,t){let n=Promise.withResolvers(),o=new TransformStream,s=o.writable.getWriter(),i=!1,a=new X("RESPONSE");a.maxHeaderSize=t.maxHeaderSize??X.maxHeaderSize,a[X.kOnHeadersComplete]=l=>{t.log("response headers complete"),i=!0;let d=new Headers;for(let h=0;h<l.headers.length;h+=2)d.append(l.headers[h],l.headers[h+1]);let u=o.readable;kL.includes(l.statusCode)&&(o.writable.close().catch(()=>{}),o.readable.cancel().catch(()=>{}),u=null);let f=new kn(u,{status:l.statusCode,statusText:l.statusMessage,headers:d});n.resolve(f)},a[X.kOnBody]=l=>{t.log("response read body %d bytes",l.byteLength),s.write(l).catch(d=>{n.reject(d)})},a[X.kOnMessageComplete]=()=>{t.log("response message complete"),s.close().catch(l=>{n.reject(l)})};let c=0;return r.addEventListener("message",({data:l})=>{t.log("response stream read %d bytes",l.byteLength),c+=l.byteLength;let d=a.execute(l.subarray(),0,l.byteLength);d instanceof Error&&(r.abort(d),a.finish())}),r.addEventListener("remoteCloseWrite",()=>{i||n.reject(new Dp(`Response ended before headers were received, read ${c} bytes`)),a.finish()}),n.promise}function JE(r,e){return e.set("Content-Length",`${r.size}`),e.set("Content-Type",r.type!=null&&r.type!==""?r.type:"application/octet-stream"),r.stream()}function ex(r,e){return e.set("Content-Length",`${r.byteLength}`),e.set("Content-Type","application/octet-stream"),new ReadableStream({start(t){t.enqueue(eu(r)),t.close()}})}function RL(r,e,t){let n=[`--${t}`],o=0,s=2;return typeof e=="string"?(n.push(`Content-Disposition: form-data; name="${r}"`,'Content-Type: text/plain; charset="UTF-8"',`Content-Length: ${e.length}`,""),o=e.length+s):(n.push(`Content-Disposition: form-data; name="${r}"; filename="${encodeURIComponent(e.name)}"`,"Content-Type: application/octet-stream",`Content-Length: ${e.size}`,""),o=e.size+s),C(n.join(`\r
57
- `)).byteLength+o}function tx(r,e){let t=`-----------------------------${crypto.randomUUID()}`;e.set("Content-Type",`multipart/form-data; boundary=${t}`);let n=0;for(let[c,l]of r.entries())n+=RL(c,l,t);e.set("Content-Length",`${n}`);let o=r.entries(),s;function i(c,l,d,u){let f=[`--${u}`];typeof d=="string"?f.push(`Content-Disposition: form-data; name="${l}"`,'Content-Type: text/plain; charset="UTF-8"',`Content-Length: ${d.length}`,"",d,""):(f.push(`Content-Disposition: form-data; name="${l}"; filename="${encodeURIComponent(d.name)}"`,"Content-Type: application/octet-stream",`Content-Length: ${d.size}`,""),s=d.stream().getReader()),c.enqueue(C(f.join(`\r
58
- `)))}async function a(c,l){if(s!=null){let f=await s.read();f.value!=null&&c.enqueue(f.value),f.done&&(c.enqueue(C(`\r
59
- `)),s=void 0);return}let{done:d,value:u}=o.next();if(u!=null){let[f,h]=u;i(c,f,h,l)}d===!0&&c.close()}return new ReadableStream({async pull(c){await a(c,t)}})}function rx(r,e){e.set("Content-Type","application/octet-stream"),e.set("Transfer-Encoding","chunked");let t=r.getReader();return new ReadableStream({async pull(n){let{done:o,value:s}=await t.read();s!=null&&(n.enqueue(C(`${s.byteLength}\r
60
- `)),n.enqueue(s),n.enqueue(C(`\r
50
+ `)}`:`${t} :`}};ZA=Hi;oe.Constructed=ZA;Hi.NAME="CONSTRUCTED";var O0=class extends nr{fromBER(e,t,n){return t}toBER(e){return fo}};O0.override="EndOfContentValueBlock";var JA,B0=class extends qt{constructor(e={}){super(e,O0),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};JA=B0;oe.EndOfContent=JA;B0.NAME=vd;var eT,ua=class extends qt{constructor(e={}){super(e,nr),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}`}};eT=ua;oe.Null=eT;ua.NAME="NULL";var M0=class extends ni(nr){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=Ie.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}fromBER(e,t,n){let o=Ie.BufferSourceConverter.toUint8Array(e);return ri(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,o5.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};M0.NAME="BooleanValueBlock";var tT,U0=class extends qt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor(e={}){super(e,M0),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};tT=U0;oe.Boolean=tT;U0.NAME="BOOLEAN";var F0=class extends ni(lo){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=lo.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===vd){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(s!==jA)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?lo.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};F0.NAME="OctetStringValueBlock";var a5,Jo=class extends qt{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},F0),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=pm(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 Hi.prototype.onAsciiEncoding.call(this);let e=this.constructor.NAME,t=Ie.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 a5&&e.push(t.valueBlock.valueHexView);return Ie.BufferSourceConverter.concat(e)}};a5=Jo;oe.OctetString=a5;Jo.NAME=jA;var $0=class extends ni(lo){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=lo.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===vd){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==YA)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=Ie.BufferSourceConverter.toUint8Array(e);if(!ri(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=pm(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 lo.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength){let o=new Uint8Array(1);return o[0]=0,o.buffer}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}}};$0.NAME="BitStringValueBlock";var rT,V0=class extends qt{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},$0),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 Hi.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}`}}};rT=V0;oe.BitString=rT;V0.NAME=YA;var nT;function YU(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=k0(new Uint8Array([l%10]),i);break;default:i[s-d]=l%10}}return t[0]>0&&(i=k0(t,i)),i}function GA(r){if(r>=bd.length)for(let e=bd.length;e<=r;e++){let t=new Uint8Array([0]),n=bd[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=k0(t,n)),bd.push(n)}return bd[r]}function XU(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 Sd=class extends ni(nr){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=o5.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(qA(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=XU(GA(n),t),s="-";break;default:t=YU(t,GA(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(s+=WA.charAt(t[c]));return a===!1&&(s+=WA.charAt(0)),s}};nT=Sd;Sd.NAME="IntegerValueBlock";Object.defineProperty(nT.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var xd,ei=class extends qt{constructor(e={}){super(e,Sd),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return C0(),BigInt(this.valueBlock.toString())}static fromBigInt(e){C0();let t=BigInt(e),n=new Ed,o=t.toString(16).replace(/^-/,""),i=new Uint8Array(Ie.Convert.FromHex(o));if(t<0){let a=new Uint8Array(i.length+(i[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${Ie.Convert.ToHex(a)}`)+t,u=Ie.BufferSourceConverter.toUint8Array(Ie.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 xd({valueHex:n.final()})}convertToDER(){let e=new xd({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new xd({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};xd=ei;oe.Integer=xd;ei.NAME="INTEGER";var oT,K0=class extends ei{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};oT=K0;oe.Enumerated=oT;K0.NAME="ENUMERATED";var Ad=class extends ni(nr){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=Ie.BufferSourceConverter.toUint8Array(e);if(!ri(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=la(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){C0();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=Ki(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=Ie.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}}};Ad.NAME="sidBlock";var H0=class extends nr{constructor({value:e=jc,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new Ad;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 i5(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 Ad;if(o>Number.MAX_SAFE_INTEGER){C0();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}};H0.NAME="ObjectIdentifierValueBlock";var iT,uo=class extends qt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,H0),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};iT=uo;oe.ObjectIdentifier=iT;uo.NAME="OBJECT IDENTIFIER";var Td=class extends ni(Zo){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,n){if(n===0)return t;let o=Ie.BufferSourceConverter.toUint8Array(e);if(!ri(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=la(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=Ki(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=Ie.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};Td.NAME="relativeSidBlock";var q0=class extends nr{constructor({value:e=jc,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new Td;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 i5(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 Td;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}};q0.NAME="RelativeObjectIdentifierValueBlock";var sT,z0=class extends qt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,q0),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};sT=z0;oe.RelativeObjectIdentifier=sT;z0.NAME="RelativeObjectIdentifier";var aT,Sr=class extends Hi{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};aT=Sr;oe.Sequence=aT;Sr.NAME="SEQUENCE";var cT,W0=class extends Hi{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};cT=W0;oe.Set=cT;W0.NAME="SET";var G0=class extends ni(nr){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=jc}toJSON(){return{...super.toJSON(),value:this.value}}};G0.NAME="StringValueBlock";var j0=class extends G0{};j0.NAME="SimpleStringValueBlock";var mr=class extends L0{constructor({...e}={}){super(e,j0)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,Ie.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}};mr.NAME="SIMPLE STRING";var Y0=class extends mr{fromBuffer(e){this.valueBlock.valueHexView=Ie.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=Ie.Convert.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=Ie.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(Ie.Convert.FromUtf8String(e)),this.valueBlock.value=e}};Y0.NAME="Utf8StringValueBlock";var lT,ti=class extends Y0{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};lT=ti;oe.Utf8String=lT;ti.NAME="UTF8String";var X0=class extends mr{fromBuffer(e){this.valueBlock.value=Ie.Convert.ToUtf16String(e),this.valueBlock.valueHexView=Ie.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(Ie.Convert.FromUtf16String(e))}};X0.NAME="BmpStringValueBlock";var uT,Q0=class extends X0{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};uT=Q0;oe.BmpString=uT;Q0.NAME="BMPString";var Z0=class extends mr{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=Ki(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}};Z0.NAME="UniversalStringValueBlock";var dT,J0=class extends Z0{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};dT=J0;oe.UniversalString=dT;J0.NAME="UniversalString";var fT,em=class extends mr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};fT=em;oe.NumericString=fT;em.NAME="NumericString";var hT,tm=class extends mr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};hT=tm;oe.PrintableString=hT;tm.NAME="PrintableString";var pT,rm=class extends mr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};pT=rm;oe.TeletexString=pT;rm.NAME="TeletexString";var mT,nm=class extends mr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};mT=nm;oe.VideotexString=mT;nm.NAME="VideotexString";var gT,om=class extends mr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};gT=om;oe.IA5String=gT;om.NAME="IA5String";var yT,im=class extends mr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};yT=im;oe.GraphicString=yT;im.NAME="GraphicString";var wT,_d=class extends mr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};wT=_d;oe.VisibleString=wT;_d.NAME="VisibleString";var bT,sm=class extends mr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};bT=sm;oe.GeneralString=bT;sm.NAME="GeneralString";var xT,am=class extends mr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};xT=am;oe.CharacterString=xT;am.NAME="CharacterString";var ET,Id=class extends _d{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,Ie.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]=vr(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=vr(this.month,2),t[2]=vr(this.day,2),t[3]=vr(this.hour,2),t[4]=vr(this.minute,2),t[5]=vr(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}}};ET=Id;oe.UTCTime=ET;Id.NAME="UTCTime";var vT,cm=class extends Id{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,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(vr(this.year,4)),t.push(vr(this.month,2)),t.push(vr(this.day,2)),t.push(vr(this.hour,2)),t.push(vr(this.minute,2)),t.push(vr(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(vr(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};vT=cm;oe.GeneralizedTime=vT;cm.NAME="GeneralizedTime";var ST,lm=class extends ti{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};ST=lm;oe.DATE=ST;lm.NAME="DATE";var AT,um=class extends ti{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};AT=um;oe.TimeOfDay=AT;um.NAME="TimeOfDay";var TT,dm=class extends ti{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};TT=dm;oe.DateTime=TT;dm.NAME="DateTime";var _T,fm=class extends ti{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};_T=fm;oe.Duration=_T;fm.NAME="Duration";var IT,hm=class extends ti{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};IT=hm;oe.TIME=IT;hm.NAME="TIME";async function gm(r,e){let n=await Wc.create().encrypt(r,e);return mt.encode(n)}async function c5(r,e,t){if(r.type==="RSA")return eF(r,e,t);if(r.type==="Ed25519")return QU(r,e,t);if(r.type==="secp256k1")return ZU(r,e,t);if(r.type==="ECDSA")return JU(r,e,t);throw new yn}async function QU(r,e,t="libp2p-key"){if(t==="libp2p-key")return gm(Cs(r),e);throw new _(`export format '${t}' is not supported`)}async function ZU(r,e,t="libp2p-key"){if(t==="libp2p-key")return gm(Cs(r),e);throw new _("Export format is not supported")}async function JU(r,e,t="libp2p-key"){if(t==="libp2p-key")return gm(Cs(r),e);throw new _(`export format '${t}' is not supported`)}async function eF(r,e,t="pkcs-8"){if(t==="pkcs-8")return tF(r,e);if(t==="libp2p-key")return gm(Cs(r),e);throw new _("Export format is not supported")}async function tF(r,e){let t=yt.get(),o=new Sr({value:[new ei({value:0}),new Sr({value:[new uo({value:"1.2.840.113549.1.1.1"}),new ua]}),new Jo({valueHex:r.raw})]}).toBER(),i=new Uint8Array(o,0,o.byteLength),s=dr(16),a=await eh(mi,e,s,{c:1e4,dkLen:32}),c=dr(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 Sr({value:[new Jo({valueHex:s}),new ei({value:1e4}),new ei({value:32}),new Sr({value:[new uo({value:"1.2.840.113549.2.11"}),new ua]})]}),f=new Sr({value:[new uo({value:"1.2.840.113549.1.5.13"}),new Sr({value:[new Sr({value:[new uo({value:"1.2.840.113549.1.5.12"}),d]}),new Sr({value:[new uo({value:"2.16.840.1.101.3.4.1.42"}),new Jo({valueHex:c})]})]})]}),p=new Sr({value:[f,new Jo({valueHex:u})]}).toBER(),y=new Uint8Array(p,0,p.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...N(y,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
51
+ `)}async function l5(r,e){try{let t=await rF(r,e);return aw(t)}catch{}if(!r.includes("BEGIN"))throw new _("Encrypted key was not a libp2p-key or a PEM file");return nF(r,e)}async function rF(r,e){let t=mt.decode(r);return Wc.create().decrypt(t,e)}async function nF(r,e){let t=yt.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let i=C(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=mm(i),{iv:a,salt:c,iterations:l,keySize:u,cipherText:d}=oF(s),f=await eh(mi,e,c,{c:l,dkLen:u}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=kd(await t.subtle.decrypt({name:"AES-CBC",iv:a},h,d)),{result:y}=mm(p);n=PT(y)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let i=C(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=mm(i);n=PT(s)}else throw new _("Could not parse private key from PEM data");let o=cw(n);if(o.type!=="RSA")throw new _("Could not parse RSA private key from PEM data");return o}function oF(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=kd(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=kd(l.valueBlock.value[1].getValue());return{cipherText:kd(r.valueBlock.value[1].getValue()),salt:s,iterations:a,keySize:c,iv:d}}function PT(r){return kd(r.valueBlock.value[2].getValue())}function kd(r){return new Uint8Array(r,0,r.byteLength)}var iF="/pkcs8/",u5="/info/",Cd=new WeakMap,da={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3};function Yc(r){return r==null||typeof r!="string"?!1:r===(0,LT.default)(r.trim())&&r.length>0}async function zt(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function fa(r){return new Ze(iF+r)}function Xc(r){return new Ze(u5+r)}async function sF(r){let e=Cs(r),t=await st.digest(e);return Ge.encode(t.bytes).substring(1)}var ym=class{components;init;log;self;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init={...t,dek:{...r5,...t.dek}},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<da.minKeyLength)throw new Error(`dek.keyLength must be least ${da.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<da.minSaltLength)throw new Error(`dek.saltLength must be least ${da.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<da.minIterationCount)throw new Error(`dek.iterationCount must be least ${da.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Ql(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Cd.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[Te]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},this.options),t=Math.ceil(da.minSaltLength/3)*3;return e.dek!=null&&(e.dek.salt=N(dr(t),"base64")),e}static get options(){return{dek:{...r5}}}async findKeyByName(e){if(!Yc(e))throw await zt(),new _(`Invalid key name '${e}'`);let t=Xc(e);try{let n=await this.components.datastore.get(t);return JSON.parse(N(n))}catch(n){throw await zt(),this.log.error("could not read key from datastore - %e",n),new We(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:u5};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(N(n.value));if(o.id===e)return o}throw new _(`Key with id '${e}' does not exist.`)}catch(t){throw await zt(),t}}async importKey(e,t){if(!Yc(e))throw await zt(),new _(`Invalid key name '${e}'`);if(t==null)throw await zt(),new _("Key is required");let n=fa(e);if(await this.components.datastore.has(n))throw await zt(),new _(`Key '${e}' already exists`);let i,s;try{i=await sF(t);let l=Cd.get(this);if(l==null)throw new _("dek missing");let u=l.dek;s=await c5(t,u,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await zt(),l}let a={name:e,id:i},c=this.components.datastore.batch();return c.put(n,C(s)),c.put(Xc(e),C(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!Yc(e))throw await zt(),new _(`Invalid key name '${e}'`);let t=fa(e);try{let n=await this.components.datastore.get(t),o=N(n),i=Cd.get(this);if(i==null)throw new _("dek missing");let s=i.dek;return await l5(o,s)}catch(n){throw await zt(),n}}async removeKey(e){if(!Yc(e)||e===this.self)throw await zt(),new _(`Invalid key name '${e}'`);let t=fa(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(Xc(e)),await o.commit(),n}async listKeys(){let e={prefix:u5},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(N(n.value)));return t}async renameKey(e,t){if(!Yc(e)||e===this.self)throw await zt(),new _(`Invalid old key name '${e}'`);if(!Yc(t)||t===this.self)throw await zt(),new _(`Invalid new key name '${t}'`);let n=fa(e),o=fa(t),i=Xc(e),s=Xc(t);if(await this.components.datastore.has(o))throw await zt(),new _(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(i),u=JSON.parse(N(l));u.name=t;let d=this.components.datastore.batch();return d.put(o,c),d.put(s,C(JSON.stringify(u))),d.delete(n),d.delete(i),await d.commit(),u}catch(c){throw await zt(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await zt(),new _(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await zt(),new _(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await zt(),new _(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=Cd.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?Ql(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Cd.set(this,{dek:i});let s=await this.listKeys();for(let a of s){let c=await this.components.datastore.get(fa(a.name)),l=N(c),u=await l5(l,o),d=i.toString(),f=await c5(u,d,u.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(fa(a.name),C(f)),h.put(Xc(a.name),C(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function wm(r={}){return e=>new ym(e,r)}async function d5(r,e={}){let t=e.selfKey??"self",n=wm(e)({datastore:r,logger:mc()}),o;return await r.has(new Ze(`/pkcs8/${t}`))?o=await n.exportKey(t):(o=await Zf(e.keyType??"Ed25519"),await n.importKey(t,o)),o}var Qc=!!globalThis.process?.env?.DUMP_SESSION_KEYS,f5=16;function aF(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function bm(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function xm(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function Bt(r,e,t=""){let n=aF(r),o=r?.length,i=e!==void 0;if(!n||i&&o!==e){let s=t&&`"${t}" `,a=i?` of length ${e}`:"",c=n?`length=${o}`:`type=${typeof r}`;throw new Error(s+"expected Uint8Array"+a+", got "+c)}return r}function h5(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 DT(r,e){Bt(r,void 0,"output");let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}function oi(r){return new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4))}function ii(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function cF(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}var lF=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function NT(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function OT(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 p5=(r,e)=>{function t(n,...o){if(Bt(n,void 0,"key"),!lF)throw new Error("Non little-endian hardware is not yet supported");if(r.nonceLength!==void 0){let u=o[0];Bt(u,r.varSizeNonce?void 0:r.nonceLength,"nonce")}let i=r.tagLength;i&&o[1]!==void 0&&Bt(o[1],void 0,"AAD");let s=e(n,...o),a=(u,d)=>{if(d!==void 0){if(u!==2)throw new Error("cipher output not supported");Bt(d,void 0,"output")}},c=!1;return{encrypt(u,d){if(c)throw new Error("cannot encrypt() twice with same key + nonce");return c=!0,Bt(u),a(s.encrypt.length,d),s.encrypt(u,d)},decrypt(u,d){if(Bt(u),i&&u.length<i)throw new Error('"ciphertext" expected length bigger than tagLength='+i);return a(s.decrypt.length,d),s.decrypt(u,d)}}}return Object.assign(t,r),t};function m5(r,e,t=!0){if(e===void 0)return new Uint8Array(r);if(e.length!==r)throw new Error('"output" expected Uint8Array of length '+r+", got: "+e.length);if(t&&!uF(e))throw new Error("invalid output, must be aligned");return e}function BT(r,e,t){bm(t);let n=new Uint8Array(16),o=cF(n);return o.setBigUint64(0,BigInt(e),t),o.setBigUint64(8,BigInt(r),t),n}function uF(r){return r.byteOffset%4===0}function Zc(r){return Uint8Array.from(r)}var UT=r=>Uint8Array.from(r.split(""),e=>e.charCodeAt(0)),dF=UT("expand 16-byte k"),fF=UT("expand 32-byte k"),hF=oi(dF),pF=oi(fF);function ie(r,e){return r<<e|r>>>32-e}function g5(r){return r.byteOffset%4===0}var Em=64,mF=16,FT=2**32-1,MT=Uint32Array.of();function gF(r,e,t,n,o,i,s,a){let c=o.length,l=new Uint8Array(Em),u=oi(l),d=g5(o)&&g5(i),f=d?oi(o):MT,h=d?oi(i):MT;for(let p=0;p<c;s++){if(r(e,t,n,u,s,a),s>=FT)throw new Error("arx: counter overflow");let y=Math.min(Em,c-p);if(d&&y===Em){let g=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let m=0,b;m<mF;m++)b=g+m,h[b]=f[b]^u[m];p+=Em;continue}for(let g=0,m;g<y;g++)m=p+g,i[m]=o[m]^l[g];p+=y}}function y5(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:i,rounds:s}=NT({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return xm(o),xm(s),bm(i),bm(t),(a,c,l,u,d=0)=>{Bt(a,void 0,"key"),Bt(c,void 0,"nonce"),Bt(l,void 0,"data");let f=l.length;if(u===void 0&&(u=new Uint8Array(f)),Bt(u,void 0,"output"),xm(d),d<0||d>=FT)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,y,g;if(p===32)h.push(y=Zc(a)),g=pF;else if(p===16&&t)y=new Uint8Array(32),y.set(a),y.set(a,16),g=hF,h.push(y);else throw Bt(a,32,"arx key"),new Error("invalid key size");g5(c)||h.push(c=Zc(c));let m=oi(y);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(g,m,oi(c.subarray(0,16)),m),c=c.subarray(16)}let b=16-o;if(b!==c.length)throw new Error(`arx: nonce must be ${b} or 16 bytes`);if(b!==12){let L=new Uint8Array(12);L.set(c,i?0:12-c.length),c=L,h.push(c)}let v=oi(c);return gF(r,g,m,v,l,u,d,s),ii(...h),u}}function Wt(r,e){return r[e++]&255|(r[e++]&255)<<8}var w5=class{blockLen=16;outputLen=16;buffer=new Uint8Array(16);r=new Uint16Array(10);h=new Uint16Array(10);pad=new Uint16Array(8);pos=0;finished=!1;constructor(e){e=Zc(Bt(e,32,"key"));let t=Wt(e,0),n=Wt(e,2),o=Wt(e,4),i=Wt(e,6),s=Wt(e,8),a=Wt(e,10),c=Wt(e,12),l=Wt(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]=Wt(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],y=s[8],g=s[9],m=Wt(e,t+0),b=Wt(e,t+2),v=Wt(e,t+4),L=Wt(e,t+6),K=Wt(e,t+8),V=Wt(e,t+10),Y=Wt(e,t+12),T=Wt(e,t+14),S=i[0]+(m&8191),B=i[1]+((m>>>13|b<<3)&8191),$=i[2]+((b>>>10|v<<6)&8191),D=i[3]+((v>>>7|L<<9)&8191),A=i[4]+((L>>>4|K<<12)&8191),E=i[5]+(K>>>1&8191),x=i[6]+((K>>>14|V<<2)&8191),R=i[7]+((V>>>11|Y<<5)&8191),U=i[8]+((Y>>>8|T<<8)&8191),M=i[9]+(T>>>5|o),P=0,H=P+S*a+B*(5*g)+$*(5*y)+D*(5*p)+A*(5*h);P=H>>>13,H&=8191,H+=E*(5*f)+x*(5*d)+R*(5*u)+U*(5*l)+M*(5*c),P+=H>>>13,H&=8191;let q=P+S*c+B*a+$*(5*g)+D*(5*y)+A*(5*p);P=q>>>13,q&=8191,q+=E*(5*h)+x*(5*f)+R*(5*d)+U*(5*u)+M*(5*l),P+=q>>>13,q&=8191;let Q=P+S*l+B*c+$*a+D*(5*g)+A*(5*y);P=Q>>>13,Q&=8191,Q+=E*(5*p)+x*(5*h)+R*(5*f)+U*(5*d)+M*(5*u),P+=Q>>>13,Q&=8191;let ke=P+S*u+B*l+$*c+D*a+A*(5*g);P=ke>>>13,ke&=8191,ke+=E*(5*y)+x*(5*p)+R*(5*h)+U*(5*f)+M*(5*d),P+=ke>>>13,ke&=8191;let Ae=P+S*d+B*u+$*l+D*c+A*a;P=Ae>>>13,Ae&=8191,Ae+=E*(5*g)+x*(5*y)+R*(5*p)+U*(5*h)+M*(5*f),P+=Ae>>>13,Ae&=8191;let xe=P+S*f+B*d+$*u+D*l+A*c;P=xe>>>13,xe&=8191,xe+=E*a+x*(5*g)+R*(5*y)+U*(5*p)+M*(5*h),P+=xe>>>13,xe&=8191;let Ce=P+S*h+B*f+$*d+D*u+A*l;P=Ce>>>13,Ce&=8191,Ce+=E*c+x*a+R*(5*g)+U*(5*y)+M*(5*p),P+=Ce>>>13,Ce&=8191;let ze=P+S*p+B*h+$*f+D*d+A*u;P=ze>>>13,ze&=8191,ze+=E*l+x*c+R*a+U*(5*g)+M*(5*y),P+=ze>>>13,ze&=8191;let ft=P+S*y+B*p+$*h+D*f+A*d;P=ft>>>13,ft&=8191,ft+=E*u+x*l+R*c+U*a+M*(5*g),P+=ft>>>13,ft&=8191;let Pe=P+S*g+B*y+$*p+D*h+A*f;P=Pe>>>13,Pe&=8191,Pe+=E*d+x*u+R*l+U*c+M*a,P+=Pe>>>13,Pe&=8191,P=(P<<2)+P|0,P=P+H|0,H=P&8191,P=P>>>13,q+=P,i[0]=H,i[1]=q,i[2]=Q,i[3]=ke,i[4]=Ae,i[5]=xe,i[6]=Ce,i[7]=ze,i[8]=ft,i[9]=Pe}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;ii(n)}update(e){h5(this),Bt(e),e=Zc(e);let{buffer:t,blockLen:n}=this,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(){ii(this.h,this.r,this.buffer,this.pad)}digestInto(e){h5(this),DT(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 yF(r){let e=(n,o)=>r(o).update(n).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var $T=yF(r=>new w5(r));function HT(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],y=e[5],g=e[6],m=e[7],b=o,v=t[0],L=t[1],K=t[2],V=s,Y=a,T=c,S=l,B=u,$=d,D=f,A=h,E=p,x=y,R=g,U=m,M=b,P=v,H=L,q=K;for(let ke=0;ke<i;ke+=2)V=V+B|0,M=ie(M^V,16),E=E+M|0,B=ie(B^E,12),V=V+B|0,M=ie(M^V,8),E=E+M|0,B=ie(B^E,7),Y=Y+$|0,P=ie(P^Y,16),x=x+P|0,$=ie($^x,12),Y=Y+$|0,P=ie(P^Y,8),x=x+P|0,$=ie($^x,7),T=T+D|0,H=ie(H^T,16),R=R+H|0,D=ie(D^R,12),T=T+D|0,H=ie(H^T,8),R=R+H|0,D=ie(D^R,7),S=S+A|0,q=ie(q^S,16),U=U+q|0,A=ie(A^U,12),S=S+A|0,q=ie(q^S,8),U=U+q|0,A=ie(A^U,7),V=V+$|0,q=ie(q^V,16),R=R+q|0,$=ie($^R,12),V=V+$|0,q=ie(q^V,8),R=R+q|0,$=ie($^R,7),Y=Y+D|0,M=ie(M^Y,16),U=U+M|0,D=ie(D^U,12),Y=Y+D|0,M=ie(M^Y,8),U=U+M|0,D=ie(D^U,7),T=T+A|0,P=ie(P^T,16),E=E+P|0,A=ie(A^E,12),T=T+A|0,P=ie(P^T,8),E=E+P|0,A=ie(A^E,7),S=S+B|0,H=ie(H^S,16),x=x+H|0,B=ie(B^x,12),S=S+B|0,H=ie(H^S,8),x=x+H|0,B=ie(B^x,7);let Q=0;n[Q++]=s+V|0,n[Q++]=a+Y|0,n[Q++]=c+T|0,n[Q++]=l+S|0,n[Q++]=u+B|0,n[Q++]=d+$|0,n[Q++]=f+D|0,n[Q++]=h+A|0,n[Q++]=p+E|0,n[Q++]=y+x|0,n[Q++]=g+R|0,n[Q++]=m+U|0,n[Q++]=b+M|0,n[Q++]=v+P|0,n[Q++]=L+H|0,n[Q++]=K+q|0}function wF(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],y=e[7],g=t[0],m=t[1],b=t[2],v=t[3];for(let K=0;K<20;K+=2)o=o+c|0,g=ie(g^o,16),f=f+g|0,c=ie(c^f,12),o=o+c|0,g=ie(g^o,8),f=f+g|0,c=ie(c^f,7),i=i+l|0,m=ie(m^i,16),h=h+m|0,l=ie(l^h,12),i=i+l|0,m=ie(m^i,8),h=h+m|0,l=ie(l^h,7),s=s+u|0,b=ie(b^s,16),p=p+b|0,u=ie(u^p,12),s=s+u|0,b=ie(b^s,8),p=p+b|0,u=ie(u^p,7),a=a+d|0,v=ie(v^a,16),y=y+v|0,d=ie(d^y,12),a=a+d|0,v=ie(v^a,8),y=y+v|0,d=ie(d^y,7),o=o+l|0,v=ie(v^o,16),p=p+v|0,l=ie(l^p,12),o=o+l|0,v=ie(v^o,8),p=p+v|0,l=ie(l^p,7),i=i+u|0,g=ie(g^i,16),y=y+g|0,u=ie(u^y,12),i=i+u|0,g=ie(g^i,8),y=y+g|0,u=ie(u^y,7),s=s+d|0,m=ie(m^s,16),f=f+m|0,d=ie(d^f,12),s=s+d|0,m=ie(m^s,8),f=f+m|0,d=ie(d^f,7),a=a+c|0,b=ie(b^a,16),h=h+b|0,c=ie(c^h,12),a=a+c|0,b=ie(b^a,8),h=h+b|0,c=ie(c^h,7);let L=0;n[L++]=o,n[L++]=i,n[L++]=s,n[L++]=a,n[L++]=g,n[L++]=m,n[L++]=b,n[L++]=v}var bF=y5(HT,{counterRight:!1,counterLength:4,allowShortKeys:!1}),xF=y5(HT,{counterRight:!1,counterLength:8,extendNonceFn:wF,allowShortKeys:!1});var EF=new Uint8Array(16),VT=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(EF.subarray(t))},vF=new Uint8Array(32);function KT(r,e,t,n,o){o!==void 0&&Bt(o,void 0,"AAD");let i=r(e,t,vF),s=BT(n.length,o?o.length:0,!0),a=$T.create(i);o&&VT(a,o),VT(a,n),a.update(s);let c=a.digest();return ii(i,s),c}var qT=r=>(e,t,n)=>({encrypt(i,s){let a=i.length;s=m5(a+16,s,!1),s.set(i);let c=s.subarray(0,-16);r(e,t,c,c,1);let l=KT(r,e,t,c,n);return s.set(l,a),ii(l),s},decrypt(i,s){s=m5(i.length-16,s,!1);let a=i.subarray(0,-16),c=i.subarray(-16),l=KT(r,e,t,a,n);if(!OT(c,l))throw new Error("invalid tag");return s.set(i.subarray(0,-16)),r(e,t,s,s,1),ii(l),s}}),b5=p5({blockSize:64,nonceLength:12,tagLength:16},qT(bF)),Z0e=p5({blockSize:64,nonceLength:24,tagLength:16},qT(xF));function WT(r,e,t){return Ao(r),t===void 0&&(t=new Uint8Array(r.outputLen)),bi(r,t,e)}var x5=Uint8Array.of(0),zT=Uint8Array.of();function GT(r,e,t,n=32){Ao(r),Yt(n,"length");let o=r.outputLen;if(n>255*o)throw new Error("Length must be <= 255*HashLen");let i=Math.ceil(n/o);t===void 0?t=zT:ge(t,void 0,"info");let s=new Uint8Array(i*o),a=bi.create(r,e),c=a._cloneInto(),l=new Uint8Array(a.outputLen);for(let u=0;u<i;u++)x5[0]=u+1,c.update(u===0?zT:l).update(t).update(x5).digestInto(l),s.set(l,o*u),a._cloneInto(c);return a.destroy(),c.destroy(),Xt(l,x5),s.slice(0,n)}var E5={hashSHA256(r){return tn(r.subarray())},getHKDF(r,e){let t=WT(tn,e,r),o=GT(tn,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=Fl.utils.randomSecretKey();return{publicKey:Fl.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:Fl.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return Fl.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return b5(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return b5(n,e,t).decrypt(r.subarray(),o)}};var jT=E5;function YT(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 Jc=r=>{let e=Re(2);return e[0]=r>>8,e[1]=r,e};Jc.bytes=2;var el=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)};el.bytes=2;function XT(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 v5(r,e){!e.enabled||!Qc||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${N(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${N(r.privateKey,"hex")}`)):e("Missing local static keys."))}function S5(r,e){!e.enabled||!Qc||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${N(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${N(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function QT(r,e){!e.enabled||!Qc||e(r?`REMOTE_STATIC_PUBLIC_KEY ${N(r.subarray(),"hex")}`:"Missing remote static public key.")}function A5(r,e){!e.enabled||!Qc||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${N(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function T5(r,e,t){!t.enabled||!Qc||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&N(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&N(e.k,"hex")}`))}function Fn(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=Re(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var tl=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var SF=0,AF=4294967295,TF="Cipherstate has reached maximum n, a new handshake must be performed",vm=class{n;bytes;view;constructor(e=SF){this.n=e,this.bytes=de(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>AF)throw new Error(TF)}};var ha=de(0),rl=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new vm(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}},_5=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=C(t,"utf-8");this.h=_F(e,n),this.ck=this.h,this.cs=new rl(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new rl(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new ne(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,ha);return[new rl(this.crypto,e),new rl(this.crypto,t)]}},I5=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 _5(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()}},Rd=class extends I5{writeMessageA(e){return new ne(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new ne(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new ne(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new tl(`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 tl(`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 tl(`handshake stage 2 validation fail: ${t.message}`)}}};function _F(r,e){if(e.length<=32){let t=de(32);return t.set(e),t}else return r.hash(e)}var k5=new Float32Array([-0]),qi=new Uint8Array(k5.buffer);function ZT(r,e,t){k5[0]=r,e[t]=qi[0],e[t+1]=qi[1],e[t+2]=qi[2],e[t+3]=qi[3]}function JT(r,e){return qi[0]=r[e],qi[1]=r[e+1],qi[2]=r[e+2],qi[3]=r[e+3],k5[0]}var C5=new Float64Array([-0]),or=new Uint8Array(C5.buffer);function e_(r,e,t){C5[0]=r,e[t]=or[0],e[t+1]=or[1],e[t+2]=or[2],e[t+3]=or[3],e[t+4]=or[4],e[t+5]=or[5],e[t+6]=or[6],e[t+7]=or[7]}function t_(r,e){return or[0]=r[e],or[1]=r[e+1],or[2]=r[e+2],or[3]=r[e+3],or[4]=r[e+4],or[5]=r[e+5],or[6]=r[e+6],or[7]=r[e+7],C5[0]}var IF=BigInt(Number.MAX_SAFE_INTEGER),kF=BigInt(Number.MIN_SAFE_INTEGER),Xr=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 pa;if(e<IF&&e>kF)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>r_&&(o=0n,++n>r_&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return pa;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):pa}},pa=new Xr(0,0);pa.toBigInt=function(){return 0n};pa.zzEncode=pa.zzDecode=function(){return this};pa.length=function(){return 1};var r_=4294967296n;function n_(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 o_(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 R5(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 $n(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Sm(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var P5=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,$n(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 $n(this,4);return Sm(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw $n(this,4);return Sm(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw $n(this,4);let e=JT(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw $n(this,4);let e=t_(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 $n(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return o_(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw $n(this,e);this.pos+=e}else do if(this.pos>=this.len)throw $n(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 Xr(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 $n(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 $n(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 $n(this,8);let e=Sm(this.buf,this.pos+=4),t=Sm(this.buf,this.pos+=4);return new Xr(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=_s(this.buf,this.pos);return this.pos+=ye(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 L5(r){return new P5(r instanceof Uint8Array?r:r.subarray())}function Am(r,e,t){let n=L5(r);return e.decode(n,void 0,t)}function D5(r){let e=r??8192,t=e>>>1,n,o=e;return function(s){if(s<1||s>t)return Re(s);o+s>e&&(n=Re(e),o=0);let a=n.subarray(o,o+=s);return(o&7)!==0&&(o=(o|7)+1),a}}var ma=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function N5(){}var B5=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},CF=D5();function RF(r){return globalThis.Buffer!=null?Re(r):CF(r)}var Ld=class{len;head;tail;states;constructor(){this.len=0,this.head=new ma(N5,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new ma(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new M5((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(Tm,10,Xr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=Xr.fromBigInt(e);return this._push(Tm,t.length(),t)}uint64Number(e){return this._push(Xn,ye(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=Xr.fromBigInt(e).zzEncode();return this._push(Tm,t.length(),t)}sint64Number(e){let t=Xr.fromNumber(e).zzEncode();return this._push(Tm,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(O5,1,e?1:0)}fixed32(e){return this._push(Pd,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=Xr.fromBigInt(e);return this._push(Pd,4,t.lo)._push(Pd,4,t.hi)}fixed64Number(e){let t=Xr.fromNumber(e);return this._push(Pd,4,t.lo)._push(Pd,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(ZT,4,e)}double(e){return this._push(e_,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(O5,1,0):this.uint32(t)._push(LF,t,e)}string(e){let t=n_(e);return t!==0?this.uint32(t)._push(R5,t,e):this._push(O5,1,0)}fork(){return this.states=new B5(this),this.head=this.tail=new ma(N5,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 ma(N5,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=RF(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function O5(r,e,t){e[t]=r&255}function PF(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var M5=class extends ma{next;constructor(e,t){super(PF,e,t),this.next=void 0}};function Tm(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 Pd(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 LF(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(Ld.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(DF,e,r),this},Ld.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(NF,e,r),this});function DF(r,e,t){e.set(r,t)}function NF(r,e,t){r.length<40?R5(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(C(r),t)}function U5(){return new Ld}function _m(r,e){let t=U5();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Dd;(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"})(Dd||(Dd={}));function F5(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function Im(r,e){return F5("message",Dd.LENGTH_DELIMITED,r,e)}var Nd=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"};var km;(function(r){let e;r.codec=()=>(e==null&&(e=Im((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 Nd('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 Nd('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=>_m(t,r.codec()),r.decode=(t,n)=>Am(t,r.codec(),n)})(km||(km={}));var Od;(function(r){let e;r.codec=()=>(e==null&&(e=Im((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),km.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={identityKey:de(0),identitySig:de(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=km.codec().decode(t,t.uint32(),{limits:o.limits?.extensions});break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>_m(t,r.codec()),r.decode=(t,n)=>Am(t,r.codec(),n)})(Od||(Od={}));async function V5(r,e,t){let n=await r.sign(a_(e));return Od.encode({identityKey:It(r.publicKey),identitySig:n,extensions:t})}async function K5(r,e,t){try{let n=Od.decode(r),o=pt(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=a_(e);if(!await o.verify(i,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new mf(n.message)}}function a_(r){let e=C("noise-libp2p-static-key:");return r instanceof Uint8Array?Ye([e,r],e.length+r.length):(r.prepend(e),r)}var $5=class extends vi{stream;handshake;metrics;decoder;constructor(e,t,n){super({log:e.log,inactivityTimeout:e.inactivityTimeout,maxReadBufferLength:e.maxReadBufferLength,direction:e.direction}),this.stream=e,this.handshake=t,this.metrics=n,this.decoder=new Ah({lengthDecoder:el,maxBufferSize:16*1024*1024,encodingLength:()=>2});let o=c=>{try{for(let l of this.decoder.decode(c.data))this.onData(this.decrypt(l))}catch(l){this.abort(l)}};this.stream.addEventListener("message",o);let i=c=>{c.error!=null?c.local===!0?this.abort(c.error):this.onRemoteReset():this.onTransportClosed()};this.stream.addEventListener("close",i);let s=()=>{this.safeDispatchEvent("drain")};this.stream.addEventListener("drain",s);let a=()=>{this.onRemoteCloseWrite()};this.stream.addEventListener("remoteCloseWrite",a)}encrypt(e){let t=new ne;for(let n=0;n<e.byteLength;n+=65519){let o=n+65519;o>e.byteLength&&(o=e.byteLength);let i;e instanceof Uint8Array?i=this.handshake.encrypt(e.subarray(n,o)):i=this.handshake.encrypt(e.sublist(n,o)),this.metrics?.encryptedPackets.increment(),t.append(Jc(i.byteLength)),t.append(i)}return t}decrypt(e){let t=new ne;for(let n=0;n<e.byteLength;n+=65535){let o=n+65535;if(o>e.byteLength&&(o=e.byteLength),o-f5<n)throw new Error("Invalid chunk");let i;e instanceof Uint8Array?i=e.subarray(n,o):i=e.sublist(n,o);let s=e.subarray(n,o-f5);try{let a=this.handshake.decrypt(i,s);this.metrics?.decryptedPackets.increment(),t.append(a)}catch(a){throw this.metrics?.decryptErrors.increment(),a}}return t}close(e){return this.stream.close(e)}sendPause(){this.stream.pause()}sendResume(){this.stream.resume()}sendReset(e){this.stream.abort(e)}sendData(e){return{sentBytes:e.byteLength,canSendMore:this.stream.send(this.encrypt(e))}}};function H5(r,e,t){return new $5(r,e,t)}async function c_(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await V5(i,a.publicKey,l),d=new Rd({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:a});v5(d.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(d.writeMessageA(ha),e),t.trace("Stage 0 - Initiator finished sending first message."),S5(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."),A5(d.re,t),QT(d.rs,t),t.trace("Initiator going to check remote's signature...");let h=await K5(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,y]=d.ss.split();return T5(p,y,t),{payload:h,encrypt:g=>p.encryptWithAd(ha,g),decrypt:(g,m)=>y.decryptWithAd(ha,g,m)}}async function l_(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await V5(i,a.publicKey,l),d=new Rd({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:a});v5(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."),A5(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."),S5(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 K5(f,d.rs,c),[p,y]=d.ss.split();return T5(p,y,t),{payload:h,encrypt:g=>y.encryptWithAd(ha,g),decrypt:(g,m)=>p.decryptWithAd(ha,g,m)}}var Cm=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;log;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:i,prologueBytes:s}=t,{metrics:a}=e;this.components=e,this.log=e.logger.forComponent("libp2p:noise");let c=i??jT;this.crypto=YT(c),this.extensions={webtransportCerthashes:[],...o},this.metrics=a?XT(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=s??de(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[Te]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=e.log?.newScope("noise")??this.log,o=Ii(e,{lengthEncoder:Jc,lengthDecoder:el,maxDataLength:65535}),i=await this.performHandshakeInitiator(o,this.components.privateKey,n,t?.remotePeer?.publicKey,t),s=pt(i.payload.identityKey);return{connection:H5(o.unwrap(),i,this.metrics),remoteExtensions:i.payload.extensions,remotePeer:so(s),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(i.payload.extensions?.streamMuxers)}}getStreamMuxer(e){if(e==null||e.length===0)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 gf("Early muxer negotiation was requested but the initiator and responder had no common muxers")}async secureInbound(e,t){let n=e.log?.newScope("noise")??this.log,o=Ii(e,{lengthEncoder:Jc,lengthDecoder:el,maxDataLength:65535}),i=await this.performHandshakeResponder(o,this.components.privateKey,n,t?.remotePeer?.publicKey,t),s=pt(i.payload.identityKey);return{connection:H5(o.unwrap(),i,this.metrics),remoteExtensions:i.payload.extensions,remotePeer:so(s),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(i.payload.extensions?.streamMuxers)}}async performHandshakeInitiator(e,t,n,o,i){let s,a=i?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{s=await c_({connection:e,privateKey:t,remoteIdentityKey:o,log:n.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},i),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return s}async performHandshakeResponder(e,t,n,o,i){let s,a=i?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{s=await l_({connection:e,privateKey:t,remoteIdentityKey:o,log:n.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},i),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return s}};function Rm(r={}){return e=>new Cm(e,r)}var at;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(at||(at={}));var Me;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(Me||(Me={}));var X2e=Object.values(Me).filter(r=>typeof r!="string"),u_=0,vt;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(vt||(vt={}));var ho=12;var si=class extends Error{static name="ProtocolError";reason;constructor(e,t){super(e),this.name="ProtocolError",this.reason=t}};function d_(r){return r?.reason!==null}var Qr=class extends si{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e,vt.ProtocolError),this.name="InvalidFrameError"}},nl=class extends si{static name="UnRequestedPingError";constructor(e="Un-requested ping error"){super(e,vt.ProtocolError),this.name="UnRequestedPingError"}},ol=class extends si{static name="NotMatchingPingError";constructor(e="Not matching ping error"){super(e,vt.ProtocolError),this.name="NotMatchingPingError"}};var Pm=class extends si{static name="StreamAlreadyExistsError";constructor(e="Stream already exists"){super(e,vt.ProtocolError),this.name="StreamAlreadyExistsError"}},Lm=class extends si{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e,vt.ProtocolError),this.name="DecodeInvalidVersionError"}},Dm=class extends si{static name="BothClientsError";constructor(e="Both clients"){super(e,vt.ProtocolError),this.name="BothClientsError"}},il=class extends si{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e,vt.ProtocolError),this.name="ReceiveWindowExceededError"}};var tge=new Set([Qr.name,nl.name,ol.name,Pm.name,Lm.name,Dm.name,il.name]),Md=256*1024,Nm=16*1024*1024;var Ud={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,maxMessageSize:64*1024,maxEarlyStreams:10,streamOptions:{initialStreamWindowSize:Md,maxStreamWindowSize:Nm,inactivityTimeout:12e4,maxReadBufferLength:4194304,maxWriteBufferLength:1/0}};function f_(r){if(r.keepAliveInterval!=null&&r.keepAliveInterval<=0)throw new _("keep-alive interval must be positive");if(r.maxInboundStreams!=null&&r.maxInboundStreams<0)throw new _("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams!=null&&r.maxOutboundStreams<0)throw new _("max outbound streams must be larger or equal 0");if(r.maxMessageSize!=null&&r.maxMessageSize<1024)throw new _("MaxMessageSize must be greater than a kilobyte");if(r.streamOptions?.initialStreamWindowSize!=null&&r.streamOptions?.initialStreamWindowSize<Md)throw new _("InitialStreamWindowSize must be larger or equal 256 kB");if(r.streamOptions?.maxStreamWindowSize!=null&&r.streamOptions?.initialStreamWindowSize!=null&&r.streamOptions?.maxStreamWindowSize<r.streamOptions?.initialStreamWindowSize)throw new _("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.streamOptions?.maxStreamWindowSize!=null&&r.streamOptions?.maxStreamWindowSize>2**32-1)throw new _("MaxStreamWindowSize must be less than equal MAX_UINT32")}function p_(r){return r.header.type===at.Data&&r.data!==null}var h_=2**24;function OF(r){if(r[0]!==u_)throw new Qr("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*h_+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*h_+(r[9]<<16)+(r[10]<<8)+r[11]}}var Om=class{buffer;constructor(){this.buffer=new ne}*emitFrames(e){for(this.buffer.append(e);;){let t=this.readFrame();if(t===void 0)break;yield t}}readFrame(){let e=ho;if(this.buffer.byteLength<ho)return;let t=OF(this.buffer.subarray(0,ho));if(t.type===at.Data){if(e+=t.length,this.buffer.byteLength<e)return;let n=this.buffer.sublist(ho,e);return this.buffer.consume(e),{header:t,data:n}}return this.buffer.consume(e),{header:t}}};function q5(r){let e=new Uint8Array(ho);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}var gr;(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",r[r.Paused=5]="Paused"})(gr||(gr={}));var Bm=class extends Ti{streamId;state;sendWindowCapacity;recvWindow;recvWindowCapacity;maxStreamWindowSize;epochStart;getRTT;sendFrame;constructor(e){let t=e.initialStreamWindowSize??Md;super({...e,maxMessageSize:t-ho}),this.streamId=e.streamId,this.state=e.state,this.sendWindowCapacity=t,this.recvWindow=t,this.recvWindowCapacity=this.recvWindow,this.maxStreamWindowSize=e.maxStreamWindowSize??Nm,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame;let n=()=>{this.state=gr.Finished};this.addEventListener("close",n)}sendData(e){let t=e.byteLength,n=0,o=!0;for(this.log?.trace("send window capacity is %d bytes",this.sendWindowCapacity);e.byteLength>0;){if(this.sendWindowCapacity===0){o=!1,this.log?.trace("sent %d/%d bytes, exhausted send window, waiting for window update",n,t);break}let i=Math.min(this.sendWindowCapacity,e.byteLength),s=this.getSendFlags(),a=e.sublist(0,i);e.consume(i);let c=this.sendFrame({type:at.Data,flag:s,streamID:this.streamId,length:i},a);if(this.sendWindowCapacity-=i,n+=i,!c){o=c,this.log.trace("sent %d/%d bytes, wait for muxer to have more send capacity",n,t);break}}return{sentBytes:n,canSendMore:o}}sendReset(){this.sendFrame({type:at.WindowUpdate,flag:Me.RST,streamID:this.streamId,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|Me.FIN;this.sendFrame({type:at.WindowUpdate,flag:e,streamID:this.streamId,length:0})}async sendCloseRead(e){e?.signal?.throwIfAborted()}sendPause(){this.state=gr.Paused}sendResume(){this.state=gr.Established,this.sendWindowUpdate()}handleWindowUpdate(e){this.processFlags(e.header.flag),this.sendWindowCapacity+=e.header.length,this.maxMessageSize=this.sendWindowCapacity-ho,this.maxMessageSize<0&&(this.maxMessageSize=0),this.maxMessageSize!==0&&this.writeBuffer.byteLength>0&&(this.log?.trace("window update of %d bytes allows more data to be sent, have %d bytes queued, sending data %s",e.header.length,this.writeBuffer.byteLength,this.sendingData),this.safeDispatchEvent("drain"))}handleData(e){if(!p_(e))throw new Qr("Frame was not data frame");if(this.processFlags(e.header.flag),this.recvWindowCapacity<e.header.length)throw new il("Receive window exceeded");this.recvWindowCapacity-=e.header.length,this.onData(e.data),this.sendWindowUpdate()}processFlags(e){(e&Me.ACK)===Me.ACK&&this.state===gr.SYNSent&&(this.state=gr.Established),(e&Me.FIN)===Me.FIN&&this.onRemoteCloseWrite(),(e&Me.RST)===Me.RST&&this.onRemoteReset()}getSendFlags(){switch(this.state){case gr.Init:return this.state=gr.SYNSent,Me.SYN;case gr.SYNReceived:return this.state=gr.Established,Me.ACK;default:return 0}}sendWindowUpdate(){if(this.state===gr.Paused){this.epochStart=Date.now();return}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.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let o=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:at.WindowUpdate,flag:e,streamID:this.streamId,length:o})}};function m_(r){return{type:at[r.type],flags:[(r.flag&Me.SYN)===Me.SYN?"SYN":void 0,(r.flag&Me.ACK)===Me.ACK?"ACK":void 0,(r.flag&Me.FIN)===Me.FIN?"FIN":void 0,(r.flag&Me.RST)===Me.RST?"RST":void 0].filter(Boolean),streamID:r.streamID,length:r.length}}var g_="/yamux/1.0.0",Mm=class{protocol=g_;_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[Te]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new z5(e,{...this._init})}},z5=class extends Ai{nextStreamID;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;decoder;keepAlive;enableKeepAlive;keepAliveInterval;maxInboundStreams;maxOutboundStreams;constructor(e,t={}){super(e,{...t,protocol:g_,name:"yamux"}),this.client=e.direction==="outbound",f_(t),this.enableKeepAlive=t.enableKeepAlive??Ud.enableKeepAlive,this.keepAliveInterval=t.keepAliveInterval??Ud.keepAliveInterval,this.maxInboundStreams=t.maxInboundStreams??Ud.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Ud.maxOutboundStreams,this.decoder=new Om,this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log.trace("muxer created"),this.enableKeepAlive&&(this.log.trace("muxer keepalive enabled interval=%s",this.keepAliveInterval),this.keepAlive=yc(async n=>{try{await this.ping(n)}catch(o){this.log.error("ping error: %s",o)}},this.keepAliveInterval,{runImmediately:!0}),this.keepAlive.start())}onData(e){for(let t of this.decoder.emitFrames(e))this.handleFrame(t)}onCreateStream(){if(this.remoteGoAway!==void 0)throw new mn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new mn("Muxer closed locally");let e=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.maxOutboundStreams)throw new _a("max outbound streams exceeded");this.log.trace("new outgoing stream id=%s",e);let t=this._newStream(e,gr.Init,"outbound");return this.numOutboundStreams++,queueMicrotask(()=>{t.sendWindowUpdate()}),t}async ping(e){if(this.remoteGoAway!==void 0)throw new mn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new mn("Muxer closed locally");if(this.activePing!=null)return qe(this.activePing.promise,e?.signal);this.activePing=Object.assign(Promise.withResolvers(),{id:this.nextPingID++,start:Date.now()}),this.sendPing(this.activePing.id);try{this.rtt=await qe(this.activePing.promise,e?.signal)}finally{this.activePing=void 0}return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.status==="open")try{let t=e?.reason??vt.NormalTermination;this.log.trace("muxer close reason=%s",vt[t]),await super.close(e),this.sendGoAway(t)}finally{this.keepAlive?.stop()}}abort(e){if(this.status==="open")try{super.abort(e);let t=vt.InternalError;d_(e)&&(t=e.reason),this.log.error("muxer abort reason=%s error=%s",t,e),this.sendGoAway(t)}finally{this.keepAlive?.stop()}}onTransportClosed(){try{super.onTransportClosed()}finally{this.keepAlive?.stop()}}_newStream(e,t,n){if(this.streams.find(i=>i.streamId===e)!=null)throw new _("Stream already exists with that id");let o=new Bm({...this.streamOptions,id:`${e}`,streamId:e,state:t,direction:n,sendFrame:this.sendFrame.bind(this),log:this.log.newScope(`${n}:${e}`),getRTT:this.getRTT.bind(this)});return o.addEventListener("close",()=>{this.closeStream(e)},{once:!0}),o}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--}handleFrame(e){let{streamID:t,type:n,length:o}=e.header;if(this.log.trace("received frame %o",m_(e.header)),t===0)switch(n){case at.Ping:{this.handlePing(e.header);return}case at.GoAway:{this.handleGoAway(o);return}default:throw new Qr("Invalid frame type")}else switch(e.header.type){case at.Data:case at.WindowUpdate:{this.handleStreamMessage(e);return}default:throw new Qr("Invalid frame type")}}handlePing(e){if(e.flag===Me.SYN)this.log.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,Me.ACK);else if(e.flag===Me.ACK)this.log.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new Qr("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new nl("ping not requested");if(this.activePing.id!==e)throw new ol("ping doesn't match our id");this.activePing.resolve(Date.now()-this.activePing.start)}handleGoAway(e){this.log.trace("received GoAway reason=%s",vt[e]??"unknown"),this.remoteGoAway=e,e===vt.NormalTermination?this.onTransportClosed():this.abort(new Error("Remote sent GoAway"))}handleStreamMessage(e){let{streamID:t,flag:n,type:o}=e.header;(n&Me.SYN)===Me.SYN&&this.incomingStream(t);let i=this.streams.find(s=>s.streamId===t);if(i===void 0){this.log.trace("frame for missing stream id=%s",t);return}switch(o){case at.WindowUpdate:{i.handleWindowUpdate(e);return}case at.Data:{i.handleData(e);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new _("Both endpoints are clients");if(this.streams.find(n=>n.streamId===e))return;if(this.log.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:at.WindowUpdate,flag:Me.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.maxInboundStreams){this.log("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:at.WindowUpdate,flag:Me.RST,streamID:e,length:0});return}let t=this._newStream(e,gr.SYNReceived,"inbound");this.numInboundStreams++,this.onRemoteStream(t)}sendFrame(e,t){let n;if(e.type===at.Data){if(t==null)throw new Qr("Invalid frame");n=new ne(q5(e),t)}else n=q5(e);return this.log.trace("sending frame %o",m_(e)),this.send(n)}sendPing(e,t=Me.SYN){t===Me.SYN?this.log.trace("sending ping request pingId=%s",e):this.log.trace("sending ping response pingId=%s",e),this.sendFrame({type:at.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=vt.NormalTermination){this.log("sending GoAway reason=%s",vt[e]),this.localGoAway=e,this.sendFrame({type:at.GoAway,flag:0,streamID:0,length:e})}};function y_(r={}){return()=>new Mm(r)}var w_="libp2p",b_="autonat",x_="1.0.0";var rt;(function(r){let e;(function(f){f.DIAL="DIAL",f.DIAL_RESPONSE="DIAL_RESPONSE"})(e=r.MessageType||(r.MessageType={}));let t;(function(f){f[f.DIAL=0]="DIAL",f[f.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(t||(t={})),(function(f){f.codec=()=>lt(t)})(e=r.MessageType||(r.MessageType={}));let n;(function(f){f.OK="OK",f.E_DIAL_ERROR="E_DIAL_ERROR",f.E_DIAL_REFUSED="E_DIAL_REFUSED",f.E_BAD_REQUEST="E_BAD_REQUEST",f.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=r.ResponseStatus||(r.ResponseStatus={}));let o;(function(f){f[f.OK=0]="OK",f[f.E_DIAL_ERROR=100]="E_DIAL_ERROR",f[f.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",f[f.E_BAD_REQUEST=200]="E_BAD_REQUEST",f[f.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(o||(o={})),(function(f){f.codec=()=>lt(o)})(n=r.ResponseStatus||(r.ResponseStatus={}));let i;(function(f){let h;f.codec=()=>(h==null&&(h=me((m,b,v={})=>{if(v.lengthDelimited!==!1&&b.fork(),m.id!=null&&(b.uint32(10),b.bytes(m.id)),m.addrs!=null&&m.addrs.length>0)for(let L of m.addrs)b.uint32(18),b.bytes(L);v.lengthDelimited!==!1&&b.ldelim()},(m,b,v={})=>{let L={addrs:[]},K=b==null?m.len:m.pos+b;for(;m.pos<K;){let V=m.uint32();switch(V>>>3){case 1:{L.id=m.bytes();break}case 2:{if(v.limits?.addrs!=null&&L.addrs.length===v.limits.addrs)throw new Ee('Decode error - repeated field "addrs" had too many elements');L.addrs.push(m.bytes());break}default:{m.skipType(V&7);break}}}return L},function*(m,b,v,L={}){let K={addrs:0},V=b==null?m.len:m.pos+b;for(;m.pos<V;){let Y=m.uint32();switch(Y>>>3){case 1:{yield{field:`${v}.id`,value:m.bytes()};break}case 2:{if(L.limits?.addrs!=null&&K.addrs===L.limits.addrs)throw new Ee('Streaming decode error - repeated field "addrs" had too many elements');yield{field:`${v}.addrs[]`,index:K.addrs,value:m.bytes()},K.addrs++;break}default:{m.skipType(Y&7);break}}}})),h);function p(m){return he(m,f.codec())}f.encode=p;function y(m,b){return fe(m,f.codec(),b)}f.decode=y;function g(m,b){return pe(m,f.codec(),b)}f.stream=g})(i=r.PeerInfo||(r.PeerInfo={}));let s;(function(f){let h;f.codec=()=>(h==null&&(h=me((m,b,v={})=>{v.lengthDelimited!==!1&&b.fork(),m.peer!=null&&(b.uint32(10),r.PeerInfo.codec().encode(m.peer,b)),v.lengthDelimited!==!1&&b.ldelim()},(m,b,v={})=>{let L={},K=b==null?m.len:m.pos+b;for(;m.pos<K;){let V=m.uint32();switch(V>>>3){case 1:{L.peer=r.PeerInfo.codec().decode(m,m.uint32(),{limits:v.limits?.peer});break}default:{m.skipType(V&7);break}}}return L},function*(m,b,v,L={}){let K=b==null?m.len:m.pos+b;for(;m.pos<K;){let V=m.uint32();switch(V>>>3){case 1:{yield*r.PeerInfo.codec().stream(m,m.uint32(),`${v}.peer`,{limits:L.limits?.peer});break}default:{m.skipType(V&7);break}}}})),h);function p(m){return he(m,f.codec())}f.encode=p;function y(m,b){return fe(m,f.codec(),b)}f.decode=y;function g(m,b){return pe(m,f.codec(),b)}f.stream=g})(s=r.Dial||(r.Dial={}));let a;(function(f){let h;f.codec=()=>(h==null&&(h=me((m,b,v={})=>{v.lengthDelimited!==!1&&b.fork(),m.status!=null&&(b.uint32(8),r.ResponseStatus.codec().encode(m.status,b)),m.statusText!=null&&(b.uint32(18),b.string(m.statusText)),m.addr!=null&&(b.uint32(26),b.bytes(m.addr)),v.lengthDelimited!==!1&&b.ldelim()},(m,b,v={})=>{let L={},K=b==null?m.len:m.pos+b;for(;m.pos<K;){let V=m.uint32();switch(V>>>3){case 1:{L.status=r.ResponseStatus.codec().decode(m);break}case 2:{L.statusText=m.string();break}case 3:{L.addr=m.bytes();break}default:{m.skipType(V&7);break}}}return L},function*(m,b,v,L={}){let K=b==null?m.len:m.pos+b;for(;m.pos<K;){let V=m.uint32();switch(V>>>3){case 1:{yield{field:`${v}.status`,value:r.ResponseStatus.codec().decode(m)};break}case 2:{yield{field:`${v}.statusText`,value:m.string()};break}case 3:{yield{field:`${v}.addr`,value:m.bytes()};break}default:{m.skipType(V&7);break}}}})),h);function p(m){return he(m,f.codec())}f.encode=p;function y(m,b){return fe(m,f.codec(),b)}f.decode=y;function g(m,b){return pe(m,f.codec(),b)}f.stream=g})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=me((f,h,p={})=>{p.lengthDelimited!==!1&&h.fork(),f.type!=null&&(h.uint32(8),r.MessageType.codec().encode(f.type,h)),f.dial!=null&&(h.uint32(18),r.Dial.codec().encode(f.dial,h)),f.dialResponse!=null&&(h.uint32(26),r.DialResponse.codec().encode(f.dialResponse,h)),p.lengthDelimited!==!1&&h.ldelim()},(f,h,p={})=>{let y={},g=h==null?f.len:f.pos+h;for(;f.pos<g;){let m=f.uint32();switch(m>>>3){case 1:{y.type=r.MessageType.codec().decode(f);break}case 2:{y.dial=r.Dial.codec().decode(f,f.uint32(),{limits:p.limits?.dial});break}case 3:{y.dialResponse=r.DialResponse.codec().decode(f,f.uint32(),{limits:p.limits?.dialResponse});break}default:{f.skipType(m&7);break}}}return y},function*(f,h,p,y={}){let g=h==null?f.len:f.pos+h;for(;f.pos<g;){let m=f.uint32();switch(m>>>3){case 1:{yield{field:`${p}.type`,value:r.MessageType.codec().decode(f)};break}case 2:{yield*r.Dial.codec().stream(f,f.uint32(),`${p}.dial`,{limits:y.limits?.dial});break}case 3:{yield*r.DialResponse.codec().stream(f,f.uint32(),`${p}.dialResponse`,{limits:y.limits?.dialResponse});break}default:{f.skipType(m&7);break}}}})),c);function l(f){return he(f,r.codec())}r.encode=l;function u(f,h){return fe(f,r.codec(),h)}r.decode=u;function d(f,h){return pe(f,r.codec(),h)}r.stream=d})(rt||(rt={}));var VF=4,KF=8,Um=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??w_}/${b_}/${x_}`,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=wt({name:"libp2p_autonat_dial_results",metrics:e.metrics}),this.findPeers=yc(this.findRandomPeers.bind(this),6e4),this.addressFilter=Ut(1024)}[Symbol.toStringTag]="@libp2p/autonat";[Te]=["@libp2p/autonat"];get[Ir](){return["@libp2p/identify"]}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,(e,t)=>{this.handleIncomingAutonatStream(e,t).catch(n=>{this.log.error("error handling incoming autonat stream - %e",n)})},{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=we([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,t){let n=AbortSignal.timeout(this.timeout);try{let o=Qe(e,{maxDataLength:this.maxMessageSize}).pb(rt),i=await o.read({signal:n}),s=await this.handleAutonatMessage(i,t,{signal:n});await o.write(s,{signal:n}),await e.close({signal:n})}catch(o){this.log.error("error handling incoming autonat stream - %e",o),e.abort(o)}}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(d=>ce(d).host),i=e.dial;if(i==null)return this.log.error("dial was missing from message"),{type:rt.MessageType.DIAL_RESPONSE,dialResponse:{status:rt.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:rt.MessageType.DIAL_RESPONSE,dialResponse:{status:rt.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let d=He(a.id);s=dt(d)}catch(d){return this.log.error("invalid PeerId - %e",d),{type:rt.MessageType.DIAL_RESPONSE,dialResponse:{status:rt.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:rt.MessageType.DIAL_RESPONSE,dialResponse:{status:rt.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(d=>X(d)).filter(d=>{try{let f=ce(d);return ut(d)?!1:f.host!==ce(t.remoteAddr).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}catch{return!1}}).map(d=>(d.getComponents().find(f=>f.code===421)?.value==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:rt.MessageType.DIAL_RESPONSE,dialResponse:{status:rt.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(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:rt.MessageType.DIAL_RESPONSE,dialResponse:{status:rt.ResponseStatus.OK,addr:f.remoteAddr.decapsulateCode(421).bytes}}}catch(h){this.log.error("could not dial %p - %e",s,h),l=h.message}finally{f!=null&&await f.close()}}return{type:rt.MessageType.DIAL_RESPONSE,dialResponse:{status:rt.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())||ce(o.multiaddr).type==="ip6"&&(!t||!ih(o.multiaddr))||ut(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:q6(),queue:new Ht({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})=>ce(s).type==="ip6"),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 %a to verify multiaddr %s",e.remoteAddr,n.multiaddr);let s=await e.newStream(this.protocol,{signal:i});try{let a=Qe(s).pb(rt),[,c]=await Promise.all([a.write({type:rt.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:i}),a.read({signal:i})]);if(c.type!==rt.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!==rt.ResponseStatus.OK&&l!==rt.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===rt.ResponseStatus.OK){if(o.success++,o.type!=="observed"){this.confirmAddress(o);return}}else l===rt.ResponseStatus.E_DIAL_ERROR&&o.failure++;this.log("%a success %d failure %d",o.multiaddr,o.success,o.failure),o.success===VF&&this.confirmAddress(o),o.failure===KF&&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=ce(e);switch(t.type){case"ip4":return t.host.split(".")[0].padStart(3,"0");case"ip6":return t.host.split(":")[0].padStart(4,"0");default:throw new _(`Remote address ${e} was not an IPv4 or Ipv6 address`)}}};function E_(r={}){return e=>new Um(e,r)}var HF="bootstrap",qF=50,zF=1e3,W5=class extends ue{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??zF,this.list=t.list.map(n=>X(n)).filter(n=>Bc.matches(n)?n.getComponents().findLast(i=>i.code===421)?.value==null?(this.log.error("invalid bootstrap multiaddr without peer id"),!1):!0:(this.log.error("invalid multiaddr %a",n),!1)).map(n=>({id:Xe(n.getComponents().findLast(o=>o.code===421)?.value??""),multiaddrs:[n]})),this._init=t}[cs]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[Te]=["@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("failed to discover bootstrap peers - %e",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??HF]:{value:this._init.tagValue??qF,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",e.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function v_(r){return e=>new W5(e,r)}var G5=1e3,S_=60*G5;var t3e=120*S_,A_=1,Fm=5e3,T_=100;var Fd=`${ls}-circuit-relay`,r3e=2*S_,n3e=BigInt(1<<17),ga="/libp2p/circuit/relay/0.2.0/hop",j5="/libp2p/circuit/relay/0.2.0/stop",o3e=30*G5,i3e=30*G5,Y5=300,__=4096,I_=.001;var Gi;(function(r){let e;(function(a){a.RESERVE="RESERVE",a.CONNECT="CONNECT",a.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(a){a[a.RESERVE=0]="RESERVE",a[a.CONNECT=1]="CONNECT",a[a.STATUS=2]="STATUS"})(t||(t={})),(function(a){a.codec=()=>lt(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=me((a,c,l={})=>{l.lengthDelimited!==!1&&c.fork(),a.type!=null&&(c.uint32(8),r.Type.codec().encode(a.type,c)),a.peer!=null&&(c.uint32(18),zi.codec().encode(a.peer,c)),a.reservation!=null&&(c.uint32(26),$d.codec().encode(a.reservation,c)),a.limit!=null&&(c.uint32(34),Wi.codec().encode(a.limit,c)),a.status!=null&&(c.uint32(40),St.codec().encode(a.status,c)),l.lengthDelimited!==!1&&c.ldelim()},(a,c,l={})=>{let u={},d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{u.type=r.Type.codec().decode(a);break}case 2:{u.peer=zi.codec().decode(a,a.uint32(),{limits:l.limits?.peer});break}case 3:{u.reservation=$d.codec().decode(a,a.uint32(),{limits:l.limits?.reservation});break}case 4:{u.limit=Wi.codec().decode(a,a.uint32(),{limits:l.limits?.limit});break}case 5:{u.status=St.codec().decode(a);break}default:{a.skipType(f&7);break}}}return u},function*(a,c,l,u={}){let d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{yield{field:`${l}.type`,value:r.Type.codec().decode(a)};break}case 2:{yield*zi.codec().stream(a,a.uint32(),`${l}.peer`,{limits:u.limits?.peer});break}case 3:{yield*$d.codec().stream(a,a.uint32(),`${l}.reservation`,{limits:u.limits?.reservation});break}case 4:{yield*Wi.codec().stream(a,a.uint32(),`${l}.limit`,{limits:u.limits?.limit});break}case 5:{yield{field:`${l}.status`,value:St.codec().decode(a)};break}default:{a.skipType(f&7);break}}}})),n);function o(a){return he(a,r.codec())}r.encode=o;function i(a,c){return fe(a,r.codec(),c)}r.decode=i;function s(a,c){return pe(a,r.codec(),c)}r.stream=s})(Gi||(Gi={}));var po;(function(r){let e;(function(a){a.CONNECT="CONNECT",a.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(a){a[a.CONNECT=0]="CONNECT",a[a.STATUS=1]="STATUS"})(t||(t={})),(function(a){a.codec=()=>lt(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=me((a,c,l={})=>{l.lengthDelimited!==!1&&c.fork(),a.type!=null&&(c.uint32(8),r.Type.codec().encode(a.type,c)),a.peer!=null&&(c.uint32(18),zi.codec().encode(a.peer,c)),a.limit!=null&&(c.uint32(26),Wi.codec().encode(a.limit,c)),a.status!=null&&(c.uint32(32),St.codec().encode(a.status,c)),l.lengthDelimited!==!1&&c.ldelim()},(a,c,l={})=>{let u={},d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{u.type=r.Type.codec().decode(a);break}case 2:{u.peer=zi.codec().decode(a,a.uint32(),{limits:l.limits?.peer});break}case 3:{u.limit=Wi.codec().decode(a,a.uint32(),{limits:l.limits?.limit});break}case 4:{u.status=St.codec().decode(a);break}default:{a.skipType(f&7);break}}}return u},function*(a,c,l,u={}){let d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{yield{field:`${l}.type`,value:r.Type.codec().decode(a)};break}case 2:{yield*zi.codec().stream(a,a.uint32(),`${l}.peer`,{limits:u.limits?.peer});break}case 3:{yield*Wi.codec().stream(a,a.uint32(),`${l}.limit`,{limits:u.limits?.limit});break}case 4:{yield{field:`${l}.status`,value:St.codec().decode(a)};break}default:{a.skipType(f&7);break}}}})),n);function o(a){return he(a,r.codec())}r.encode=o;function i(a,c){return fe(a,r.codec(),c)}r.decode=i;function s(a,c){return pe(a,r.codec(),c)}r.stream=s})(po||(po={}));var zi;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{if(a.lengthDelimited!==!1&&s.fork(),i.id!=null&&i.id.byteLength>0&&(s.uint32(10),s.bytes(i.id)),i.addrs!=null&&i.addrs.length>0)for(let c of i.addrs)s.uint32(18),s.bytes(c);a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={id:de(0),addrs:[]},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.id=i.bytes();break}case 2:{if(a.limits?.addrs!=null&&c.addrs.length===a.limits.addrs)throw new Ee('Decode error - repeated field "addrs" had too many elements');c.addrs.push(i.bytes());break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l={addrs:0},u=s==null?i.len:i.pos+s;for(;i.pos<u;){let d=i.uint32();switch(d>>>3){case 1:{yield{field:`${a}.id`,value:i.bytes()};break}case 2:{if(c.limits?.addrs!=null&&l.addrs===c.limits.addrs)throw new Ee('Streaming decode error - repeated field "addrs" had too many elements');yield{field:`${a}.addrs[]`,index:l.addrs,value:i.bytes()},l.addrs++;break}default:{i.skipType(d&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(zi||(zi={}));var $d;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{if(a.lengthDelimited!==!1&&s.fork(),i.expire!=null&&i.expire!==0n&&(s.uint32(8),s.uint64(i.expire)),i.addrs!=null&&i.addrs.length>0)for(let c of i.addrs)s.uint32(18),s.bytes(c);i.voucher!=null&&(s.uint32(26),Kd.codec().encode(i.voucher,s)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={expire:0n,addrs:[]},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.expire=i.uint64();break}case 2:{if(a.limits?.addrs!=null&&c.addrs.length===a.limits.addrs)throw new Ee('Decode error - repeated field "addrs" had too many elements');c.addrs.push(i.bytes());break}case 3:{c.voucher=Kd.codec().decode(i,i.uint32(),{limits:a.limits?.voucher});break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l={addrs:0},u=s==null?i.len:i.pos+s;for(;i.pos<u;){let d=i.uint32();switch(d>>>3){case 1:{yield{field:`${a}.expire`,value:i.uint64()};break}case 2:{if(c.limits?.addrs!=null&&l.addrs===c.limits.addrs)throw new Ee('Streaming decode error - repeated field "addrs" had too many elements');yield{field:`${a}.addrs[]`,index:l.addrs,value:i.bytes()},l.addrs++;break}case 3:{yield*Kd.codec().stream(i,i.uint32(),`${a}.voucher`,{limits:c.limits?.voucher});break}default:{i.skipType(d&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})($d||($d={}));var Wi;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.duration!=null&&(s.uint32(8),s.uint32(i.duration)),i.data!=null&&(s.uint32(16),s.uint64(i.data)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.duration=i.uint32();break}case 2:{c.data=i.uint64();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.duration`,value:i.uint32()};break}case 2:{yield{field:`${a}.data`,value:i.uint64()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Wi||(Wi={}));var St;(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"})(St||(St={}));var X5;(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"})(X5||(X5={}));(function(r){r.codec=()=>lt(X5)})(St||(St={}));var Vd;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.relay!=null&&i.relay.byteLength>0&&(s.uint32(10),s.bytes(i.relay)),i.peer!=null&&i.peer.byteLength>0&&(s.uint32(18),s.bytes(i.peer)),i.expiration!=null&&i.expiration!==0n&&(s.uint32(24),s.uint64(i.expiration)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={relay:de(0),peer:de(0),expiration:0n},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.relay=i.bytes();break}case 2:{c.peer=i.bytes();break}case 3:{c.expiration=i.uint64();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.relay`,value:i.bytes()};break}case 2:{yield{field:`${a}.peer`,value:i.bytes()};break}case 3:{yield{field:`${a}.expiration`,value:i.uint64()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Vd||(Vd={}));var Kd;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.publicKey!=null&&i.publicKey.byteLength>0&&(s.uint32(10),s.bytes(i.publicKey)),i.payloadType!=null&&i.payloadType.byteLength>0&&(s.uint32(18),s.bytes(i.payloadType)),i.payload!=null&&(s.uint32(26),Vd.codec().encode(i.payload,s)),i.signature!=null&&i.signature.byteLength>0&&(s.uint32(42),s.bytes(i.signature)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={publicKey:de(0),payloadType:de(0),signature:de(0)},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.publicKey=i.bytes();break}case 2:{c.payloadType=i.bytes();break}case 3:{c.payload=Vd.codec().decode(i,i.uint32(),{limits:a.limits?.payload});break}case 5:{c.signature=i.bytes();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.publicKey`,value:i.bytes()};break}case 2:{yield{field:`${a}.payloadType`,value:i.bytes()};break}case 3:{yield*Vd.codec().stream(i,i.uint32(),`${a}.payload`,{limits:c.limits?.payload});break}case 5:{yield{field:`${a}.signature`,value:i.bytes()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Kd||(Kd={}));var Hd=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},$m=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},Vm=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function Q5(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var qd=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}},Km=Ke(Be(Bc.matchers[0],Ve(290))),Hm=Ke(Ve(290));var qm=class extends ue{components;started;running;topologyId;log;discoveryController;filter;queue;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.components=e,this.started=!1,this.running=!1,this.filter=t.filter,this.discoveryController=new AbortController,this.discoveryController.signal,this.dialPeer=this.dialPeer.bind(this),this.onPeer=this.onPeer.bind(this)}isStarted(){return this.started}async start(){this.topologyId=await this.components.registrar.register(ga,{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.components.registrar.unregister(this.topologyId),this.running&&this.stopDiscovery(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,this.discoveryController.signal,this.components.events.addEventListener("peer:discovery",this.onPeer),Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.components.peerStore.all({filters:[n=>n.protocols.includes(ga)],orders:[()=>Math.random()<.5?1:-1,(n,o)=>{let i=k_(n),s=k_(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 Ht({concurrency:5});this.log("start random walk");for await(let n of this.components.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.components.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.components.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(this.dialPeer,{peerId:n.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to random peer %p - %e",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",e)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort(),this.queue?.clear(),this.components.events.removeEventListener("peer:discovery",this.onPeer)}onPeer(e){this.log.trace("maybe dialing discovered peer %p",e.detail.id),this.maybeDialPeer(e).catch(t=>{this.log.trace("error dialing discovered peer %p - %e",e.detail.id,t)})}async maybeDialPeer(e){if(this.queue==null)return;let t=e.detail.id,n=e.detail.multiaddrs;if(this.queue.has(t)){this.log.trace("random peer %p was already in queue",t);return}if(this.components.connectionManager.getConnections(t)?.length>0){this.log.trace("random peer %p was already connected",t);return}if(!await this.components.connectionManager.isDialable(n)){this.log.trace("random peer %p was not dialable",t);return}this.queue?.add(this.dialPeer,{peerId:e.detail.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to discovered peer %p - %e",e.detail.id,o)})}async dialPeer({peerId:e,signal:t}){let n=we([AbortSignal.timeout(5e3),t]);try{await this.components.connectionManager.openConnection(e,{signal:n})}finally{n.clear()}}};function k_(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(N(e)).getTime()}var Z5=class extends ue{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??Fm,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(Hm.exactMatch(e))this.log("searching for circuit relay servers"),this.reservationId=this.reservationStore.reserveRelay();else if(Km.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 as(`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=>X(t).encapsulate("/p2p-circuit")),this.listeningAddrs.forEach(t=>{this.addressManager.confirmObservedAddr(t,{type:"transport"})}),queueMicrotask(()=>{this.safeDispatchEvent("listening")})}};function C_(r){return new Z5(r)}var R_="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var P_=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=R_[t[r]&63];return e};var WF=60*1e3*10,GF=60*1e3*5,jF=30*1e3,zm=class extends ue{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 er,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??T_,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??Fm,this.started=!1,this.relayFilter=Ut(100),this.reserveQueue=new Ht({concurrency:t?.reservationConcurrency??A_,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(Fd)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[Fd]: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("failed to clean up and redial old relays during afterStart - %e",e)})}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}reserveRelay(){let e=P_();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 as("Cannot use self as relay");if(this.reserveQueue.size>this.maxReservationQueueLength)throw new Vm("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 as("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),y=!1;if(p.length===0&&this.log("already have relay reservation with %p but we are no longer connected",e),p.map(g=>g.id).includes(i.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),y=!0),y&&Q5(i.reservation.expire)>WF)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 Hd("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(Ot.matches(a.remoteAddr))throw new $m("not creating reservation over relayed connection");let c=await this.#e(a,{signal:s}),l=Q5(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-GF,jF),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 Hd("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:{[Fd]:{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(ga,t),i=Qe(n).pb(Gi);this.log.trace("send RESERVE to %p",e.remotePeer),await i.write({type:Gi.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 %s",s.status),s.status===St.OK&&s.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of s.reservation.addrs){let u=X(l);u.getComponents().find(d=>d.code===421)==null&&(u=u.encapsulate(`/p2p/${e.remotePeer}`)),u=X(u.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(u.toString())}return s.reservation.addrs=[...c].map(l=>X(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:{[Fd]: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=Ut(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var J5=class extends Si{stream;init;constructor(e){super({...e,direction:e.stream.direction}),this.init=e,this.stream=e.stream,this.stream.addEventListener("close",t=>{this.onTransportClosed(t.error)}),this.stream.addEventListener("remoteCloseWrite",t=>{this.onRemoteCloseWrite(),this.close().catch(n=>{this.abort(n)})}),this.stream.addEventListener("message",t=>{e.onDataRead?.(t.data),this.onData(t.data)}),this.stream.addEventListener("drain",()=>{this.safeDispatchEvent("drain")})}sendData(e){return this.init.onDataWrite?.(e),{sentBytes:e.byteLength,canSendMore:this.stream.send(e)}}async sendClose(e){await this.stream.close(e)}sendReset(){this.stream.abort(new Error("An error occurred"))}sendPause(){this.stream.pause()}sendResume(){this.stream.resume()}};function ey(r){return new J5(r)}var YF=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(X)}catch{return!1}return!0},L_={maxInboundStopStreams:Y5,maxOutboundStopStreams:Y5,stopTimeout:3e4},Wm=class{components;discovery;reservationStore;maxInboundStopStreams;maxOutboundStopStreams;started;log;shutdownController;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.maxInboundStopStreams=t.maxInboundStopStreams??L_.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??L_.maxOutboundStopStreams,this.shutdownController=new AbortController,this.discovery=new qm(e,{filter:t.discoveryFilter??z6(__,I_)}),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 - %e",n.detail,o)})}),this.reservationStore=new zm(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,this.onStop=this.onStop.bind(this)}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[Te]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[Ir](){return this.discovery!=null?["@libp2p/identify"]:[]}[ui]=!0;isStarted(){return this.started}async start(){this.shutdownController=new AbortController,this.shutdownController.signal,await this.components.registrar.handle(j5,this.onStop,{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await Et(this.discovery,this.reservationStore),this.started=!0}async stop(){this.shutdownController.abort(),await Tt(this.discovery,this.reservationStore),await this.components.registrar.unhandle(j5),this.started=!1}async dial(e,t){let n=e.toString().split("/p2p-circuit"),o=X(n[0]),i=X(n[n.length-1]),s=o.getComponents().find(h=>h.code===421)?.value,a=i.getComponents().find(h=>h.code===421)?.value;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 ci(`C${h}`)}let c=Xe(s),l=Xe(a),d=this.components.connectionManager.getConnections(c)[0];d==null?(await this.components.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new O("circuit-relay:open-connection")),d=await this.components.connectionManager.openConnection(c,t)):t.onProgress?.(new O("circuit-relay:reuse-connection"));let f;try{t.onProgress?.(new O("circuit-relay:open-hop-stream")),f=await d.newStream(ga,t);let h=Qe(f).pb(Gi);t.onProgress?.(new O("circuit-relay:write-connect-message")),await h.write({type:Gi.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[X(i).bytes]}},t),t.onProgress?.(new O("circuit-relay:read-connect-response"));let p=await h.read(t);if(p.status!==St.OK)throw new ve(`failed to connect via relay with status ${p?.status?.toString()??"undefined"}`);let y=new qd(p.limit),g=ey({stream:h.unwrap().unwrap(),remoteAddr:e,localAddr:o.encapsulate(`/p2p-circuit/p2p/${this.components.peerId.toString()}`),onDataRead:y.onData,onDataWrite:y.onData,log:f.log.newScope("circuit-relay:connection")}),m=await this.components.upgrader.upgradeOutbound(g,{...t,limits:y.getLimits()});return m.log("outbound relayed connection established to %p with limits %o, over connection %s",m.remotePeer,p.limit??"none",d.id),m}catch(h){throw this.log.error("circuit relay dial to destination %p via relay %p failed - %e",l,c,h),f?.abort(h),h}}createListener(e){return C_({peerId:this.components.peerId,connectionManager:this.components.connectionManager,addressManager:this.components.addressManager,reservationStore:this.reservationStore,logger:this.components.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>Km.exactMatch(t)||Hm.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>Ot.exactMatch(t))}async onStop(e,t){let n=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);try{if(!this.reservationStore.hasReservation(t.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.components.transportManager.listen([t.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 - %e",d)}let o=Qe(e).pb(po),i=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",t.remotePeer,i.type),i?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",t.remotePeer),await o.write({type:po.Type.STATUS,status:St.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(i.type!==po.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await o.write({type:po.Type.STATUS,status:St.UNEXPECTED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(!YF(i)){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await o.write({type:po.Type.STATUS,status:St.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}let s=dt(He(i.peer.id));if(await this.components.connectionGater.denyInboundRelayedConnection?.(t.remotePeer,s)===!0){this.log.error("connection gater denied inbound relayed connection from %p",t.remotePeer),await o.write({type:po.Type.STATUS,status:St.PERMISSION_DENIED},{signal:n}),await e.close({signal:n});return}this.log.trace("sending success response to %p",t.remotePeer),await o.write({type:po.Type.STATUS,status:St.OK},{signal:n});let a=new qd(i.limit),c=t.remoteAddr.encapsulate(`/p2p-circuit/p2p/${s.toString()}`),l=this.components.addressManager.getAddresses()[0],u=ey({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,onDataRead:a.onData,onDataWrite:a.onData,log:e.log.newScope("circuit-relay:connection")});await this.components.upgrader.upgradeInbound(u,{limits:a.getLimits(),signal:n}),u.log("inbound relayed connection established to %p with limits %o, over connection %s",s,i.limit??"none",t.id)}finally{n?.clear()}}};function D_(r={}){return e=>new Wm(e,r)}var Vn;(function(r){let e;(function(a){a.UNUSED="UNUSED",a.CONNECT="CONNECT",a.SYNC="SYNC"})(e=r.Type||(r.Type={}));let t;(function(a){a[a.UNUSED=0]="UNUSED",a[a.CONNECT=100]="CONNECT",a[a.SYNC=300]="SYNC"})(t||(t={})),(function(a){a.codec=()=>lt(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=me((a,c,l={})=>{if(l.lengthDelimited!==!1&&c.fork(),a.type!=null&&(c.uint32(8),r.Type.codec().encode(a.type,c)),a.observedAddresses!=null&&a.observedAddresses.length>0)for(let u of a.observedAddresses)c.uint32(18),c.bytes(u);l.lengthDelimited!==!1&&c.ldelim()},(a,c,l={})=>{let u={observedAddresses:[]},d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{u.type=r.Type.codec().decode(a);break}case 2:{if(l.limits?.observedAddresses!=null&&u.observedAddresses.length===l.limits.observedAddresses)throw new Ee('Decode error - repeated field "observedAddresses" had too many elements');u.observedAddresses.push(a.bytes());break}default:{a.skipType(f&7);break}}}return u},function*(a,c,l,u={}){let d={observedAddresses:0},f=c==null?a.len:a.pos+c;for(;a.pos<f;){let h=a.uint32();switch(h>>>3){case 1:{yield{field:`${l}.type`,value:r.Type.codec().decode(a)};break}case 2:{if(u.limits?.observedAddresses!=null&&d.observedAddresses===u.limits.observedAddresses)throw new Ee('Streaming decode error - repeated field "observedAddresses" had too many elements');yield{field:`${l}.observedAddresses[]`,index:d.observedAddresses,value:a.bytes()},d.observedAddresses++;break}default:{a.skipType(h&7);break}}}})),n);function o(a){return he(a,r.codec())}r.encode=o;function i(a,c){return fe(a,r.codec(),c)}r.decode=i;function s(a,c){return pe(a,r.codec(),c)}r.stream=s})(Vn||(Vn={}));function ty(r,e){return Ot.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:gp.matches(r)?!0:xS.matches(r)?!ut(r):!1}var N_=1024*4,O_=100,Gm={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},jm=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??Gm.timeout,this.retries=t.retries??Gm.retries,this.maxInboundStreams=t.maxInboundStreams??Gm.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Gm.maxOutboundStreams,this.handleIncomingUpgrade=this.handleIncomingUpgrade.bind(this)}[Symbol.toStringTag]="@libp2p/dcutr";[Ir]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(zd,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{Ot.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt - %e",n)})}}),await this.registrar.handle(zd,this.handleIncomingUpgrade,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(zd),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([zd],{signal:o.signal,runOnLimitedConnection:!0});let i=Qe(t,{maxDataLength:N_}).pb(Vn);this.log("B sending connect to %p",e.remotePeer);let s=Date.now();await i.write({type:Vn.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!==Vn.Type.CONNECT)throw this.log("A sent wrong message type"),new ve("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 ve("DCUtR connect message had no multiaddrs");let l=Date.now()-s;this.log("A sending sync, rtt %dms",l),await i.write({type:Vn.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await sx(l/2),this.log("B dialing",c);let u=await this.connectionManager.openConnection(c,{signal:o.signal,priority:O_,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 - %e",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.getComponents().find(s=>s.code===421)?.value==null?i.encapsulate(`/p2p/${e.remotePeer}`):i}).filter(o=>ty(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(Ot.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",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)},o=Qe(e,{maxDataLength:N_}).pb(Vn);this.log("A receiving connect");let i=await o.read(n);if(i.type!==Vn.Type.CONNECT)throw this.log("B sent wrong message type"),new ve("DCUtR message type was incorrect");if(i.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new ve("DCUtR connect message had no multiaddrs");let s=this.getDialableMultiaddrs(i.observedAddresses);if(s.length===0)throw this.log("B had no dialable multiaddrs in %o",i.observedAddresses.map(l=>X(l))),new ve("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await o.write({type:Vn.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==Vn.Type.SYNC)throw new ve("DCUtR message type was incorrect");this.log("A dialing",s);let c=await this.connectionManager.openConnection(s,{signal:n.signal,priority:O_,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n),await e.close(n)}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let o=X(n);if(!ty(o,this.transportManager))continue;t.push(o)}catch{}return t}};var zd="/libp2p/dcutr";function B_(r={}){return e=>new jm(e,r)}function re(r){if(r!==void 0&&r!==re.REQUEST&&r!==re.RESPONSE)throw new Error("type must be REQUEST or RESPONSE");r===void 0||this.initialize(r),this.maxHeaderSize=re.maxHeaderSize}re.prototype.initialize=function(r,e){if(r!==re.REQUEST&&r!==re.RESPONSE)throw new Error("type must be REQUEST or RESPONSE");this.type=r,this.state=r+"_LINE",this.info={headers:[],upgrade:!1},this.trailers=[],this.line="",this.isChunked=!1,this.connection="",this.headerSize=0,this.body_bytes=null,this.isUserCall=!1,this.hadError=!1};re.encoding="ascii";re.maxHeaderSize=80*1024;re.REQUEST="REQUEST";re.RESPONSE="RESPONSE";var M_=re.kOnHeaders=1,ry=re.kOnHeadersComplete=2,Ym=re.kOnBody=3,ny=re.kOnMessageComplete=4;re.prototype[M_]=re.prototype[ry]=re.prototype[Ym]=re.prototype[ny]=function(){};var U_=!0;Object.defineProperty(re,"kOnExecute",{get:function(){return U_=!1,99}});var F_=re.methods=["DELETE","GET","HEAD","POST","PUT","CONNECT","OPTIONS","TRACE","COPY","LOCK","MKCOL","MOVE","PROPFIND","PROPPATCH","SEARCH","UNLOCK","BIND","REBIND","UNBIND","ACL","REPORT","MKACTIVITY","CHECKOUT","MERGE","M-SEARCH","NOTIFY","SUBSCRIBE","UNSUBSCRIBE","PATCH","PURGE","MKCALENDAR","LINK","UNLINK","SOURCE"],$_=F_.indexOf("CONNECT");re.prototype.reinitialize=re;re.prototype.close=re.prototype.pause=re.prototype.resume=re.prototype.remove=re.prototype.free=function(){};re.prototype._compatMode0_11=!1;re.prototype.getAsyncId=function(){return 0};var XF={REQUEST_LINE:!0,RESPONSE_LINE:!0,HEADER:!0};re.prototype.execute=function(r,e,t){if(!(this instanceof re))throw new TypeError("not a HTTPParser");e=e||0,t=typeof t=="number"?t:r.length,this.chunk=r,this.offset=e;var n=this.end=e+t;try{for(;this.offset<n&&!this[this.state](););}catch(o){if(this.isUserCall)throw o;return this.hadError=!0,o}return this.chunk=null,t=this.offset-e,XF[this.state]&&(this.headerSize+=t,this.headerSize>(this.maxHeaderSize||re.maxHeaderSize))?new Error("max header size exceeded"):t};var QF={REQUEST_LINE:!0,RESPONSE_LINE:!0,BODY_RAW:!0};re.prototype.finish=function(){if(!this.hadError){if(!QF[this.state])return new Error("invalid state for EOF");this.state==="BODY_RAW"&&this.userCall()(this[ny]())}};re.prototype.consume=re.prototype.unconsume=re.prototype.getCurrentBuffer=function(){};re.prototype.userCall=function(){this.isUserCall=!0;var r=this;return function(e){return r.isUserCall=!1,e}};re.prototype.nextRequest=function(){this.userCall()(this[ny]()),this.reinitialize(this.type)};re.prototype.consumeLine=function(){for(var r=this.end,e=this.chunk,t=this.offset;t<r;t++)if(e[t]===10){var n=this.line+N(e.subarray(this.offset,t),re.encoding);return n.charAt(n.length-1)==="\r"&&(n=n.substr(0,n.length-1)),this.line="",this.offset=t+1,n}this.line+=N(e.subarray(this.offset,this.end),re.encoding),this.offset=this.end};var ZF=/^([^: \t]+):[ \t]*((?:.*[^ \t])|)/,JF=/^[ \t]+(.*[^ \t])/;re.prototype.parseHeader=function(r,e){if(r.indexOf("\r")!==-1)throw Xm("HPE_LF_EXPECTED");var t=ZF.exec(r),n=t&&t[1];if(n)e.push(n),e.push(t[2]);else{var o=JF.exec(r);o&&e.length&&(e[e.length-1]&&(e[e.length-1]+=" "),e[e.length-1]+=o[1])}};var e$=/^([A-Z-]+) ([^ ]+) HTTP\/(\d)\.(\d)$/;re.prototype.REQUEST_LINE=function(){var r=this.consumeLine();if(r){var e=e$.exec(r);if(e===null)throw Xm("HPE_INVALID_CONSTANT");if(this.info.method=this._compatMode0_11?e[1]:F_.indexOf(e[1]),this.info.method===-1)throw new Error("invalid request method");this.info.url=e[2],this.info.versionMajor=+e[3],this.info.versionMinor=+e[4],this.body_bytes=0,this.state="HEADER"}};var t$=/^HTTP\/(\d)\.(\d) (\d{3}) ?(.*)$/;re.prototype.RESPONSE_LINE=function(){var r=this.consumeLine();if(r){var e=t$.exec(r);if(e===null)throw Xm("HPE_INVALID_CONSTANT");this.info.versionMajor=+e[1],this.info.versionMinor=+e[2];var t=this.info.statusCode=+e[3];this.info.statusMessage=e[4],((t/100|0)===1||t===204||t===304)&&(this.body_bytes=0),this.state="HEADER"}};re.prototype.shouldKeepAlive=function(){if(this.info.versionMajor>0&&this.info.versionMinor>0){if(this.connection.indexOf("close")!==-1)return!1}else if(this.connection.indexOf("keep-alive")===-1)return!1;return!!(this.body_bytes!==null||this.isChunked)};re.prototype.HEADER=function(){var r=this.consumeLine();if(r!==void 0){var e=this.info;if(r)this.parseHeader(r,e.headers);else{for(var t=e.headers,n=!1,o,i=!1,s=0;s<t.length;s+=2)switch(t[s].toLowerCase()){case"transfer-encoding":this.isChunked=t[s+1].toLowerCase()==="chunked";break;case"content-length":if(o=+t[s+1],n){if(o!==this.body_bytes)throw Xm("HPE_UNEXPECTED_CONTENT_LENGTH")}else n=!0,this.body_bytes=o;break;case"connection":this.connection+=t[s+1].toLowerCase();break;case"upgrade":i=!0;break}this.isChunked&&n&&(n=!1,this.body_bytes=null),i&&this.connection.indexOf("upgrade")!=-1?e.upgrade=this.type===re.REQUEST||e.statusCode===101:e.upgrade=e.method===$_,this.isChunked&&e.upgrade&&(this.isChunked=!1),e.shouldKeepAlive=this.shouldKeepAlive();var a;if(U_?a=this.userCall()(this[ry](e)):a=this.userCall()(this[ry](e.versionMajor,e.versionMinor,e.headers,e.method,e.url,e.statusCode,e.statusMessage,e.upgrade,e.shouldKeepAlive)),a===2)return this.nextRequest(),!0;if(this.isChunked&&!a)this.state="BODY_CHUNKHEAD";else{if(a||this.body_bytes===0)return this.nextRequest(),e.upgrade;this.body_bytes===null?this.state="BODY_RAW":this.state="BODY_SIZED"}}}};re.prototype.BODY_CHUNKHEAD=function(){var r=this.consumeLine();r!==void 0&&(this.body_bytes=parseInt(r,16),this.body_bytes?this.state="BODY_CHUNK":this.state="BODY_CHUNKTRAILERS")};re.prototype.BODY_CHUNK=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[Ym](this.chunk.slice(this.offset,this.offset+r),0,r)),this.offset+=r,this.body_bytes-=r,this.body_bytes||(this.state="BODY_CHUNKEMPTYLINE")};re.prototype.BODY_CHUNKEMPTYLINE=function(){var r=this.consumeLine();if(r!==void 0){if(r!=="")throw new Error("Expected empty line");this.state="BODY_CHUNKHEAD"}};re.prototype.BODY_CHUNKTRAILERS=function(){var r=this.consumeLine();r!==void 0&&(r?this.parseHeader(r,this.trailers):(this.trailers.length&&this.userCall()(this[M_](this.trailers,"")),this.nextRequest()))};re.prototype.BODY_RAW=function(){this.userCall()(this[Ym](this.chunk.slice(this.offset,this.end),0,this.end-this.offset)),this.offset=this.end};re.prototype.BODY_SIZED=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[Ym](this.chunk.slice(this.offset,this.offset+r),0,r)),this.offset+=r,this.body_bytes-=r,this.body_bytes||this.nextRequest()};["Headers","HeadersComplete","Body","MessageComplete"].forEach(function(r){var e=re["kOn"+r];Object.defineProperty(re.prototype,"on"+r,{get:function(){return this[e]},set:function(t){return this._compatMode0_11=!0,$_="CONNECT",this[e]=t}})});function Xm(r){var e=new Error("Parse Error");return e.code=r,e}function V_(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")}function oy(r,e={}){let t=V_(r),n={_cancelled:!1,async start(){this._cancelled=!1},async pull(o){try{let{value:i,done:s}=await t.next();if(this._cancelled)return;if(s===!0){o.close();return}o.enqueue(i)}catch(i){o.error(i)}},cancel(){this._cancelled=!0}};return new globalThis.ReadableStream(n,e)}var r$=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),K_=vl({name:"sha-1",code:17,encode:r$("SHA-1")});var Qm=class extends globalThis.Request{constructor(e,t={}){let n=t.method??"GET",o=mo(t),i=t.body;Zm(n,o)&&(t.method="UPGRADE"),super(e,t),Object.defineProperties(this,{body:{value:i,writable:!1},method:{value:n,writable:!1},headers:{value:o,writable:!1}})}};var H_={100:"Continue",101:"Switching Protocols",102:"Processing",103:"Early Hints",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",208:"Already Reported",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",308:"Permanent Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Payload Too Large",414:"URI Too Long",415:"Unsupported Media Type",416:"Range Not Satisfiable",417:"Expectation Failed",418:"I'm a Teapot",421:"Misdirected Request",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",425:"Too Early",426:"Upgrade Required",428:"Precondition Required",429:"Too Many Requests",431:"Request Header Fields Too Large",451:"Unavailable For Legal Reasons",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",508:"Loop Detected",509:"Bandwidth Limit Exceeded",510:"Not Extended",511:"Network Authentication Required"};var go=class extends globalThis.Response{constructor(e,t={}){let n=mo(t),o=t.status??200;(o<200||o>599)&&(t.status=200),super(e,t),Object.defineProperties(this,{status:{value:o,writable:!1},statusText:{value:H_[o],writable:!1},headers:{value:n,writable:!1}})}};var n$=["dns","dns4","dns6","dnsaddr"];function Gd(r,e){if(r instanceof URL)return r;let t=e2(r,e),{httpPath:n}=t2(r);return new URL(`http://${t}${n}`)}function jd(r){return r instanceof Uint8Array?r:r instanceof DataView?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):new Uint8Array(r,0,r.byteLength)}function z_(r,e){let t={method:r.method,headers:r.headers};if((t.method!=="GET"||r.upgrade)&&t.method!=="HEAD"){let n=e;r.upgrade||(n=i$(e,r.headers.get("content-length"))),t.body=oy(n),t.duplex="half"}return new Qm(iy(r).toString(),t)}async function W_(r,e){if(e.send(C([`HTTP/1.1 ${r.status} ${r.statusText}`,...Jm(r.headers),"",""].join(`\r
52
+ `))),r.body==null){await e.close().catch(n=>{e.abort(n)});return}let t=r.body.getReader();for(;;){let n=await t.read();if(n.value!=null&&(e.send(n.value)||await e.onDrain()),n.done)break}await e.close().catch(n=>{e.abort(n)})}var G_=C(["HTTP/1.1 404 Not Found","Connection: close","",""].join(`\r
53
+ `)),o$=C(["HTTP/1.1 400 Bad Request","Connection: close","",""].join(`\r
54
+ `)),r6e=C(["HTTP/1.1 500 Internal Server Error","Connection: close","",""].join(`\r
55
+ `)),n6e=C(["HTTP/1.1 501 Not Implemented","Connection: close","",""].join(`\r
56
+ `));function Jm(r){let e=[];r.get("Connection")==null&&r.set("Connection","close");for(let[t,n]of r.entries())e.push(`${t}: ${n}`);return e}async function*i$(r,e){if(e=parseInt(`${e??""}`),e==null||isNaN(e))return r;let t=0;for await(let n of r){if(t+=n.byteLength,t>e){yield n.subarray(0,t-e);return}if(yield n.subarray(),t===e)return}}function sl(r,e){if(typeof r=="string"&&(r.startsWith("/")?r=X(r):r=new URL(r)),At(r)&&(r=X(`/p2p/${r}`)),r instanceof URL&&r.protocol==="multiaddr:"&&(r=Oc(r.toString())),eo(r)&&(r=[r]),Array.isArray(r)){for(let t of r)if(t.getComponents().some(({name:o})=>o==="http")){let o=Ui(t);return new URL(`${o}${e??""}`)}}return e==null?r:r instanceof URL?new URL(`${r}${e.substring(1)}`):r.map(t=>t.encapsulate(`/http-path/${encodeURIComponent(e.substring(1))}`))}function mo(r={}){return r.headers instanceof Headers||(r.headers=new Headers(r.headers)),r.headers}function Wd(r){return r!=null&&r!==""}function e2(r,e){let t,n=80,o="http:";if(r instanceof URL&&(t=r.hostname,n=parseInt(r.port,10),o=r.protocol),Wd(t)||(t=e.get("host")??void 0),!Wd(t)&&Array.isArray(r))for(let i of r){let a=i.getComponents().filter(({name:c})=>n$.includes(c))?.[0]?.value;if(a!=null){t=a;break}}if(!Wd(t)&&Array.isArray(r))for(let i of r){let s=i.getComponents().findLast(a=>a.code===421)?.value;try{let a=ce(i);a.port!=null&&(n=a.port)}catch{}if(s!=null){t=Xe(s).toCID().toString(Jr);break}}if(!Wd(t)&&Array.isArray(r))for(let i of r)try{let s=ce(i);s.host!=null&&(t=s.host);break}catch{}if(Wd(t))return o==="http:"&&n!==80&&(t=`${t}:${n}`),o==="https:"&&n!==443&&(t=`${t}:${n}`),t;throw new _("Could not determine request host name - a request must have a host header, be made to a DNS or IP-based multiaddr or an http(s) URL")}function t2(r){let e="/";return r=r.map(t=>X(t.getComponents().filter(n=>n.name==="http-path"?(e=n.value??"/",!1):!0))),{httpPath:e,addresses:r}}function r2(r,e=["GET"]){return r==null?e:(typeof r=="string"&&(r=[r]),r.map(t=>t.toUpperCase()))}function iy(r){let e=r.url??"/";if(e.startsWith("http"))return new URL(e);let t=s$(r);return new URL(`http://${t}${e}`)}function s$(r){let e=r.headers?.host;if(e==null&&(e=r.headers?.Host),e==null&&typeof r.headers.get=="function"&&(e=r.headers.get("host")),e==null)throw new _("Could not read host");return e}function Zm(r,e){return r==="GET"&&e.get("connection")?.toLowerCase()==="upgrade"&&e.get("upgrade")?.toLowerCase()==="websocket"}function q_(r,e){if(r instanceof Headers)return r.get(e)??void 0;let t=r[e];return Array.isArray(t)?t.join(","):t}async function sy(r){if(q_(r,"sec-websocket-version")!=="13")throw new ss("Invalid version");let e=q_(r,"sec-websocket-key");if(e==null)throw new ss("Missing sec-websocket-key");let t=`${e}258EAFA5-E914-47DA-95CA-C5AB0DC85B11`,n=await K_.digest(C(t)),o=wl.encode(n.digest).substring(1);return new Headers({Upgrade:"websocket",Connection:"upgrade","Sec-WebSocket-Accept":o})}async function j_(r,e){let t=new re("REQUEST"),n=new ne,o;t[re.kOnHeadersComplete]=i=>{let s=new Headers;for(let a=0;a<i.headers.length;a+=2)s.set(i.headers[a].toLowerCase(),i.headers[a+1]);o={...i,headers:s,raw:n,method:re.methods[i.method]}};try{for(;;){let{data:i}=await hr(r,"message",e?.signal),s=i.subarray(),a=t.execute(s,0,s.byteLength);if(a instanceof Error)throw a;if(n.append(s.subarray(0,a)),a<s.byteLength&&r.push(s.subarray(a)),o!=null)return o}}catch(i){r.abort(i)}finally{t.finish()}throw new Error("Failed to read header info from request")}var n2=class extends Error{static name="InvalidResponseError";name="InvalidResponseError"};var a$=[101,204,205,304];async function Y_(r,e,t){let n=Promise.withResolvers(),o=new TransformStream,i=o.writable.getWriter(),s=!1,a=new re("RESPONSE");a.maxHeaderSize=t.maxHeaderSize??re.maxHeaderSize,a[re.kOnHeadersComplete]=l=>{t.log("response headers complete"),s=!0;let u=new Headers;for(let h=0;h<l.headers.length;h+=2)u.append(l.headers[h],l.headers[h+1]);let d=o.readable;a$.includes(l.statusCode)&&(o.writable.close().catch(()=>{}),o.readable.cancel().catch(()=>{}),d=null);let f=new go(d,{status:l.statusCode,statusText:l.statusMessage,headers:u});n.resolve(f)},a[re.kOnBody]=l=>{t.log("response read body %d bytes",l.byteLength),i.write(l).catch(u=>{n.reject(u)})},a[re.kOnMessageComplete]=()=>{t.log("response message complete"),i.close().catch(l=>{n.reject(l)})};let c=0;return r.addEventListener("message",({data:l})=>{t.log("response stream read %d bytes",l.byteLength),c+=l.byteLength;let u=a.execute(l.subarray(),0,l.byteLength);u instanceof Error&&(r.abort(u),a.finish())}),r.addEventListener("remoteCloseWrite",()=>{s||n.reject(new n2(`Response ended before headers were received, read ${c} bytes`)),a.finish()}),n.promise}function X_(r,e){return e.set("Content-Length",`${r.size}`),e.set("Content-Type",r.type!=null&&r.type!==""?r.type:"application/octet-stream"),r.stream()}function Q_(r,e){return e.set("Content-Length",`${r.byteLength}`),e.set("Content-Type","application/octet-stream"),new ReadableStream({start(t){t.enqueue(jd(r)),t.close()}})}function c$(r,e,t){let n=[`--${t}`],o=0,i=2;return typeof e=="string"?(n.push(`Content-Disposition: form-data; name="${r}"`,'Content-Type: text/plain; charset="UTF-8"',`Content-Length: ${e.length}`,""),o=e.length+i):(n.push(`Content-Disposition: form-data; name="${r}"; filename="${encodeURIComponent(e.name)}"`,"Content-Type: application/octet-stream",`Content-Length: ${e.size}`,""),o=e.size+i),C(n.join(`\r
57
+ `)).byteLength+o}function Z_(r,e){let t=`-----------------------------${crypto.randomUUID()}`;e.set("Content-Type",`multipart/form-data; boundary=${t}`);let n=0;for(let[c,l]of r.entries())n+=c$(c,l,t);e.set("Content-Length",`${n}`);let o=r.entries(),i;function s(c,l,u,d){let f=[`--${d}`];typeof u=="string"?f.push(`Content-Disposition: form-data; name="${l}"`,'Content-Type: text/plain; charset="UTF-8"',`Content-Length: ${u.length}`,"",u,""):(f.push(`Content-Disposition: form-data; name="${l}"; filename="${encodeURIComponent(u.name)}"`,"Content-Type: application/octet-stream",`Content-Length: ${u.size}`,""),i=u.stream().getReader()),c.enqueue(C(f.join(`\r
58
+ `)))}async function a(c,l){if(i!=null){let f=await i.read();f.value!=null&&c.enqueue(f.value),f.done&&(c.enqueue(C(`\r
59
+ `)),i=void 0);return}let{done:u,value:d}=o.next();if(d!=null){let[f,h]=d;s(c,f,h,l)}u===!0&&c.close()}return new ReadableStream({async pull(c){await a(c,t)}})}function J_(r,e){e.set("Content-Type","application/octet-stream"),e.set("Transfer-Encoding","chunked");let t=r.getReader();return new ReadableStream({async pull(n){let{done:o,value:i}=await t.read();i!=null&&(n.enqueue(C(`${i.byteLength}\r
60
+ `)),n.enqueue(i),n.enqueue(C(`\r
61
61
  `))),o&&(n.enqueue(C(`0\r
62
62
  \r
63
- `)),n.close())}})}function F4(r,e){return e.set("Content-Length",`${r.length}`),e.set("Content-Type",'text/plain; charset="UTF-8"'),new ReadableStream({start(t){t.enqueue(C(r)),t.close()}})}function nx(r,e){if(r!=null){if(typeof r=="string")return F4(r,e);if(r instanceof Blob)return JE(r,e);if(PL(r))return ex(r,e);if(r instanceof URLSearchParams)return F4(r.toString(),e);if(r instanceof ReadableStream)return rx(r,e);if(r instanceof FormData)return tx(r,e);throw new Error("Unsupported body type")}}function PL(r){return r==null?!1:r.byteLength!=null}async function ox(r,e,t){let n=new Headers(t.headers),o=n.get("host")??e.hostname;n.set("host",o),n.get("user-agent")==null&&n.set("user-agent","libp2p/fetch");let s=nx(t.body,n),i=[`${t?.method?.toUpperCase()??"GET"} ${e.pathname??"/"} HTTP/1.1`,...kp(n),"",""];r.send(C(i.join(`\r
64
- `)))||await r.onDrain({signal:t.signal??void 0}),s!=null&&(t.log("request sending body"),await LL(r,s,t))}async function LL(r,e,t){let n=e.getReader();for(;;){let{done:o,value:s}=await n.read();if(s!=null&&(t.log("request send %d bytes",s.byteLength),r.send(s)||await r.onDrain({signal:t.signal??void 0})),o){t.log("request finished sending body");break}}}async function sx(r,e,t={}){let n=r.log.newScope("http-fetch");e=typeof e=="string"?new URL(e):e;let[o]=await Promise.all([ZE(r,e,{...t,log:n}),ox(r,e,{...t,log:n})]);return await r.close({signal:t.signal??void 0}),o}var Np=class extends Event{message;error;filename="";lineno=0;colno=0;constructor(e){super("error"),this.error=e,this.message=e.message}},tu=class extends Event{code;reason;wasClean;constructor(e,t){super(e),this.code=t?.code??0,this.reason=t?.reason??"",this.wasClean=t?.wasClean??!0}};var DL={CONTINUATION:0,TEXT:1,BINARY:2,CONNECTION_CLOSE:8,PING:9,PONG:10},$4={0:"CONTINUATION",1:"TEXT",2:"BINARY",8:"CONNECTION_CLOSE",9:"PING",10:"PONG"};var ru={NORMAL_CLOSURE:1e3,GOING_AWAY:1001,PROTOCOL_ERROR:1002,UNSUPPORTED_DATA:1003,RESERVED:1004,NO_STATUS_RECEIVED:1005,ABNORMAL_CLOSURE:1006,INVALID_FRAME_PAYLOAD_DATA:1007,POLICY_VIOLATION:1008,MESSAGE_TOO_BIG:1009,MANDATORY_EXT:1010,INTERNAL_SERVER_ERROR:1011,TLS_HANDSHAKE:1015};function ix(r){let e=0;if(r.byteLength<e+1)return;let n=r.get(e)&15;if(e++,$4[n]==null)throw new Error(`Unknown opcode: ${n}`);if(r.byteLength<e+1)return;let o=r.get(e),s=(o&128)===128,i=o&127;if(e++,i===126){if(r.byteLength<e+2)return;i=r.getUint16(e),e+=2}else if(i===127){if(r.byteLength<e+8)return;i=r.getUint32(e),e+=8}if(i===0)return r.consume(e),{type:$4[n]};let a;if(s){if(r.byteLength<e+4)return;a=r.subarray(e,e+4),e+=4}if(r.byteLength<e+i)return;let c=r.subarray(e,e+i);return e+=i,a!=null&&(c=ax(c,a)),r.consume(e),{type:$4[n],data:c}}function ax(r,e){let t=0;for(let n=0;n<r.byteLength;n++)r[n]=r[n]^e[t],t++,t===e.byteLength&&(t=0);return r}function cx(r,e,t){let o=new Q(Uint8Array.from([128|DL[r]])),s=e?.byteLength??0;if(s<126)o.append(Uint8Array.from([s|(t===!0?128:0)]));else if(s<65535){let i=new Q(new Uint8Array(3));i.set(0,126|(t===!0?128:0)),i.setUint16(1,s),o.append(i)}else if(s<18446744073709552e3){let i=new Q(new Uint8Array(9));i.set(0,127|(t===!0?128:0)),i.setUint32(1,s),o.append(i)}else throw new Error("Payload too large");if(t===!0&&e!=null){let i=Uint8Array.from([0,0,0,0]);o.append(i),e=ax(e,i)}return e!=null&&o.append(e),o}function lx(r){if(r instanceof Uint8Array||r instanceof ArrayBuffer||r instanceof DataView)return eu(r);if(typeof r=="string")return C(r);if(r instanceof Blob)return r.arrayBuffer().then(e=>eu(e));throw new A("Unsupported data type")}async function ux(r,e){return new Promise((t,n)=>{let o=!1,s=new X("RESPONSE");s[X.kOnHeadersComplete]=i=>{o=!0;let a=[];for(let c=0;c<i.headers.length;c+=2)a.push([i.headers[c],i.headers[c+1]]);t(new kn(null,{status:i.statusCode,statusText:i.statusMessage,headers:new Headers(a)}))},Promise.resolve().then(async()=>{for(;;){let{data:i}=await Qt(r,"message",e.signal),a=i.subarray(),c=s.execute(a,0,a.byteLength);if(c instanceof Error)throw c;if(c<a.byteLength&&r.push(a.subarray(c)),o)break}}).catch(i=>{n(i)})})}async function*dx(r,e=[],t){let n=Za.encode(crypto.getRandomValues(new Uint8Array(16))).substring(1);t.set("host",r.hostname),t.set("connection","upgrade"),t.set("upgrade","websocket"),t.set("pragma","no-cache"),t.set("cache-control","no-cache"),t.set("sec-websocket-version","13"),t.set("sec-websocket-key",n),e.length>0&&t.set("sec-websocket-protocol",e.join(", ")),yield C([`GET ${r.pathname??"/"} HTTP/1.1`,...[...t.entries()].map(([o,s])=>`${o}: ${s}`),"",""].join(`\r
65
- `))}var NL=["BINARY","TEXT","CONTINUATION"],OL=10485760;var BL="/http/1.1",Op=class extends ie{binaryType="arraybuffer";bufferedAmount=0;extensions="";protocol="";readyState;url;CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;_onclose;_onerror;_onmessage;_onopen;sentClose;isClient;buffer;maxMessageSize;_url;closeController;constructor(e,t={}){super(),this.readyState=this.CONNECTING,this.url=e.pathname,this.sentClose=!1,this.isClient=t.isClient??!0,this.buffer=new Q,this.closeController=new AbortController,this.maxMessageSize=t.maxMessageSize??OL}send(e){if(this.readyState!==this.OPEN)throw new Error("WebSocket was not open");let t=lx(e);wd(t)?t.then(n=>{this._send("BINARY",n)}).catch(n=>{this._errored(n)}):this._send("BINARY",t)}_send(e,t){if(this.readyState!==this.OPEN)return;let n=cx(e,t,this.isClient),o=n.byteLength;this.bufferedAmount+=o,this._write(n,s=>{this.bufferedAmount-=o,s!=null&&this._errored(s)})}close(e,t){if(this.readyState!==this.OPEN)throw new Error("WebSocket was not open");this.readyState=this.CLOSING,this.sentClose=!0,this._send("CONNECTION_CLOSE")}_errored(e){this.readyState=this.CLOSED,this.dispatchEvent(new Np(e))}set onclose(e){this._onclose=e,this.addEventListener("close",e)}get onclose(){return this._onclose??null}set onerror(e){this._onerror=e,this.addEventListener("error",e)}get onerror(){return this._onerror??null}set onmessage(e){this._onmessage=e,this.addEventListener("message",e)}get onmessage(){return this._onmessage??null}set onopen(e){this._onopen=e,this.addEventListener("open",e)}get onopen(){return this._onopen??null}_push(e){if(this.buffer.append(e),this.buffer.byteLength>this.maxMessageSize){this.close(ru.MESSAGE_TOO_BIG,"Max message size exceeded");return}for(;;){let t=ix(this.buffer);if(t==null)break;if(NL.includes(t.type)&&t.data!=null){let n;this.binaryType==="blob"?n=new Blob([t.data]):t.data.byteOffset===0&&t.data.byteLength===t.data.buffer.byteLength?n=t.data.buffer:(n=new ArrayBuffer(t.data.byteLength),new Uint8Array(n,0,n.byteLength).set(t.data)),this.dispatchEvent(new MessageEvent("message",{data:n,origin:this._url?.hostname}))}t.type==="PING"&&this._send("PONG",t.data),t.type==="CONNECTION_CLOSE"&&(this.sentClose||this.close(),this.closeController.abort(),this._close(void 0,()=>{this.readyState=this.CLOSED,this.dispatchEvent(new tu("close"))}))}}_remoteClosed(e){this.readyState=this.CLOSING,this._close(e,()=>{this.readyState=this.CLOSED,this.dispatchEvent(new tu("close"))})}};var nu=class extends Op{writer;writable;constructor(e,t,n={}){if(super(new URL(e.url),{...n,isClient:!1}),e.body==null)throw new A("Request body cannot be null");this.readyState=this.OPEN,this.writable=t,this.writer=t.getWriter();let o=e.body.getReader();Promise.resolve().then(async()=>{for(this.dispatchEvent(new Event("open"));;){let{value:s,done:i}=await o.read();if(s!=null&&this._push(s),i){this._remoteClosed();break}}}).catch(s=>{this._errored(s)})}_write(e,t){this.writer?.write(e).then(()=>{t()},n=>{t(n)})}_close(e,t){e!=null?this.writable.abort(e).then(()=>{t()},()=>{t()}):this.writable.close().then(()=>{t()},()=>{t()})}},ou=class extends Op{stream;handshakeTimeout;drainTimeout;constructor(e,t,n,o){super(t,{...o,isClient:!0}),this.handshakeTimeout=o.handshakeTimeout??1e4,this.drainTimeout=o.drainTimeout??1e4,Promise.resolve().then(async()=>{let s=AbortSignal.timeout(this.handshakeTimeout);this.stream=await n.openStream(e,BL,{...o,signal:s});for await(let a of dx(t,o.protocols,Cn(o)))this.stream.send(a)||await this.stream.onDrain({signal:s});let i=await ux(this.stream,{signal:s});if(i.status!==101)throw new Error("Invalid WebSocket handshake - response status "+i.status);await o.onHandshakeResponse?.(i,{signal:s}),this.protocol=i.headers.get("Sec-WebSocket-Protocol")??"",this.readyState=this.OPEN,this.dispatchEvent(new Event("open"));for await(let a of this.stream)this._push(a)}).catch(s=>{this._errored(s)})}_write(e,t){if(this.stream==null){t(new Error("WebSocket was not open"));return}this.stream.send(e)?t():this.stream.onDrain({signal:AbortSignal.timeout(this.drainTimeout)}).then(()=>{t()},n=>{t(n)})}_close(e,t){if(this.stream==null){t();return}if(e!=null){this.stream.abort(e),t();return}this.stream.close().catch(n=>{this.stream?.abort(n)}).finally(()=>{t()})}};var su="/http/1.1";var Bp=Symbol.for("@libp2p/http/websocket-handler");var wx=Pn(gx(),1),Up=class{log;cookies;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:http:cookies"),this.cookies=new Map}async prepareRequest(e,t){if((t.credentials??"same-origin")==="omit")return;let o=t.headers.get("origin");if(o==null||o==="null")return;let s=Jl(e,t.headers),i=(this.cookies.get(s.hostname)??[]).filter(a=>!(a.expires!=null&&a.expires<Date.now()||a.path!=null&&!s.pathname.startsWith(a.path))).map(a=>`${a.name}=${a.value}`).join("; ");i.length>0&&t.headers.set("cookie",i)}async processResponse(e,t,n){if((t.credentials??"same-origin")==="omit"){yx(n);return}let s=t.headers.get("origin");if(s==null||s==="null")return;let i=Jl(e,t.headers);for(let a of n.headers.getSetCookie()){let c=[...this.cookies.get(i.hostname)??[],...WL(wx.default.parse(a))];this.cookies.set(i.hostname,c)}yx(n)}};function yx(r){return r.headers.has("set-cookie")&&r.headers.delete("set-cookie"),r}function WL(r){let e={},t=[];return Object.entries(r).forEach(([n,o])=>{n.toLowerCase()==="domain"&&o!=null&&(e.domain=o),n.toLowerCase()==="max-age"&&o!=null&&(e.expires=Date.now()+parseInt(o,10)*1e3),!zL.includes(n.toLowerCase())&&o!=null&&t.push({name:n,value:o})}),t.map(n=>({...n,...e}))}var zL=["domain","expires","httponly","max-age","partitioned","path","samesite","secure"];var Fp=class{async prepareRequest(e,t){if(t.headers.get("origin")!=null||t.mode==="no-cors")return;let n=Jl(e,t.headers);t.headers.set("origin",`${n.protocol}//${n.host}`)}};function GL(r){return typeof r.init=="function"}function $p(r,e){if(GL(r)){let t=r;return t.handler=r.init(e),delete t.init,t}return r}function bx(r){let e=Lp(r.method,["GET"]);if(r.fallback==null&&e.filter(n=>n!=="GET").length>0)throw new A("WebSocket handlers only support the GET HTTP method");let t={...r,init:n=>{let o=$p(r,n);return t[Bp]=o.handler,async s=>{if(!Cp(s.method,s.headers))return r?.fallback!=null?r.fallback(s):new kn(null,{status:400});let i=new TransformStream;try{let a=new kn(i.readable,{status:101,headers:await U4(s.headers)}),c=new nu(s,i.writable,r);return o.handler(c),a}catch{return new kn(null,{status:500})}}}};return t}var Kp="/.well-known/libp2p/protocols";function Ex(r){return bx({path:Kp,method:["GET"],cors:!0,handler:e=>{let t=JSON.stringify(r.getProtocolMap());e.send(t),e.close()},fallback:async e=>{let t=JSON.stringify(r.getProtocolMap());return new Response(t,{headers:{"Content-Type":"application/json","Content-Length":`${t.length}`}})}})}var Vp=class{log;components;protocols;endpoint;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:http:registrar"),this.protocols=[],this.onStream=this.onStream.bind(this),this.endpoint=t.server,this.handle("",Ex(this))}async start(){await this.components.registrar.handle(su,this.onStream.bind(this))}async stop(){await this.components.registrar.unhandle(su)}async onStream(e,t){let n=await jE(e);if(this.canHandle(n)){this.log("handling incoming request %s %s",n.method,n.url);let o=await this.onRequest(YE(n,e));await XE(o,e),await e.close();return}if(this.endpoint==null){this.log("cannot handle incoming request %s %s and no endpoint configured",n.method,n.url),e.send(QE),await e.close();return}this.log("passing incoming request %s %s to endpoint",n.method,n.url),this.endpoint.inject(n,e,t).catch(o=>{this.log.error("error injecting request to endpoint - %e",o),e.abort(o)})}canHandle(e){let t=M4(e).pathname;return this.protocols.find(n=>n.route.path===t)!=null?(this.log.trace("can handle %s",t),!0):(this.log.trace("cannot handle %s",t),!1)}async onRequest(e){this.log("incoming request %s %s",e.method,e.url);let t=this.findHandler(e.url);if(t==null)return new Response(null,{status:404});let n;return t.route.method.includes(e.method)?n=await t.route.handler(e):e.method==="OPTIONS"?n=new Response(null,{status:204}):n=new Response(null,{status:405}),YL(n,e,t),this.log("%s %s %d %s",e.method,e.url,n.status,n.statusText),n}onWebSocket(e){let t=this.findHandler(e.url);if(t!=null){let n=t.route[Bp];if(n!=null){n(e);return}}e.close(ru.NORMAL_CLOSURE)}findHandler(e){let t=e.startsWith("/")?e:new URL(e).pathname;this.log("search for handler on path %s",t);let n=this.protocols.find(o=>o.route.path===t);return n!=null&&this.log("found handler for HTTP protocol %s on path %s",n.protocol,e),n}handle(e,t){if(t.path=t.path??e,this.protocols.find(n=>n.protocol===e)!=null)throw new A(`HTTP protocol handler for ${e} already registered`);(t.path===""||!t.path.startsWith("/"))&&(t.path=`/${t.path}`),t.cors=t.cors??!0,t.method=Lp(t.method),t=$p(t,this.components),this.protocols.push({protocol:e,route:t}),this.protocols.sort(({route:{path:n}},{route:{path:o}})=>o.length-n.length)}unhandle(e){this.protocols=this.protocols.filter(t=>t.protocol===e)}getProtocolMap(){let e={};for(let t of this.protocols)t.protocol!==""&&(e[t.protocol]={path:t.route.path});return e}};function YL(r,e,t){let n=[...new Set(["OPTIONS",...t.route.method])].join(", ");t.route.cors&&(e.headers.get("Access-Control-Request-Method")!=null&&r.headers.set("access-control-allow-methods",n),e.headers.get("Access-Control-Request-Headers")!=null&&r.headers.set("access-control-allow-headers",e.headers.get("Access-Control-Request-Headers")??""),e.headers.get("Origin")!=null&&(r.headers.set("access-control-allow-origin",e.headers.get("Origin")??""),r.headers.set("vary","Origin"))),e.method==="OPTIONS"&&r.headers.set("allow",n)}async function xx(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function vx(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function Sx(r,e,t){for(let n of e.middleware)await n.processResponse?.(r,e,t);return t}var Hp=class{log;components;httpRegistrar;origin;cookies;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:http"),this.httpRegistrar=new Vp(e,t),this.origin=new Fp,this.cookies=new Up(e,t)}[Symbol.toStringTag]="@libp2p/http";[me]=["@libp2p/http"];async start(){await ct(this.httpRegistrar)}async stop(){await ut(this.httpRegistrar)}agent(...e){throw new Wa("This method is not supported in browsers")}dispatcher(...e){throw new Wa("This method is not supported in browsers")}async connect(e,t={}){let n=Ma(e),o=Cn(t),s={...t,headers:o,method:"GET",middleware:t.middleware?.map(i=>i(this.components))??[]};return o.set("connection","upgrade"),o.set("upgrade","websocket"),vx(n,s,async()=>{if(n instanceof URL){let c=new globalThis.WebSocket(n,t.protocols);return c.binaryType="arraybuffer",c}let{addresses:i,httpPath:a}=Pp(n);return new ou(i,new URL(`http://${Rp(n,s.headers)}${decodeURIComponent(a)}`),this.components.connectionManager,s)})}async fetch(e,t={}){let n=Ma(e),o={...t,headers:Cn(t),method:"GET",middleware:[this.origin,this.cookies,...t.middleware?.map(i=>i(this.components))??[]]},s=await xx(n,o,async()=>this.sendRequest(n,t));return Sx(n,o,s)}async connectProtocol(e,t,n){let o=await this.getProtocolPath(e,t,n),s=Ma(e,o);return this.connect(s,n)}async fetchProtocol(e,t,n={}){let o=await this.getProtocolPath(e,t,n),s=Ma(e,o);return this.fetch(s,n)}async getSupportedProtocols(e,t={}){let n=Ma(e,Kp),o=await this.fetch(n,{method:"GET",headers:{Accept:"application/json"},signal:t.signal});if(o.status!==200)throw new Error(`Unexpected status code: ${o.status}`);return o.json()}async getProtocolPath(e,t,n={}){let o=await this.getSupportedProtocols(e,n);if(o[t]==null)throw new Error(`Peer does not serve protocol: ${t}`);return o[t].path}canHandle(e){return this.httpRegistrar.canHandle(e)}async onRequest(e){return this.httpRegistrar.onRequest(e)}onWebSocket(e){this.httpRegistrar.onWebSocket(e)}handle(e,t){this.httpRegistrar.handle(e,t)}unhandle(e){this.httpRegistrar.unhandle(e)}getProtocolMap(){return this.httpRegistrar.getProtocolMap()}async sendRequest(e,t){if(e instanceof URL)return this.log("making request to %s with global fetch"),globalThis.fetch(e,t);this.log("making request to %s with libp2p fetch",e);let n=Rp(e,Cn(t)),{addresses:o,httpPath:s}=Pp(e),a=await(await this.components.connectionManager.openConnection(o,{signal:t.signal??void 0})).newStream(su,{signal:t.signal??void 0});return sx(a,new URL(`http://${n}${decodeURIComponent(s)}`),t)}};function Ax(r={}){return e=>new Hp(e,r)}var Tx="0.1.0";var Ix="id/push",_x="1.0.0",Cx="1.0.0";var Xo;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s of t.listenAddrs)n.uint32(18),n.bytes(s);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let s of t.protocols)n.uint32(26),n.string(s);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={listenAddrs:[],protocols:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 5:{s.protocolVersion=t.string();break}case 6:{s.agentVersion=t.string();break}case 1:{s.publicKey=t.bytes();break}case 2:{if(o.limits?.listenAddrs!=null&&s.listenAddrs.length===o.limits.listenAddrs)throw new Oe('Decode error - map field "listenAddrs" had too many elements');s.listenAddrs.push(t.bytes());break}case 4:{s.observedAddr=t.bytes();break}case 3:{if(o.limits?.protocols!=null&&s.protocols.length===o.limits.protocols)throw new Oe('Decode error - map field "protocols" had too many elements');s.protocols.push(t.string());break}case 8:{s.signedPeerRecord=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Xo||(Xo={}));var ar={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function kx(r){if(r!=null&&r.length>0)try{return q(r)}catch{}}async function qp(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new de("message was null or undefined");let s={};if(o.listenAddrs.length>0&&(s.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:q(c)}))),o.protocols.length>0&&(s.protocols=o.protocols),o.publicKey!=null){let c=rt(o.publicKey);if(!En(c).equals(n.remotePeer))throw new de("public key did not match remote PeerId");s.publicKey=c}let i;if(o.signedPeerRecord!=null){t.trace("received signedPeerRecord from %p",n.remotePeer);let c=o.signedPeerRecord,l=await vr.openAndCertify(c,jt.DOMAIN),d=jt.createFromProtobuf(l.payload),u=Zr(l.publicKey.toCID());if(!d.peerId.equals(u))throw new de("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(d.peerId))throw new de("signing key does not match remote PeerId");let f;try{f=await r.get(d.peerId)}catch(h){if(h.name!=="NotFoundError")throw h}if(f!=null&&(s.metadata=f.metadata,f.peerRecordEnvelope!=null)){let h=vr.createFromProtobuf(f.peerRecordEnvelope),p=jt.createFromProtobuf(h.payload);p.seqNumber>=d.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",p.seqNumber,d.seqNumber),d=p,c=f.peerRecordEnvelope)}s.peerRecordEnvelope=c,s.addresses=d.multiaddrs.map(h=>({isCertified:!0,multiaddr:h})),i={seq:d.seqNumber,addresses:d.multiaddrs}}else t("%p did not send a signed peer record",n.remotePeer);if(t.trace("patching %p with",n.remotePeer,s),await r.patch(n.remotePeer,s),o.agentVersion!=null||o.protocolVersion!=null){let c={};o.agentVersion!=null&&(c.AgentVersion=C(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=C(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=>q(c)),observedAddr:o.observedAddr==null?void 0:q(o.observedAddr),protocols:o.protocols,signedPeerRecord:i,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var Ua=class{host;components;protocol;started;timeout;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.components=e,this.log=t.log,this.timeout=t.timeout??ar.timeout,this.maxInboundStreams=t.maxInboundStreams??ar.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??ar.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??ar.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??ar.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??ar.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??ar.protocolPrefix}/${Tx}`,agentVersion:e.nodeInfo.userAgent},this.handleProtocol=this.handleProtocol.bind(this)}isStarted(){return this.started}async start(){this.started||(await this.components.peerStore.merge(this.components.peerId,{metadata:{AgentVersion:C(this.host.agentVersion),ProtocolVersion:C(this.host.protocolVersion)}}),await this.components.registrar.handle(this.protocol,this.handleProtocol,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}};var Wp=class extends Ua{connectionManager;concurrency;_push;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ar.protocolPrefix}/${Ix}/${Cx}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??ar.concurrency,this._push=qn(this.sendPushMessage.bind(this),t.debounce??1e3),(t.runOnSelfUpdate??ar.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error("error pushing updates to peers - %e",o)})})}[me]=["@libp2p/identify-push"];async push(){this._push()}async sendPushMessage(){if(this.isStarted())try{let e=this.components.addressManager.getAddresses().map(d=>d.decapsulateCode(421)),t=new jt({peerId:this.components.peerId,multiaddrs:e}),n=await vr.seal(t,this.components.privateKey),o=this.components.registrar.getProtocols(),s=await this.components.peerStore.get(this.components.peerId),i=P(s.metadata.get("AgentVersion")??C(this.host.agentVersion)),a=P(s.metadata.get("ProtocolVersion")??C(this.host.protocolVersion)),c=this;async function*l(){for(let d of c.connectionManager.getConnections())(await c.components.peerStore.get(d.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let f,h=AbortSignal.timeout(c.timeout);try{f=await d.newStream(c.protocol,{signal:h,runOnLimitedConnection:c.runOnLimitedConnection}),await Fe(f,{maxDataLength:c.maxMessageSize}).pb(Xo).write({listenAddrs:e.map(g=>g.bytes),signedPeerRecord:n.marshal(),protocols:o,agentVersion:i,protocolVersion:a},{signal:h}),await f.close({signal:h})}catch(p){f?.log.newScope("identify-push")?.error("could not push identify update to peer",p),f?.abort(p)}})}await er(so(l(),{concurrency:this.concurrency}))}catch(e){this.log.error("error pushing updates to peers - %e",e)}}async handleProtocol(e,t){let n=e.log.newScope("identify-push");if(this.components.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},i=await Fe(e,{maxDataLength:this.maxMessageSize}).pb(Xo).read(o);await e.close(o),await qp(this.components.peerStore,this.components.events,n,t,i),n.trace("handled push from %p",t.remotePeer)}};var zp=class extends Ua{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ar.protocolPrefix}/${"id"}/${_x}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??ar.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(()=>{})})}[me]=["@libp2p/identify"];async _identify(e,t={}){let n,o;if(t.signal==null){let s=AbortSignal.timeout(this.timeout);t={...t,signal:s}}this.log("run identify on new connection %a",e.remoteAddr);try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection}),o=n.log.newScope("identify");let s=Fe(n,{maxDataLength:this.maxMessageSize}).pb(Xo),i=await s.read(t);return await s.unwrap().unwrap().close(t),i}catch(s){throw o?.error("identify failed - %e",s),n?.abort(s),s}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:s,observedAddr:i}=n;if(o==null)throw new de("Public key was missing from identify message");let a=rt(o),c=Zr(a.toCID());if(!e.remotePeer.equals(c))throw new de("Identified peer does not match the expected peer");if(this.components.peerId.equals(c))throw new de("Identified peer is our own peer id?");return this.maybeAddObservedAddress(i),this.log("completed for peer %p and protocols %o",c,s),qp(this.components.peerStore,this.components.events,this.log,e,n)}maybeAddObservedAddress(e){let t=kx(e);if(t==null||(this.log.trace("our observed address was %a",t),Ze(t)))return;let n=t.getComponents();if((n[0].code===41||n[0].code===42&&n[1].code===41)&&!ld(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}Ys.exactMatch(t)||(this.log.trace("storing the observed address"),this.components.addressManager.addObservedAddr(t))}async handleProtocol(e,t){let n=e.log.newScope("identify");n("responding to identify");let o=AbortSignal.timeout(this.timeout);let s=await this.components.peerStore.get(this.components.peerId,{signal:o}),i=this.components.addressManager.getAddresses().map(d=>d.decapsulateCode(421)),a=s.peerRecordEnvelope;if(i.length>0&&a==null){let d=new jt({peerId:this.components.peerId,multiaddrs:i});a=(await vr.seal(d,this.components.privateKey,{signal:o})).marshal().subarray()}let c=t.remoteAddr.bytes;L9.matches(t.remoteAddr)||(c=void 0);let l=Fe(e).pb(Xo);n("send response"),await l.write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:ht(this.components.privateKey.publicKey),listenAddrs:i.map(d=>d.bytes),signedPeerRecord:a,observedAddr:c,protocols:s.protocols},{signal:o}),n("close write"),await l.unwrap().unwrap().close({signal:o})}};function Rx(r={}){return e=>new zp(e,r)}function Px(r={}){return e=>new Wp(e,r)}var si=1e3,H4=60*si,Gp=60*H4,Lx="/ipfs/kad/1.0.0",Yp=48*Gp;var Dx=24*Gp,Nx=10,Ox=16384,Bx=Gp,q4=Gp,fhe=10*si,Mx=10*si;var Xp=20,Qo=10,Ux=5*H4,Fx=si,$x=5*si,Kx=5*H4,Vx=30*si,Hx=180*si,W4=`${cs}-kad-dht`;var iu;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={key:ae(0),value:ae(0),timeReceived:""},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.key=t.bytes();break}case 2:{s.value=t.bytes();break}case 5:{s.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(iu||(iu={}));function qx(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"),s=String(r.getUTCMinutes()).padStart(2,"0"),i=String(r.getUTCSeconds()).padStart(2,"0"),a=r.getUTCMilliseconds(),c=String(a*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${s}:${i}.${c}Z`}function Wx(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,s=parseInt(t[3],10),i=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,s,i,a,c,l))}var Pt=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 iu.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:qx(this.timeReceived)}}static deserialize(e){let t=iu.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=Wx(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 jo=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},Qp=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},jp=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var zx;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.key=t.bytes();break}case 2:{s.value=t.bytes();break}case 3:{s.author=t.bytes();break}case 4:{s.signature=t.bytes();break}case 5:{s.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(zx||(zx={}));var Te;(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"})(Te||(Te={}));var Zp;(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"})(Zp||(Zp={}));(function(r){r.codec=()=>ze(Zp)})(Te||(Te={}));var $a;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})($a||($a={}));var z4;(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"})(z4||(z4={}));(function(r){r.codec=()=>ze(z4)})($a||($a={}));var Fa;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s of t.multiaddrs)n.uint32(18),n.bytes(s);t.connection!=null&&(n.uint32(24),$a.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={id:ae(0),multiaddrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.id=t.bytes();break}case 2:{if(o.limits?.multiaddrs!=null&&s.multiaddrs.length===o.limits.multiaddrs)throw new Oe('Decode error - map field "multiaddrs" had too many elements');s.multiaddrs.push(t.bytes());break}case 3:{s.connection=$a.codec().decode(t);break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Fa||(Fa={}));var Zo;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&Zp[t.type]!==0&&(n.uint32(8),Te.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 s of t.closer)n.uint32(66),Fa.codec().encode(s,n);if(t.providers!=null)for(let s of t.providers)n.uint32(74),Fa.codec().encode(s,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={type:Te.PUT_VALUE,closer:[],providers:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.type=Te.codec().decode(t);break}case 10:{s.clusterLevel=t.int32();break}case 2:{s.key=t.bytes();break}case 3:{s.record=t.bytes();break}case 8:{if(o.limits?.closer!=null&&s.closer.length===o.limits.closer)throw new Oe('Decode error - map field "closer" had too many elements');s.closer.push(Fa.codec().decode(t,t.uint32(),{limits:o.limits?.closer$}));break}case 9:{if(o.limits?.providers!=null&&s.providers.length===o.limits.providers)throw new Oe('Decode error - map field "providers" had too many elements');s.providers.push(Fa.codec().decode(t,t.uint32(),{limits:o.limits?.providers$}));break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Zo||(Zo={}));function G4(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 au(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 Jp(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 Y4(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function cu(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function X4(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function Gx(r,e={}){let t={...r,name:"PATH_ENDED",type:8};return e.onProgress?.(new CustomEvent("kad-dht:query:path-ended",{detail:t})),t}function Yx(r,e,t){if(t.length===0)throw new A("No records given");let o=P(e).split("/");if(o.length<3)throw new A("Record key does not have a selector function");let s=r[o[1].toString()];if(s==null)throw new jp(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:s(e,t)}function eD(r,e){return 0}var Xx={pk:eD};async function Ka(r,e,t){let n=e.key,s=P(n).split("/");if(s.length<3)return;let i=r[s[1].toString()];if(i==null)throw new A(`No validator available for key type "${s[1]}"`);await i(n,e.value,t)}var tD=async(r,e,t)=>{if(!(r instanceof Uint8Array))throw new A('"key" must be a Uint8Array');if(r.byteLength<5)throw new A("Invalid public key record");if(P(r.subarray(0,4))!=="/pk/")throw new A("key was not prefixed with /pk/");let o=rt(e),s=r.slice(4);if(!ee(s,o.toMultihash().bytes))throw new A("public key does not match passed in key")},Qx={pk:tD};var rD=C("/pk/");function jx(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>!Ze(e))}}async function Jo(r,e){let t=await Ge.digest(r);return e?.signal?.throwIfAborted(),t.digest}async function cr(r,e){return Jo(r.toMultihash().bytes,e)}function es(r,e){return new $e(`${r}/${P(e,"base32")}`,!1)}function Zx(r){return Be([rD,r.toMultihash().bytes])}function Jx(r){return P(r.subarray(0,4))==="/pk/"}function ev(r){let e=Re(r.subarray(4));return Je(e)}function Q4(r,e){let t=new Date;return new Pt(r,e,t).serialize()}function e0(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:G.createV1(On,Re(C(n,"base32"))),peerId:Me(t)}}function t0(r,e,t){let n=typeof e=="string"?e:P(e.multihash.bytes,"base32"),o=[r,n];return t!=null&&o.push(t.toString()),new $e(o.join("/"))}function r0(r){return new Date(hr(r))}function ii(r,e,t){return async function*(...n){let o=e.queryTime?.timer(t),s=e.errorTime?.timer(t),i=!1;try{e.queries?.increment({[t]:!0}),yield*r(...n)}catch(a){throw i=!0,s?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),i||o?.()}}}function n0(r,e,t){return async function(...n){let o=e?.queryTime?.timer(t),s=e?.errorTime?.timer(t),i=!1;try{return e.queries?.increment({[t]:!0}),await r(...n)}catch(a){throw i=!0,s?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),i||o?.()}}}var o0=class{log;components;validators;selectors;peerRouting;queryManager;network;datastorePrefix;constructor(e,t){let{validators:n,selectors:o,peerRouting:s,queryManager:i,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=s,this.queryManager=i,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,t){this.log("getLocal %b",e);let n=es(this.datastorePrefix,e);this.log("fetching record for key %k",n);let o=await this.components.datastore.get(n,t);this.log("found %k in local datastore",n);let s=Pt.deserialize(o);return await Ka(this.validators,s,t),s}async*sendCorrectionRecord(e,t,n,o){this.log("sendCorrection for %b",e);let s=Q4(e,n);for(let{value:i,from:a}of t){if(ee(i,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let d=es(this.datastorePrefix,e);this.log(`Storing corrected record for key ${d.toString()}`),await this.components.datastore.put(d,s.subarray(),o)}catch(d){this.log.error("failed error correcting self - %e",d)}continue}let c=!1,l={type:Te.PUT_VALUE,key:e,record:s};for await(let d of this.network.sendRequest(a,l,o))d.name==="PEER_RESPONSE"&&d.record!=null&&ee(d.record.value,Pt.deserialize(s).value)&&(c=!0),yield d;if(!c)throw new jo("Could not send correction");this.log.error("failed error correcting entry")}}async*put(e,t,n){this.log("put key %b value %b",e,t);let o=Q4(e,t),s=es(this.datastorePrefix,e);this.log(`storing record for key ${s.toString()}`),await this.components.datastore.put(s,o.subarray(),n),yield*zi(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),i=>Pr(i,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:Te.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let d of this.network.sendRequest(a.peer.id,l,{...n,path:a.path}))c.push(d),d.name==="PEER_RESPONSE"&&(d.record!=null&&ee(d.record.value,Pt.deserialize(o).value)||c.push(on({from:a.peer.id,error:new jo("Value not put correctly"),path:d.path},n)));return c}),i=>so(i,{ordered:!1,concurrency:Qo}),async function*(i){for await(let a of i)yield*a})}async*get(e,t){this.log("get %b",e);let n=[];for await(let a of this.getMany(e,t)){if(a.name==="VALUE"){n.push(a);continue}yield a}if(n.length===0)return;let o=n.map(a=>a.value),s=0;try{s=Yx(this.selectors,e,o)}catch(a){if(a.name!=="InvalidParametersError")throw a}let i=o[s];if(this.log("GetValue %b %b",e,i),i==null)throw new De("Best value was not found");yield*this.sendCorrectionRecord(e,n,i,{...t,path:{index:-1,queued:0,running:0,total:0}}),yield n[s]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let s=await this.getLocal(e,t);yield cu({value:s.value,from:this.components.peerId,path:{index:-1,running:0,queued:0,total:0}},t)}catch(s){this.log("error getting local value for %b",e,s)}let n=this,o=async function*({peer:s,signal:i,path:a}){for await(let c of n.peerRouting.getValueOrPeers(s.id,e,{...t,signal:i,path:a}))yield c,c.name==="PEER_RESPONSE"&&c.record!=null&&(yield cu({from:s.id,value:c.record.value,path:a},t))};yield*this.queryManager.run(e,o,t)}};function tv(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function lu(r){if(r.id==null)throw new Error("Invalid peer in message");let e=Re(r.id);return{id:Je(e),multiaddrs:(r.multiaddrs??[]).map(t=>q(t))}}var s0=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:s,routingTable:i,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=s,this.routingTable=i,this.providers=a,this.findProviders=e.metrics?.traceFunction("libp2p.kadDHT.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,d)=>(l.name==="PROVIDER"&&(d.providers??=[],d.providers.push(...l.providers.map(u=>u.id.toString()))),d)})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.kadDHT.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,d)=>(l.name==="PEER_RESPONSE"&&l.messageName==="ADD_PROVIDER"&&(d.providers??=[],d.providers.push(l.from.toString())),d)})??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,n);let s={type:Te.ADD_PROVIDER,key:o,providers:[tv({id:this.components.peerId,multiaddrs:t})]},i=0,a=this;async function*c(u){try{a.log("sending provider record for %s to %p",e,u.peer.id);for await(let f of a.network.sendMessage(u.peer.id,s,{...n,path:u.path}))f.name==="PEER_RESPONSE"&&(a.log("sent provider record for %s to %p",e,u.peer.id),i++),yield f}catch(f){a.log.error("error sending provide record to peer %p - %e",u.peer.id,f),yield on({from:u.peer.id,error:f,path:u.path},n)}}let l=St({objectMode:!0}),d=new At({concurrency:Qo});d.addEventListener("idle",()=>{l.end()}),d.addEventListener("failure",u=>{this.log.error("error publishing provider record to peer - %e",u.detail.error)}),d.add(async()=>{let u=[];for await(let f of this.peerRouting.getClosestPeers(o,n))l.push(f),f.name==="FINAL_PEER"&&u.push(f);u.forEach(f=>{d.add(async()=>{for await(let h of c(f))l.push(h)}).catch(h=>{this.log.error("error publishing provider record to peer - %e",h)})})}).catch(u=>{l.end(u)}),yield*l,this.log("sent provider records to %d peers",i)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=0,s=e.multihash.bytes,i=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e,t);if(a.length>0){let d=[];for(let u of a.slice(0,n))try{let f=await this.components.peerStore.get(u,t);d.push({id:u,multiaddrs:f.addresses.map(({multiaddr:h})=>h)})}catch(f){if(f.name!=="NotFoundError")throw f;this.log("no peer store entry for %p",u)}if(yield au({from:this.components.peerId,messageType:Te.GET_PROVIDERS,providers:d,path:{index:-1,queued:0,running:0,total:0}},t),yield Y4({from:this.components.peerId,providers:d,path:{index:-1,queued:0,running:0,total:0}},t),o+=d.length,o>=n)return}let c=async function*({peer:d,signal:u,path:f}){let h={type:Te.GET_PROVIDERS,key:s};yield*i.network.sendRequest(d.id,h,{...t,signal:u,path:f})},l=new xr(a);for await(let d of this.queryManager.run(s,c,t))if(yield d,d.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",d.providers.length,e,d.closer.length);let u=[];for(let f of d.providers)l.has(f.id)||(l.add(f.id),u.push(f));if(u.length>0&&(yield Y4({from:d.from,providers:u,path:d.path},t),o+=u.length,o>=n))return}}};var i0=class extends ie{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 zr({...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],s){return{...s,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((s,i)=>{o[`providers-${i}`]=s.id.toString()}),n.closer.length>0&&n.closer.forEach((s,i)=>{o[`closer-${i}`]=s.id.toString()})),o)})??this.sendRequest,this.sendMessage=e.metrics?.traceFunction("libp2p.kadDHT.sendMessage",this.sendMessage.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],s){return{...s,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((s,i)=>{o[`providers-${i}`]=s.id.toString()}),n.closer.length>0&&n.closer.forEach((s,i)=>{o[`closer-${i}`]=s.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 A("Message type was missing");let s,i=this.timeout.getTimeoutSignal(n);n={...n,signal:i};try{this.metrics.operations?.increment({[o]:!0}),this.log("dialling %p",e),yield X4({peer:e,path:n.path},n),s=await this.components.connectionManager.openStream(e,this.protocol,n),this.log("sending %s to %p",t.type,e),yield G4({to:e,type:o,path:n.path},n);let a=await this._writeReadMessage(s,t,n);s.close(n).catch(c=>{this.log.error("error closing stream to %p - %e",e,c),s?.abort(c)}),yield au({from:e,messageType:a.type,closer:a.closer.map(lu),providers:a.providers.map(lu),record:a.record==null?void 0:Pt.deserialize(a.record),path:n.path},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),s?.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,path:n.path},n)}finally{this.timeout.cleanUp(i)}}async*sendMessage(e,t,n){if(!this.running)return;let o=t.type;if(o==null)throw new A("Message type was missing");let s,i=this.timeout.getTimeoutSignal(n);n={...n,signal:i};try{this.metrics.operations?.increment({[o]:!0}),this.log("dialling %p",e),yield X4({peer:e,path:n.path},n),s=await this.components.connectionManager.openStream(e,this.protocol,n),this.log("sending %s to %p",t.type,e),yield G4({to:e,type:o,path:n.path},n),await this._writeMessage(s,t,n),s.close(n).catch(a=>{this.log.error("error closing stream to %p - %e",e,a),s?.abort(a)}),yield au({from:e,messageType:o,path:n.path},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),s?.abort(a),yield on({from:e,error:a,path:n.path},n)}finally{this.timeout.cleanUp(i)}}async _writeMessage(e,t,n){await Fe(e).write(t,Zo,n)}async _writeReadMessage(e,t,n){let o=Fe(e);await o.write(t,Zo,n);let s=await o.read(Zo,n);return s.closer.forEach(i=>{this.safeDispatchEvent("peer",{detail:lu(i)})}),s.providers.forEach(i=>{this.safeDispatchEvent("peer",{detail:lu(i)})}),s}};function ai(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 ts=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]}async add(e,t={index:-1,queued:0,running:0,total:0},n){let o=await cr(e.id,n);this.addWithKadId(e,o,t)}addWithKadId(e,t,n={index:-1,queued:0,running:0,total:0}){if(this.peerDistances.find(i=>i.peer.id.equals(e.id))!=null)return;let o={peer:e,distance:rn(this.originDhtKey,t),path:n};if(this.peerDistances.length===this.capacity){let i=this.peerDistances[this.peerDistances.length-1];if(i!=null&&ai(o.distance,i.distance)!==-1)return}let s=!1;for(let i=0;i<this.peerDistances.length;i++){let a=ai(this.peerDistances[i].distance,o.distance);if(a===0||a===1){s=!0,this.peerDistances.splice(i,0,o);break}}s||this.peerDistances.push(o),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e,t){if(this.length===0)return!0;let n=await cr(e,t),o=rn(n,this.originDhtKey),s=this.peerDistances[this.peerDistances.length-1].distance;return ai(o,s)===-1}async anyCloser(e,t){return e.length===0?!1:Promise.any(e.map(async n=>this.isCloser(n,t)))}};var a0=class{log;routingTable;network;validators;queryManager;components;constructor(e,t){this.routingTable=t.routingTable,this.network=t.network,this.validators=t.validators,this.queryManager=t.queryManager,this.components=e,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,t){let n,o=await this.routingTable.find(e,t);if(o!=null){this.log("findPeerLocal found %p in routing table",e);try{n=await this.components.peerStore.get(o,t)}catch(s){if(s.name!=="NotFoundError")throw s}}if(n==null)try{n=await this.components.peerStore.get(e,t)}catch(s){if(s.name!=="NotFoundError")throw s}if(n!=null)return this.log("findPeerLocal found %p in peer store",e),{id:n.id,multiaddrs:n.addresses.map(s=>s.multiaddr)}}async*_getValueSingle(e,t,n){let o={type:Te.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=Zx(e),o={index:-1,queued:0,running:0,total:0};for await(let s of this._getValueSingle(e,n,{...t,path:o}))if(yield s,s.name==="PEER_RESPONSE"&&s.record!=null){let i=rt(s.record.value),a=En(i);if(!a.equals(e))throw new Dn("public key does not match id");if(a.publicKey==null)throw new Dn("public key missing");yield cu({from:e,value:s.record.value,path:o},t)}throw new jo(`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,t);if(o!=null){this.log("found local"),yield Jp({from:this.components.peerId,peer:o,path:{index:-1,queued:0,running:0,total:0}},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,s=async function*({peer:i,signal:a,path:c}){let l={type:Te.FIND_NODE,key:e.toMultihash().bytes};for await(let d of o.network.sendRequest(i.id,l,{...t,signal:a,path:c}))if(yield d,d.name==="PEER_RESPONSE"){let u=d.closer.find(f=>f.id.equals(e));u!=null&&(yield Jp({from:d.from,peer:u,path:d.path},t))}};for await(let i of this.queryManager.run(e.toMultihash().bytes,s,t))i.name==="FINAL_PEER"&&(n=!0),yield i}if(!n)throw new De("Not found")}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await Jo(e,t),o=new ts(n,this.routingTable.kBucketSize),s=this,i=async function*({peer:a,path:c,peerKadId:l,signal:d}){s.log("getClosestPeers asking %p",a.id);let u={type:Te.FIND_NODE,key:e};yield*s.network.sendRequest(a.id,u,{...t,signal:d,path:c}),o.addWithKadId(a,l,c)};yield*this.queryManager.run(e,i,t),this.log("found %d peers close to %b",o.length,e);for(let{peer:a,path:c}of o.peers)try{if(a.multiaddrs.length===0&&(a=await s.components.peerStore.getInfo(a.id,t)),a.multiaddrs.length===0)continue;yield Jp({from:this.components.peerId,peer:await s.components.peerStore.getInfo(a.id,t),path:{index:c.index,queued:0,running:0,total:0}},t)}catch{continue}}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,n)}catch{let i="invalid record received, discarded";this.log(i),yield on({from:o.from,error:new jo(i),path:n.path},n);continue}yield o}}async _verifyRecordOnline(e,t){if(e.timeReceived==null)throw new Qp("invalid record received");await Ka(this.validators,new Pt(e.key,e.value,e.timeReceived),t)}async getClosestPeersOffline(e,t){let n=[];try{let i=Re(e),a=Je(i),c=await this.components.peerStore.get(a,t);n.push({id:c.id,multiaddrs:c.addresses.map(({multiaddr:l})=>l)})}catch{}let o=await Jo(e,t),s=this.routingTable.closestPeers(o,t);for(let i of s)try{n.push(await this.components.peerStore.getInfo(i,t))}catch(a){if(a.name!=="NotFoundError")throw a}return n.length>0?this.log("getClosestPeersOffline returning the %d closest peer(s) we know to %b",n.length,e):this.log("getClosestPeersOffline could not any peers close to %b with %d peers in the routing table",e,this.routingTable.size),n}};var c0=class{log;datastore;datastorePrefix;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:providers`),this.datastorePrefix=`${t.datastorePrefix}/provider`,this.datastore=e.datastore}async addProvider(e,t,n){this.log.trace("%p provides %s",t,e),await this.writeProviderEntry(e,t,n)}async removeProvider(e,t,n){let o=t0(this.datastorePrefix,e,t);this.log.trace("%p no longer provides %s",t,e),await this.datastore.delete(o,n)}async getProviders(e,t){this.log.trace("get providers for %c",e);let n=await this.loadProviders(e,t);return this.log.trace("got %d providers for %c",n.size,e),[...n.keys()]}async writeProviderEntry(e,t,n){let o=t0(this.datastorePrefix,e,t),s=Mt(n?.time?.getTime()??Date.now());await this.datastore.put(o,s,n)}async loadProviders(e,t){let n=new Ft,o=t0(this.datastorePrefix,e);for await(let s of this.datastore.query({prefix:o.toString()},t)){let{peerId:i}=e0(s.key);n.set(i,r0(s.value))}return n}};async function*rv(r){let{key:e,startingPeers:t,ourPeerId:n,query:o,alpha:s,path:i,numPaths:a,log:c,peersSeen:l,connectionManager:d,signal:u}=r,f=St({objectMode:!0}),h=new At({concurrency:s,sort:(g,m)=>ai(g.options.distance,m.options.distance)});h.addEventListener("idle",()=>{f.push(Gx({path:{index:i,queued:h.queued,running:h.running,total:h.size}},r)),f.end()}),h.addEventListener("failure",g=>{c.error("error during query - %e",g.detail.error)});let p=()=>{h.abort(),f.end(new Ht)};u.addEventListener("abort",p);try{let m=function(w,I){if(w==null)return;l.add(w.id.toMultihash().bytes);let T=rn(I,g);h.add(async()=>{try{for await(let D of o({...r,key:e,peer:w,path:{index:i,queued:h.queued,running:h.running,total:h.size},numPaths:a,peerKadId:I,signal:u})){if(D.name==="PEER_RESPONSE")for(let F of D.closer){if(l.has(F.id.toMultihash().bytes)){c("already seen %p in query",F.id);continue}if(n.equals(F.id)){c("not querying ourselves");continue}if(!await d.isDialable(F.multiaddrs)){c("not querying undialable peer");continue}let $=await cr(F.id,{signal:u}),z=rn($,g);if(ai(z,T)!==-1){c("skipping %p as they are not closer to %b than %p",F.id,e,w.id);continue}c("querying closer peer %p",F.id),m(F,$)}f.push({...D,path:{index:i,queued:h.queued,running:h.running,total:h.size}})}}catch(D){f.push(on({from:w.id,error:D,path:{index:i,queued:h.queued,running:h.running-1,total:h.size-1}},r))}},{distance:T}).catch(D=>{c.error("error during query - %e",D)})},g=await Jo(e,{signal:u});await Promise.all(t.map(async w=>{m({id:w,multiaddrs:[]},await cr(w,{signal:u}))})),yield*f}finally{u.removeEventListener("abort",p)}}var l0=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;allowQueryWithZeroPeers;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??Xp,this.alpha=t.alpha??Qo,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.allowQueryWithZeroPeers=t.allowQueryWithZeroPeers??!1,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(Hx);n={...n,signal:c}}let o=new AbortController,s=le([this.shutDownController.signal,o.signal,n.signal]);o.signal;let i=this.logger.forComponent(`${this.logPrefix}:query:`+P(e,"base58btc")),a=!1;try{this.routingTable.size===0&&!this.allowQueryWithZeroPeers&&(i("routing table was empty, waiting for some peers before running%s query",n.isSelfQuery===!0?" self":""),await xe(this.routingTable,"peer:add",{signal:s,filter:h=>!this.peerId.equals(h.detail)}),i("routing table has peers, continuing with%s query",n.isSelfQuery===!0?" self":"")),n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(i("waiting for initial self query before continuing"),await Pe(this.initialQuerySelfHasRun.promise,s),this.initialQuerySelfHasRun=void 0),i("query:start");let c=await Jo(e,{signal:s}),l=this.routingTable.closestPeers(c,{count:this.routingTable.kBucketSize}),d=l.sort(()=>Math.random()>.5?1:-1).reduce((h,p,g)=>(h[g%this.disjointPaths].push(p),h),new Array(this.disjointPaths).fill(0).map(()=>[])).filter(h=>h.length>0);if(l.length===0){i.error("running query with no peers");return}let u=xt(1024),f=d.map((h,p)=>rv({...n,key:e,startingPeers:h,ourPeerId:this.peerId,signal:s,query:t,path:p,numPaths:d.length,alpha:this.alpha,log:i,peersSeen:u,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let h of Xt(...f)){if(h.name==="QUERY_ERROR"&&i.error("query error - %e",h.error),h.name==="PEER_RESPONSE")for(let p of[...h.closer,...h.providers])await this.connectionManager.isDialable(p.multiaddrs,{signal:s})&&await this.routingTable.add(p.id,{signal:s});s.throwIfAborted(),yield h}a=!0}catch(c){if(this.running)throw c}finally{a||(i("query exited early"),o.abort()),s.clear(),i("query finished")}}};function oD(r){return r[Symbol.asyncIterator]!=null}function sD(r){if(oD(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 u0=sD;var d0=class{log;peerId;peerRouting;events;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.events=e.events,this.running=!1,this.peerRouting=t.peerRouting,this.count=t.count??Xp,this.interval=t.interval??Ux,this.initialInterval=t.initialInterval??Fx,this.queryTimeout=t.queryTimeout??$x,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=n0(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",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=fe(),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=le(e);this.controller.signal;try{this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await zi(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),i=>Ko(i,this.count),async i=>u0(i));t?.throwIfAborted();let s=Date.now()-n;this.log("self-query found %d peers in %dms",o,s),this.events.dispatchEvent(new CustomEvent("kad-dht:query:self",{detail:{peers:o,duration:s}}))}catch(n){this.log.error("self-query error - %e",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",e)})},this.interval))}};var f0=class extends ie{log;reprovideQueue;maxQueueSize;datastore;timeout;reprovideTimeout;running;shutdownController;reprovideThreshold;contentRouting;datastorePrefix;addressManager;validity;interval;peerId;constructor(e,t){super(),this.log=e.logger.forComponent(`${t.logPrefix}:reprovider`),this.peerId=e.peerId,this.reprovideQueue=new At({concurrency:t.concurrency??Nx,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new zr({...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??Dx,this.maxQueueSize=t.maxQueueSize??Ox,this.validity=t.validity??Yp,this.interval=t.interval??Bx,this.contentRouting=t.contentRouting,this.running=!1,this.reprovide=n0(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,this.timeout=setTimeout(()=>{this.processRecords({signal:AbortSignal.timeout(q4)}).catch(e=>{this.log.error("error running process to reprovide/cleanup - %e",e)})},this.interval))}stop(){this.running=!1,this.reprovideQueue.clear(),clearTimeout(this.timeout),this.shutdownController?.abort()}async processRecords(e){try{this.safeDispatchEvent("reprovide:start"),this.log("starting reprovide/cleanup");for await(let t of this.datastore.query({prefix:this.datastorePrefix},e))try{let{cid:n,peerId:o}=e0(t.key),i=r0(t.value).getTime()+this.validity,a=Date.now(),c=a>i,l=this.peerId.equals(o);this.log.trace("comparing: %d (now) < %d (expires) = %s %s",a,i,c,c?"(expired)":"(valid)"),c&&!l&&await this.datastore.delete(t.key,e),this.shouldReprovide(l,i)&&(this.log("reproviding %c as it is within the reprovide threshold (%d)",n,this.reprovideThreshold),this.queueReprovide(n).catch(d=>{this.log.error("could not reprovide %c - %e",n,d)}))}catch(n){this.log.error("error processing datastore key %s - %s",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{this.safeDispatchEvent("reprovide:end"),this.running&&(this.log("queuing next re-provide/cleanup run in %d ms",this.interval),this.timeout=setTimeout(()=>{this.processRecords({signal:AbortSignal.timeout(q4)}).catch(t=>{this.log.error("error running re-provide - %e",t)})},this.interval))}}shouldReprovide(e,t){if(!e)return!1;let n=Date.now();return t<n?!0:t-n<this.reprovideThreshold}async queueReprovide(e,t){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,t);let n=this.reprovideQueue.queue.find(o=>o.options.cid.equals(e));if(n!=null)return this.log.trace("not adding %c to re-provide queue - already in queue",e),n.join();this.log.trace("adding %c to re-provide queue",e),this.reprovideQueue.add(async o=>{if(o.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let s=this.reprovideTimeout.getTimeoutSignal(o);try{await this.reprovide(o.cid,o)}finally{this.reprovideTimeout.cleanUp(s)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(o=>{this.log.error("could not re-provide key %c - %e",e,o)})}async reprovide(e,t){await er(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var iD=20,aD=5e3,cD="kad-close",lD=50,h0=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??aD,this.peerSetSize=t.peerSetSize??iD,this.closeTagName=t.closeTagName??cD,this.closeTagValue=t.closeTagValue??lD,this.closestPeers=new xr,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await cr(this.components.peerId);this.newPeers=new ts(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 xr(this.newPeers?.peers.map(({peer: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},[W4]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[W4]:void 0}})})])}};function uu(r){return Array.isArray(r?.peers)}var p0=class{peerId;root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e,t){this.peerId=e.peerId,this.prefixLength=t.prefixLength??nv,this.kBucketSize=t.kBucketSize??du,this.splitThreshold=t.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=t.numberOfOldContactsToPing??ov,this.lastPingThreshold=t.lastPingThreshold??sv,this.ping=t.ping,this.verify=t.verify,this.onAdd=t.onAdd,this.onRemove=t.onRemove,this.addingPeerMap=Jn({name:`${t.metricsPrefix}_adding_peer_map`,metrics:e.metrics}),this.root={prefix:"",depth:0,peers:[]}}async start(){await this.addSelfPeer(this.peerId)}stop(){this.addingPeerMap.clear(),this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e,t){this.localPeer={peerId:e,kadId:await cr(e,t),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await cr(e,t),lastPing:0},o=this.addingPeerMap.get(e);if(o!=null)return o;try{let s=this._add(n,t);this.addingPeerMap.set(e,s),await s}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,t),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!dD(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n,t);return}await this.verify(e,t)&&(e.lastPing=Date.now(),await this._add(e,t));return}let o=n.peers.filter(i=>!(i.peerId.equals(this.localPeer?.peerId)||i.lastPing>Date.now()-this.lastPingThreshold)).sort((i,a)=>i.lastPing<a.lastPing?-1:i.lastPing>a.lastPing?1:0).slice(0,this.numberOfNodesToPing),s=!1;for await(let i of this.ping(o,t))s=!0,await this.remove(i.kadId,t);s&&await this._add(e,t)}*closest(e,t){let n=new ts(e,t?.count??this.kBucketSize);for(let o of this.toIterable())t?.exclude?.some(s=>s.equals(o.peerId))!==!0&&n.addWithKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*Pr(n.peers,({peer:o})=>o.id)}count(){function e(t){if(uu(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,t){let n=this._determineBucket(e),o=this._indexOf(n,e);if(o>-1){let s=n.peers.splice(o,1)[0];await this.onRemove?.(s,n,t)}}*toIterable(){function*e(t){if(uu(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+P(rn(e,t),"base16"))}_determineBucket(e){let t=P(e,"base2");function n(o,s=0){return uu(o)?o:t[s]==="0"?n(o.left,s+1):n(o.right,s+1)}return n(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>ee(n.kadId,t))}async _split(e,t){let n={prefix:"0",depth:e.depth+1,peers:[]},o={prefix:"1",depth:e.depth+1,peers:[]};for(let s of e.peers)P(s.kadId,"base2")[e.depth]==="0"?(n.peers.push(s),await this.onMove?.(s,e,n,t)):(o.peers.push(s),await this.onMove?.(s,e,o,t));uD(e,n,o)}};function uD(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function dD(r,e){return r.lastPing<Date.now()-e}var du=20,nv=6;var fD=20,hD=100,ov=3;var pD=20,mD=100,iv="kad-peer",gD=1,sv=6e5,yD=!0,wD=1e3,m0=class extends ie{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;shutdownController;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??du,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??iv,this.peerTagValue=t.peerTagValue??gD,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??yD,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??wD,this.shutdownController=new AbortController,this.shutdownController.signal,this.pingOldContactQueue=new It({concurrency:t.pingOldContactConcurrency??pD,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??mD}),this.pingOldContactTimeout=new zr({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new It({concurrency:t.pingNewContactConcurrency??fD,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??hD}),this.pingNewContactTimeout=new zr({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new p0(e,{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,metricsPrefix:t.metricsPrefix}),this.closestPeerTagger=new h0(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,this.shutdownController=new AbortController,this.shutdownController.signal,await ct(this.closestPeerTagger,this.kb))}async afterStart(){let e=0;Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let t=le([this.shutdownController.signal,AbortSignal.timeout(2e4)]);try{for(let n of await this.components.peerStore.all({filters:[o=>o.protocols.includes(this.protocol)&&o.tags.has(iv)],limit:this.populateFromDatastoreLimit,signal:t})){if(!this.running)return;try{await this.add(n.id,{signal:t}),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(n.id,{tags:{[this.peerTagName]:void 0}})}}}finally{t.clear()}this.log("added %d peer store peers to the routing table",e)}).catch(t=>{this.log.error("error adding %d, peer store peers to the routing table - %e",e,t)})}async stop(){this.running=!1,await ut(this.closestPeerTagger,this.kb),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort(),this.shutdownController.abort()}async peerAdded(e,t,n){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}},n),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t,n){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}},n),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 s=this.pingOldContactQueue.find(o.peerId);if(s!=null)return this.log("asked to ping contact %p was already being pinged",o.peerId),await s.join(t)?void 0:o;if(!await this.pingOldContactQueue.add(async a=>{let c=this.pingOldContactTimeout.getTimeoutSignal(),l=le([c,this.shutdownController.signal,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 so(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=le([n,this.shutdownController.signal,t?.signal]);try{let s=this.pingNewContactQueue.find(e.peerId);return s!=null?(this.log("joining existing ping to add new peer %p to routing table",e.peerId),await s.join({signal:o})):await this.pingNewContactQueue.add(async i=>(this.metrics?.kadBucketEvents.increment({ping_new_contact:!0}),this.log("pinging new peer %p before adding to routing table",e.peerId),this.pingContact(e,i)),{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{return this.log("pinging contact %p",e.peerId),await this.components.ping.ping(e.peerId,t),this.log("contact %p ping ok",e.peerId),this.safeDispatchEvent("peer:ping",{detail:e.peerId}),!0}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,t){let n=await cr(e,t);return this.kb.get(n)?.peerId}closestPeer(e){let t=this.closestPeers(e,{count:1});if(t.length>0)return t[0]}closestPeers(e,t){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,t){if(this.kb==null)throw new Error("RoutingTable is not started");let n=await cr(e,t);await this.kb.remove(n,t)}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0,o=20,s=0;function i(a){if(uu(a)){a.depth>n&&(n=a.depth),t++,e+=a.peers.length,a.peers.length<o&&(o=a.peers.length),a.peers.length>s&&(s=a.peers.length);return}i(a.left),i(a.right)}i(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(s),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var av=[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 g0=15,y0=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:s,refreshQueryTimeout:i,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=s??Kx,this.refreshQueryTimeout=i??Vx,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,t){this.log("refreshing routing table");let n=this._maxCommonPrefix(),o=this._getTrackedCommonPrefixLengthsForRefresh(n);this.log(`max common prefix length ${n}`),this.log(`tracked CPLs [ ${o.map(s=>s.toISOString()).join(", ")} ]`),Promise.all(o.map(async(s,i)=>{try{if(await this._refreshCommonPrefixLength(i,s,e,t),this._numPeersForCpl(n)===0){let a=Math.min(2*(i+1),o.length-1);for(let c=i+1;c<a+1;c++)try{await this._refreshCommonPrefixLength(c,s,e,t)}catch(l){this.log.error("failed to refresh entries with common prefix length %d - %e",c,l)}}}catch(a){this.log.error("failed to refresh entries with common prefix length - %e",a)}})).catch(s=>{this.log.error("failed to refresh table - %e",s)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(s=>{this.log.error("failed to set refresh timeout - %e",s)})}async _refreshCommonPrefixLength(e,t,n,o){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 s=this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,s,this.routingTable.size);let i=le([o?.signal,AbortSignal.timeout(this.refreshQueryTimeout)]);try{let a=await u0(this.peerRouting.getClosestPeers(s.toMultihash().bytes,{signal:i}));this.log(`found ${a} peers that were close to imaginary peer %p`,s),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,s,this.routingTable.size)}finally{i.clear()}}_getTrackedCommonPrefixLengthsForRefresh(e){e>g0&&(e=g0);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}_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=Yt(2),n=(t[1]<<8)+t[0],o=this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),s=Re(o);return Je(s)}_makePeerId(e,t,n){if(n>g0)throw new Error(`Cannot generate peer ID for common prefix length greater than ${g0}`);let i=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,a=65535<<16-(n+1),c=i&a|t&~a,l=av[c],d=new ArrayBuffer(34),u=new DataView(d,0,d.byteLength);return u.setUint8(0,Ge.code),u.setUint8(1,32),u.setUint32(2,l,!1),new Uint8Array(u.buffer,u.byteOffset,u.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=rn(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var w0=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 de("Missing key");let n;try{n=G.decode(t.key)}catch{throw new de("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 s=Re(o.id),i=Je(s),a=o.multiaddrs.map(c=>q(c));if(!e.equals(i)){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,i),await this.peerStore.merge(i,{multiaddrs:a})}))}};var b0=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){this.log("incoming request from %p for peers close to %b",e,t.key);try{if(t.key==null)throw new de("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getClosestPeersOffline(t.key,{exclude:[e,this.peerId]});ee(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(s=>s.decapsulateCode(421))});let o={type:Te.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:s})=>s.length).map(s=>({id:s.id.toMultihash().bytes,multiaddrs:s.multiaddrs.map(i=>i.bytes)})),providers:[]};return o.closer.length===0?this.log("could not find any peers closer to %b for %p",t.key,e):this.log("found %d peers close to %b for %p",o.closer.length,t.key,e),o}catch(n){throw this.log("error during finding peers closer to %b for %p - %e",t.key,e,n),n}}};var E0=class{peerId;peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:s}=t;this.log=e.logger.forComponent(`${s}: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 de("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=G.decode(t.key)}catch{throw new de("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[o,s]=await Promise.all([ro(Pr(await this.providers.getProviders(n),async a=>{let c=await this.peerStore.get(a);return{id:c.id,multiaddrs:c.addresses.map(({multiaddr:d})=>d)}})),this.peerRouting.getClosestPeersOffline(t.key)]),i={type:Te.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:s.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",i.providers.length,i.closer.length),i}async _getAddresses(e){return[]}};var x0=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 de("Invalid key");let o={type:Te.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(Jx(n)){this.log("is public key");let a=ev(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new De("No public key found in key book");c=ht(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new Pt(n,c,new Date).serialize(),o}let[s,i]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getClosestPeersOffline(n)]);return s!=null&&(this.log("had record for %b in local datastore",n),o.record=s.serialize()),i.length>0&&(this.log("had %s closer peers in routing table",i.length),o.closer=i.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=es(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(s){if(s.name==="NotFoundError")return;throw s}let o=Pt.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>Yp){await this.datastore.delete(t);return}return o}};var v0=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 S0=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)throw this.log.error("empty record from %p",e),new de(`Empty record from: ${e}`);try{let o=Pt.deserialize(t.record);await Ka(this.validators,o),o.timeReceived=new Date;let s=es(this.datastorePrefix,o.key);await this.components.datastore.put(s,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,s)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var A0=class{handlers;log;metrics;incomingMessageTimeout;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`),rpcTime:e.metrics?.registerMetricGroup(`${t.metricsPrefix}_inbound_rpc_time_seconds`,{label:"operation"})},this.log=e.logger.forComponent(`${t.logPrefix}:rpc`),this.incomingMessageTimeout=t.incomingMessageTimeout??1e4,this.handlers={[Te.GET_VALUE.toString()]:new x0(e,t),[Te.PUT_VALUE.toString()]:new S0(e,t),[Te.FIND_NODE.toString()]:new b0(e,t),[Te.ADD_PROVIDER.toString()]:new w0(e,t),[Te.GET_PROVIDERS.toString()]:new E0(e,t),[Te.PING.toString()]:new v0(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})}}async onIncomingStream(e,t){let n=()=>{e.abort(new ln)},o=AbortSignal.timeout(this.incomingMessageTimeout);o.addEventListener("abort",n);let s=Fe(e).pb(Zo);for(;;){if(e.readStatus!=="readable"){await e.close({signal:o});break}let i=await s.read({signal:o}),a=this.metrics?.rpcTime?.timer(i.type.toString()),c=this.metrics?.rpcTime?.timer(i.type.toString()),l=!1;try{this.log("incoming %s from %p",i.type,t.remotePeer);let d=await this.handleMessage(t.remotePeer,i);d!=null&&await s.write(d,{signal:o})}catch(d){throw l=!0,c?.(),d}finally{l||a?.()}o.removeEventListener("abort",n),o=AbortSignal.timeout(this.incomingMessageTimeout),o.addEventListener("abort",n)}}};var T0=class extends ie{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 j4=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await er(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.map(o=>({...o,routing:"kad-dht"})))}async put(e,t,n){await er(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 De("Could not find value for key")}},Z4=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 De("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},bD=32,ED=64,I0=class extends ie{k;a;d;protocol;routingTable;providers;network;peerRouting;components;log;running;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;reprovider;onPeerConnectTimeout;constructor(e,t={}){super();let n=t.logPrefix??"libp2p:kad-dht",o=t.datastorePrefix??"/dht",s=t.metricsPrefix??"libp2p_kad_dht",i={queries:e.metrics?.registerMetricGroup(`${s}_operations_total`,{label:"operation"}),errors:e.metrics?.registerCounterGroup(`${s}_operation_errors_total`,{label:"operation"}),queryTime:e.metrics?.registerMetricGroup(`${s}_operation_time_seconds`,{label:"operation"}),errorTime:e.metrics?.registerMetricGroup(`${s}_operation_error_time_seconds`,{label:"operation"})};this.running=!1,this.components=e,this.log=e.logger.forComponent(n),this.k=t.kBucketSize??du,this.a=t.alpha??Qo,this.d=t.disjointPaths??this.a,this.protocol=t.protocol??Lx,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??bD,this.maxOutboundStreams=t.maxOutboundStreams??ED,this.peerInfoMapper=t.peerInfoMapper??jx,this.onPeerConnectTimeout=t.onPeerConnectTimeout??Mx,this.providers=new c0(e,{...t.providers,logPrefix:n,datastorePrefix:o}),this.validators={...Qx,...t.validators},this.selectors={...Xx,...t.selectors},this.network=new i0(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:s}),this.routingTable=new m0(e,{kBucketSize:this.k,pingOldContactTimeout:t.pingOldContactTimeout,pingOldContactConcurrency:t.pingOldContactConcurrency,pingOldContactMaxQueueSize:t.pingOldContactMaxQueueSize,pingNewContactTimeout:t.pingNewContactTimeout,pingNewContactConcurrency:t.pingNewContactConcurrency,pingNewContactMaxQueueSize:t.pingNewContactMaxQueueSize,protocol:this.protocol,logPrefix:n,metricsPrefix:s,prefixLength:t.prefixLength,splitThreshold:t.kBucketSplitThreshold,network:this.network});let a=fe();t.allowQueryWithZeroPeers===!0&&a.resolve(),this.queryManager=new l0(e,{disjointPaths:this.d,alpha:this.a,logPrefix:n,metricsPrefix:s,initialQuerySelfHasRun:a,routingTable:this.routingTable,allowQueryWithZeroPeers:t.allowQueryWithZeroPeers}),this.peerRouting=new a0(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new o0(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:o}),this.contentRouting=new s0(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new y0(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new A0(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:n,metricsPrefix:s,datastorePrefix:o,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new T0(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new d0(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:a,operationMetrics:i}),this.reprovider=new f0(e,{...t.reprovide,logPrefix:n,metricsPrefix:s,datastorePrefix:o,contentRouting:this.contentRouting,operationMetrics:i}),this.network.addEventListener("peer",c=>{let l=c.detail;this.onPeerConnect(l).catch(d=>{this.log.error("could not add %p to routing table - %e",l.id,d)}),this.dispatchEvent(new CustomEvent("peer",{detail:l}))}),this.topologyListener.addEventListener("peer",c=>{let l=c.detail;Promise.resolve().then(async()=>{let d=await this.components.peerStore.get(l),u={id:l,multiaddrs:d.addresses.map(({multiaddr:f})=>f),protocols:d.protocols};await this.onPeerConnect(u)}).catch(d=>{this.log.error("could not add %p to routing table - %e",l,d)})}),this.dhtPeerRouting=new Z4(this),this.dhtContentRouting=new j4(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",c=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let l=c.detail.peer.addresses.some(({multiaddr:u})=>!Ze(u)&&!wt.exactMatch(u)),d=this.getMode();l&&d==="client"?await this.setMode("server"):d==="server"&&!l&&await this.setMode("client")}).catch(l=>{this.log.error("error setting dht server mode - %e",l)})}),this.get=ii(this.get.bind(this),i,"GET_VALUE"),this.findProviders=ii(this.findProviders.bind(this),i,"FIND_PROVIDERS"),this.findPeer=ii(this.findPeer.bind(this),i,"FIND_PEER"),this.getClosestPeers=ii(this.getClosestPeers.bind(this),i,"GET_CLOSEST_PEERS"),this.provide=ii(this.provide.bind(this),i,"PROVIDE"),this.put=ii(this.put.bind(this),i,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[me]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery","@libp2p/kad-dht"];[ur]=["@libp2p/identify","@libp2p/ping"];get[Ln](){return this.dhtContentRouting}get[Nn](){return this.dhtPeerRouting}get[as](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id,e.multiaddrs),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(n=>n.toString()));return}let t=AbortSignal.timeout(this.onPeerConnectTimeout);try{await this.routingTable.add(e.id,{signal:t})}catch(n){this.log.error("could not add %p to routing table - %e",e.id,n)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t){if(e===this.getMode()&&t?.force!==!0){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol,t),e===this.getMode()&&t?.force!==!0){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),{signal:t?.signal,maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running||(this.running=!0,await this.setMode(this.clientMode?"client":"server",{force:!0}),await ct(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await ct(this.querySelf))}async stop(){this.running=!1,await ut(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,t){await this.providers.removeProvider(e,this.components.peerId,t)}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(e){this.routingTableRefresh.refreshTable(!0,e)}};var cv;(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",r[r.PATH_ENDED=8]="PATH_ENDED"})(cv||(cv={}));function lv(r={}){return e=>new I0(e,r)}var Ie;(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"})(Ie||(Ie={}));var fu=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),J4=Object.freeze({NEW_STREAM:Ie.NEW_STREAM,MESSAGE:Ie.MESSAGE_INITIATOR,CLOSE:Ie.CLOSE_INITIATOR,RESET:Ie.RESET_INITIATOR}),uv=Object.freeze({MESSAGE:Ie.MESSAGE_RECEIVER,CLOSE:Ie.CLOSE_RECEIVER,RESET:Ie.RESET_RECEIVER});var hu=1<<20,e6=4<<20,_0=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=hu,t=e6){this._buffer=new Q,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 de("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:s,offset:i}=this._headerInfo;if(this._buffer.length-i<s)break;let c={id:n,type:o};(o===Ie.NEW_STREAM||o===Ie.MESSAGE_INITIATOR||o===Ie.MESSAGE_RECEIVER)&&(c.data=this._buffer.sublist(i,i+s)),t.push(c),this._buffer.consume(i+s),this._headerInfo=null}return t}_decodeHeader(e){let{value:t,offset:n}=fv(e),{value:o,offset:s}=fv(e,n),i=t&7;if(fu[i]==null)throw new Error(`Invalid type received: ${i}`);if(o>this._maxMessageSize)throw new de("Message size too large");return{id:t>>3,type:i,offset:n+s,length:o}}},xD=128,dv=127;function fv(r,e=0){let t=0,n=0,o=e,s,i=r.length;do{if(o>=i||n>49)throw e=0,new RangeError("Could not decode varint");s=r.get(o++),t+=n<28?(s&dv)<<n:(s&dv)*Math.pow(2,n),n+=7}while(s>=xD);return e=o-e,{value:t,offset:e}}var t6=10*1024,r6=class{_pool;_poolOffset;constructor(){this._pool=Ye(t6),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Mt(e.id<<3|e.type,n,o),o+=he(e.id<<3|e.type),(e.type===Ie.NEW_STREAM||e.type===Ie.MESSAGE_INITIATOR||e.type===Ie.MESSAGE_RECEIVER)&&e.data!=null?(Mt(e.data.length,n,o),o+=he(e.data.length)):(Mt(0,n,o),o+=he(0));let s=n.subarray(this._poolOffset,o);t6-o<100?(this._pool=Ye(t6),this._poolOffset=0):this._poolOffset=o,t.append(s),(e.type===Ie.NEW_STREAM||e.type===Ie.MESSAGE_INITIATOR||e.type===Ie.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},vD=new r6;function pu(r){let e=new Q;return vD.write(r,e),e}var n6=class extends Oo{streamId;types;maxDataSize;muxer;constructor(e){super(e),this.types=e.direction==="outbound"?J4:uv,this.maxDataSize=e.maxDataSize,this.muxer=e.muxer,this.streamId=parseInt(this.id.substring(1)),e.direction==="outbound"&&queueMicrotask(()=>{this.muxer.send(pu({id:this.streamId,type:J4.NEW_STREAM,data:new Q(C(this.id))}))})}sendData(e){let t=new Q,n=e.byteLength;for(;e.byteLength>0;){let o=Math.min(e.byteLength,this.maxDataSize),s=e.sublist(0,o);e=e.sublist(o),t.append(pu({id:this.streamId,type:this.types.MESSAGE,data:s}))}return{sentBytes:n,canSendMore:this.muxer.send(t)}}sendReset(){return this.muxer.send(pu({id:this.streamId,type:this.types.RESET}))}async sendCloseWrite(e){this.muxer.send(pu({id:this.streamId,type:this.types.CLOSE})),e?.signal?.throwIfAborted()}async sendCloseRead(e){e?.signal?.throwIfAborted()}sendPause(){}sendResume(){}};function hv(r){let{id:e,muxer:t,direction:n,maxMsgSize:o=hu}=r;return new n6({...r,id:n==="outbound"?`i${e}`:`r${e}`,direction:n,maxDataSize:o,muxer:t,log:r.log.newScope(`${n}:${e}`),protocol:""})}var SD=5;function AD(r){let e={...r,type:`${fu[r.type]} (${r.type})`};return r.type===Ie.NEW_STREAM&&(e.data=P(r.data.subarray())),(r.type===Ie.MESSAGE_INITIATOR||r.type===Ie.MESSAGE_RECEIVER)&&(e.data=P(r.data.subarray(),"base16")),e}var C0=class extends No{_streamId;rateLimiter;maxMessageSize;maxUnprocessedMessageQueueSize;decoder;constructor(e,t){super(e,{...t,protocol:"/mplex/6.7.0",name:"mplex"}),this._streamId=0,this.maxMessageSize=t.maxMessageSize??hu,this.maxUnprocessedMessageQueueSize=t.maxUnprocessedMessageQueueSize??e6,this.decoder=new _0(this.maxMessageSize,this.maxUnprocessedMessageQueueSize),this.rateLimiter=new ta({points:t.disconnectThreshold??SD,duration:1})}onData(e){for(let t of this.decoder.write(e))this.handleMessage(t)}onCreateStream(e){if(this.status!=="open")throw new Br("Muxer already closed");let t=this._streamId++;return this._newStream(t,"outbound",e)}_newStream(e,t,n){return this.log("new %s stream %s",t,e),hv({...n,id:e,direction:t,maxMsgSize:this.maxMessageSize,log:this.log,muxer:this})}handleMessage(e){if(this.log.enabled&&this.log.trace("incoming message",AD(e)),e.type===Ie.NEW_STREAM){try{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}let o=this._newStream(e.id,"inbound",this.streamOptions);this.onRemoteStream(o);return}let t=`${(e.type&1)===1?"i":"r"}${e.id}`,n=this.streams.find(o=>o.id===t);if(n==null){this.log("missing stream %s for message type %s",t,fu[e.type]);try{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}try{switch(e.type){case Ie.MESSAGE_INITIATOR:case Ie.MESSAGE_RECEIVER:n.onData(e.data);break;case Ie.CLOSE_INITIATOR:case Ie.CLOSE_RECEIVER:n.onRemoteCloseWrite();break;case Ie.RESET_INITIATOR:case Ie.RESET_RECEIVER:n.onRemoteReset();break;default:this.log("unknown message type")}}catch(o){this.log.error("error while processing message - %e",o),n.abort(o)}}};var o6=class{protocol="/mplex/6.7.0";_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@libp2p/mplex";[me]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new C0(e,{...this._init})}};function pv(r={}){return()=>new o6(r)}var mv="1.0.0",gv="ping",yv="ipfs";var k0=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;constructor(e,t={}){this.components=e,this.started=!1,this.protocol=`/${t.protocolPrefix??yv}/${gv}/${mv}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnLimitedConnection=t.runOnLimitedConnection??!0,this.handlePing=this.handlePing.bind(this)}[Symbol.toStringTag]="@libp2p/ping";[me]=["@libp2p/ping"];async start(){await this.components.registrar.handle(this.protocol,this.handlePing,{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}async handlePing(e,t){let n=e.log.newScope("ping");n.trace("ping from %p",t.remotePeer);let o=AbortSignal.timeout(this.timeout);o.addEventListener("abort",()=>{e.abort(new ln("Ping timed out"))});let s=Date.now();for await(let i of e){if(e.status!=="open"){n("stream status changed to %s",e.status);break}e.send(i)||(n("waiting for stream to drain"),await xe(e,"drain",{rejectionEvents:["close"],signal:o}),n("stream drained"))}n("ping from %p complete in %dms",t.remotePeer,Date.now()-s),await e.close({signal:o})}async ping(e,t={}){let n=Yt(32),o=await this.components.connectionManager.openStream(e,this.protocol,{runOnLimitedConnection:this.runOnLimitedConnection,...t}),s=o.log.newScope("ping");try{let i=Date.now(),a=Promise.withResolvers(),c=new Q,l=d=>{if(c.append(d.data),c.byteLength===32){o.removeEventListener("message",l);let u=Date.now()-i;Promise.all([o.closeRead(t)]).then(()=>{if(ee(n,c.subarray()))a.resolve(u);else throw new ss(`Received wrong ping ack after ${u}ms`)}).catch(f=>{o.abort(f),a.reject(f)})}};return o.addEventListener("message",l),o.send(n),await o.close(t),await Pe(a.promise,t.signal)}catch(i){throw s.error("error while pinging %o - %e",e,i),o?.abort(i),i}finally{o?.close()}}};function bv(r={}){return e=>new k0(e,r)}var Vt;(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=()=>ze(t)})(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.flag!=null&&(s.uint32(8),r.Flag.codec().encode(o.flag,s)),o.message!=null&&(s.uint32(18),s.bytes(o.message)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={},c=s==null?o.len:o.pos+s;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=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(Vt||(Vt={}));var Ev=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"],s6=Array.from("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"),xv="libp2p+webrtc+v1/",vv=2*1024*1024,Va=16*1024;function CD(r=Va){let e=he(r-he(r)),t=1+he(Object.keys(Vt.Flag).length-1),n=1,o=r-e-t-n,s=he(o);return e+t+n+s}var Sv=CD();var Av=1e4,i6="/webrtc",mu="/webrtc-signaling/0.0.1";var Tv=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,s;n<o;n++)(s||!(n in e))&&(s||(s=Array.prototype.slice.call(e,0,n)),s[n]=e[n]);return r.concat(s||Array.prototype.slice.call(e))},kD=(function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r})();var RD=(function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r})();var PD=(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 LD=(function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r})();var DD=(function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r})();var ND=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,OD=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,Iv=3,BD=[["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",ND]],_v=[["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 kv(r){return r?Cv(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new DD:typeof navigator<"u"?Cv(navigator.userAgent):FD()}function MD(r){return r!==""&&BD.reduce(function(e,t){var n=t[0],o=t[1];if(e)return e;var s=o.exec(r);return!!s&&[n,s]},!1)}function Cv(r){var e=MD(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new LD;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<Iv&&(o=Tv(Tv([],o,!0),$D(Iv-o.length),!0)):o=[];var s=o.join("."),i=UD(r),a=OD.exec(r);return a&&a[1]?new PD(t,s,i,a[1]):new kD(t,s,i)}function UD(r){for(var e=0,t=_v.length;e<t;e++){var n=_v[e],o=n[0],s=n[1],i=s.exec(r);if(i)return o}return null}function FD(){var r=typeof process<"u"&&process.version;return r?new RD(process.version.slice(1)):null}function $D(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var Rv=kv(),R0=Rv!=null&&Rv.name==="firefox";async function a6(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??Ev.map(e=>({urls:[e]})),r}var Pv=(r=32)=>xv+[...Array(r)].map(()=>s6.at(Math.floor(Math.random()*s6.length))).join("");var c6=class extends Oo{channel;incomingData;maxBufferedAmount;receivedFinAck;finAckTimeout;constructor(e){super({...e,maxMessageSize:(e.maxMessageSize??Va)-Sv}),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=St(),this.maxBufferedAmount=e.maxBufferedAmount??vv,this.finAckTimeout=e.finAckTimeout??Av,this.channel.onclose=()=>{this.log.trace("received datachannel close event"),this.onRemoteCloseWrite(),this.onTransportClosed()},this.channel.onerror=n=>{let o=n.error;this.log.trace("received datachannel error event - %e",o),this.abort(o)},this.channel.onmessage=async n=>{this.log("incoming message %d bytes",n.data.byteLength);let{data:o}=n;o===null||o.byteLength===0||this.incomingData.push(new Uint8Array(o,0,o.byteLength))},this.channel.bufferedAmountLowThreshold=0,this.channel.onbufferedamountlow=()=>{this.writableNeedsDrain&&this.safeDispatchEvent("drain")},Promise.resolve().then(async()=>{for await(let n of Fs(this.incomingData))this.processIncomingProtobuf(n)}).catch(n=>{this.log.error("error processing incoming data channel messages - %e",n)});let t=()=>{this.channel.readyState==="open"&&(this.log.trace("stream closed, closing underlying datachannel"),this.channel.close())};this.addEventListener("close",t),this.channel.readyState!=="open"&&(this.log('channel ready state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),xe(this.channel,"open",{rejectionEvents:["close","error"]}).then(()=>{this.log('channel ready state is now "%s", dispatching drain',this.channel.readyState),this.safeDispatchEvent("drain")}).catch(n=>{this.abort(n.error??n)}))}sendNewStream(){}_sendMessage(e){if(this.channel.readyState!=="open")throw new an(`Invalid datachannel state - ${this.channel.readyState}`);if(this.log.trace('sending message, channel state "%s"',this.channel.readyState),R0){this.channel.send(e.subarray());return}for(let t of e)this.channel.send(t)}sendData(e){return this.channel.readyState!=="open"?{sentBytes:0,canSendMore:!1}:(this._sendMessage(Qn.single(Vt.encode({message:e.subarray()}))),{sentBytes:e.byteLength,canSendMore:this.channel.bufferedAmount<this.maxBufferedAmount})}sendReset(e){try{this.log.error("sending reset - %e",e),this._sendFlag(Vt.Flag.RESET),this.receivedFinAck?.reject(e)}catch(t){this.log.error("failed to send reset - %e",t)}}async sendCloseWrite(e){this._sendFlag(Vt.Flag.FIN),e?.signal?.throwIfAborted(),this.receivedFinAck=Promise.withResolvers();let t=e?.signal??AbortSignal.timeout(this.finAckTimeout),n=[xe(this.channel,"close",{signal:t}),xe(this.channel,"error",{signal:t})];await Promise.any([Pe(this.receivedFinAck.promise,t),...n]).finally(()=>{n.forEach(o=>o.cancel())})}async sendCloseRead(e){this._sendFlag(Vt.Flag.STOP_SENDING),e?.signal?.throwIfAborted()}processIncomingProtobuf(e){let t=Vt.decode(e);t.message!=null&&(this.readStatus==="readable"||this.readStatus==="paused")&&this.onData(new Q(t.message)),t.flag!==void 0&&(this.log.trace('incoming flag %s, write status "%s", read status "%s"',t.flag,this.writeStatus,this.readStatus),t.flag===Vt.Flag.FIN&&(this._sendFlag(Vt.Flag.FIN_ACK),this.onRemoteCloseWrite()),t.flag===Vt.Flag.RESET&&(this.receivedFinAck?.reject(new ui("The stream was reset")),this.onRemoteReset()),t.flag===Vt.Flag.STOP_SENDING&&this.onRemoteCloseRead(),t.flag===Vt.Flag.FIN_ACK&&this.receivedFinAck?.resolve())}_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=Vt.encode({flag:e}),n=Qn.single(t);try{return this._sendMessage(n),!0}catch(o){this.log.error("could not send flag %s - %e",e.toString(),o)}return!1}sendPause(){}sendResume(){}};function gu(r){let{channel:e,direction:t,isHandshake:n}=r;return new c6({...r,id:`${e.id}`,log:r.log.newScope(`${n===!0?"handshake":t}:${e.id}`),protocol:""})}var rs=class{protocol;peerConnection;metrics;dataChannelOptions;earlyDataChannels;constructor(e){this.onEarlyDataChannel=this.onEarlyDataChannel.bind(this),this.peerConnection=e.peerConnection,this.metrics=e.metrics,this.protocol=e.protocol??i6,this.dataChannelOptions=e.dataChannelOptions??{},this.peerConnection.addEventListener("datachannel",this.onEarlyDataChannel),this.earlyDataChannels=[]}onEarlyDataChannel(e){this.earlyDataChannels.push(e.channel)}createStreamMuxer(e){return this.peerConnection.removeEventListener("datachannel",this.onEarlyDataChannel),new l6(e,{peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,protocol:this.protocol,earlyDataChannels:this.earlyDataChannels})}},l6=class extends No{peerConnection;dataChannelOptions;constructor(e,t){super(e,{...t,name:"muxer"}),this.peerConnection=t.peerConnection,this.protocol=t.protocol??i6,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{this.onDataChannel(n)},queueMicrotask(()=>{if(this.status!=="open"){t.earlyDataChannels.forEach(n=>{n.close()});return}t.earlyDataChannels.forEach(n=>{this.onDataChannel(n)})})}onDataChannel(e){if(this.log("incoming datachannel with channel id %d, protocol %s and status %s",e.id,e.protocol,e.readyState),e.label==="init"){this.log.trace("closing init channel %d",e.id),e.close();return}let t=gu({...this.streamOptions,...this.dataChannelOptions,channel:e,direction:"inbound",log:this.log});this.onRemoteStream(t)}async onCreateStream(e){let t=this.peerConnection.createDataChannel("",{});return this.log("open channel %d for protocol %s",t.id,e?.protocol),gu({...e,...this.dataChannelOptions,channel:t,direction:"outbound",log:this.log})}onData(){}};var u6=class extends Do{peerConnection;constructor(e){super(e),this.peerConnection=e.peerConnection;let t=e.peerConnection.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change %s initial state %s",this.peerConnection.connectionState,t),(this.peerConnection.connectionState==="disconnected"||this.peerConnection.connectionState==="failed"||this.peerConnection.connectionState==="closed")&&(this.onTransportClosed(),this.peerConnection.close())}}sendData(e){return{sentBytes:e.byteLength,canSendMore:!0}}async sendClose(e){this.peerConnection.close(),e?.signal?.throwIfAborted()}sendReset(){this.peerConnection.close()}sendPause(){}sendResume(){}},yu=r=>new u6(r);var P0=globalThis.RTCPeerConnection,L0=globalThis.RTCSessionDescription,Lv=globalThis.RTCIceCandidate;var ns=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},Or=class extends ns{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var D0=class extends ns{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var N0=class extends ns{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},O0=class extends ns{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 lr;(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=()=>ze(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.data!=null&&(s.uint32(18),s.string(o.data)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={},c=s==null?o.len:o.pos+s;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=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(lr||(lr={}));var B0=async(r,e,t)=>{try{let n=Promise.withResolvers();for(KD(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal})]);if(o==null){t.signal?.throwIfAborted();break}if(o.type!==lr.Type.ICE_CANDIDATE)throw new de("ICE candidate message expected");let s=JSON.parse(o.data??"null");if(s===""||s===null){t.onProgress?.(new H("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let i=new Lv(s);t.log.trace("%s received new ICE candidate %o",t.direction,s);try{t.onProgress?.(new H("webrtc:add-ice-candidate",i.candidate)),await r.addIceCandidate(i)}catch(a){t.log.error("%s bad candidate received %o - %e",t.direction,s,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate - %e",t.direction,n),t.signal?.aborted===!0&&r.connectionState!=="connected")throw n}};function KD(r,e){if(r.connectionState==="connected"){e.resolve();return}r.onconnectionstatechange=t=>{switch(r.connectionState){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new li(`RTCPeerConnection connection state became "${r.connectionState}"`));break;default:break}}}function M0(r){let e;for(let t of r.getComponents())t.name==="p2p"&&(e=Me(t.value??""));if(e==null)throw new cn("Remote peerId must be present in multiaddr");return e}async function Dv({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:s,transportManager:i,log:a,logger:c,onProgress:l}){let{circuitAddress:d,targetPeer:u}=Nv(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing circuit address: %a",d);let f=s.getConnections(u),h;f.length===0?(l?.(new H("webrtc:dial-relay")),h=await i.dial(d,{signal:t,onProgress:l})):(l?.(new H("webrtc:reuse-relay-connection")),h=f[0]),l?.(new H("webrtc:open-signaling-stream"));let p=await h.newStream(mu,{signal:t,runOnLimitedConnection:!0}),g=Fe(p).pb(lr),m=new P0(r);m.addEventListener("connectionstatechange",()=>{switch(m.connectionState){case"closed":m.close();break;default:break}});let w=new rs({peerConnection:m,dataChannelOptions:e});try{let I=m.createDataChannel("init");m.onicecandidate=({candidate:$})=>{if(m.connectionState==="connected"){a.trace("ignore new ice candidate as peer connection is already connected");return}if($==null||$?.candidate===""){a.trace("initiator detected end of ICE candidates");return}let z=JSON.stringify($?.toJSON()??null);a.trace("initiator sending ICE candidate %o",$),g.write({type:lr.Type.ICE_CANDIDATE,data:z},{signal:t}).catch(S=>{a.error("error sending ICE candidate - %e",S)})},m.onicecandidateerror=$=>{a.error("initiator ICE candidate error",$)};let T=await m.createOffer().catch($=>{throw a.error("could not execute createOffer - %e",$),new Or("Failed to set createOffer")});a.trace("initiator send SDP offer %s",T.sdp),l?.(new H("webrtc:send-sdp-offer")),await g.write({type:lr.Type.SDP_OFFER,data:T.sdp},{signal:t}),await m.setLocalDescription(T).catch($=>{throw a.error("could not execute setLocalDescription - %e",$),new Or("Failed to set localDescription")}),l?.(new H("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let D=await g.read({signal:t});if(D.type!==lr.Type.SDP_ANSWER)throw new Or("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",D.data);let F=new L0({type:"answer",sdp:D.data});return await m.setRemoteDescription(F).catch($=>{throw a.error("could not execute setRemoteDescription - %e",$),new Or("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new H("webrtc:read-ice-candidates")),await B0(m,g,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected"),I.readyState!=="open"&&(a.trace("wait for init channel to open"),await xe(I,"open",{signal:t})),a.trace("closing init channel"),I.close(),a.trace("waiting for init channel to close"),await xe(I,"close",{signal:t}),l?.(new H("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await p.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:m,muxerFactory:w}}catch(I){throw a.error("outgoing signaling error - %e",I),m.close(),p.abort(I),I}finally{m.onicecandidate=null,m.onicecandidateerror=null}}var Ov=ke(fa.matchers[0],Ce(290)),U0=class r extends ie{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=>Ov.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=>Ov.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 Bv(r,e,{peerConnection:t,signal:n,log:o}){o.trace("new inbound signaling stream");let s=Fe(r).pb(lr);try{t.onicecandidate=({candidate:u})=>{if(t.connectionState==="connected"){o.trace("ignore new ice candidate as peer connection is already connected");return}if(u==null||u?.candidate===""){o.trace("recipient detected end of ICE candidates");return}let f=JSON.stringify(u?.toJSON()??null);o.trace("recipient sending ICE candidate %s",f),s.write({type:lr.Type.ICE_CANDIDATE,data:f},{signal:n}).catch(h=>{o.error("error sending ICE candidate - %e",h)})},o.trace("recipient read SDP offer");let c=await s.read({signal:n});if(c.type!==lr.Type.SDP_OFFER)throw new Or(`expected message type SDP_OFFER, received: ${c.type??"undefined"} `);o.trace("recipient received SDP offer %s",c.data);let l=new L0({type:"offer",sdp:c.data});await t.setRemoteDescription(l).catch(u=>{throw o.error("could not execute setRemoteDescription - %e",u),new Or("Failed to set remoteDescription")});let d=await t.createAnswer().catch(u=>{throw o.error("could not execute createAnswer - %e",u),new Or("Failed to create answer")});o.trace("recipient send SDP answer %s",d.sdp),await s.write({type:lr.Type.SDP_ANSWER,data:d.sdp},{signal:n}),await t.setLocalDescription(d).catch(u=>{throw o.error("could not execute setLocalDescription - %e",u),new Or("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await B0(t,s,{direction:"recipient",signal:n,log:o})}catch(c){if(t.connectionState!=="connected")throw o.error("error while handling signaling stream from peer %a - %e",e.remoteAddr,c),t.close(),c;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",e.remoteAddr,c)}let i=M0(e.remoteAddr),a=q(`/webrtc/p2p/${i}`);return o.trace("recipient connected to remote address %s",a),{remoteAddress:a,remotePeer:i}}var F0=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"})})}[Eo]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[me]=["@libp2p/transport"];[ur]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(mu,(e,t)=>{let n=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);this._onProtocol(e,t,n).catch(o=>{this.log.error("failed to handle incoming connect from %p - %e",t.remotePeer,o)}).finally(()=>{n.clear()})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(mu),this._started=!1}createListener(e){return new U0(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(gl.exactMatch)}dialFilter(e){return this.listenFilter(e)}async dial(e,t){this.log.trace("dialing address: %a",e);let{remoteAddress:n,peerConnection:o,muxerFactory:s}=await Dv({rtcConfiguration:await a6(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}),i=yu({peerConnection:o,remoteAddr:n,metrics:this.metrics?.dialerEvents,direction:"outbound",log:this.components.logger.forComponent("libp2p:webrtc:connection")}),a=await t.upgrader.upgradeOutbound(i,{skipProtection:!0,skipEncryption:!0,remotePeer:M0(e),muxerFactory:s,onProgress:t.onProgress,signal:t.signal});return this._closeOnShutdown(o,i),a}async _onProtocol(e,t,n){let o=new P0(await a6(this.init.rtcConfiguration));o.addEventListener("connectionstatechange",()=>{switch(o.connectionState){case"closed":o.close();break;default:break}});let s=new rs({peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:i,remotePeer:a}=await Bv(e,t,{peerConnection:o,signal:n,log:this.log});await e.close({signal:n});let c=yu({peerConnection:o,remoteAddr:i,metrics:this.metrics?.listenerEvents,direction:"inbound",log:this.components.logger.forComponent("libp2p:webrtc:connection")});await this.components.upgrader.upgradeInbound(c,{skipEncryption:!0,skipProtection:!0,remotePeer:a,muxerFactory:s,signal:n}),this._closeOnShutdown(o,c)}catch(i){throw this.log.error("incoming signaling error - %e",i),o.close(),e.abort(i),i}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection - %e",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function Nv(r){let e=r.getComponents().filter(({name:n})=>n==="p2p").map(({value:n})=>n).pop();if(e==null)throw new A("Destination peer id was missing");return{circuitAddress:q(r.getComponents().filter(({name:n})=>n!=="webrtc")),targetPeer:Me(e)}}var d6=Object.values(fs).map(r=>r.decoder).reduce((r,e)=>r.or(e)),VD=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function Mv(r){return r?.match(VD)?.groups?.fingerprint}function f6(r){let t=r.getComponents().find(n=>n.code===466)?.value;if(t===void 0||t==="")throw new A(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function HD(r){return qe.decode(d6.decode(r))}function qD(r){let e=HD(f6(r)),t=WD(e.code),n=e.digest.reduce((s,i)=>s+i.toString(16).padStart(2,"0"),""),o=n.match(/.{1,2}/g);if(o==null)throw new D0(n,r.toString());return`${t} ${o.join(":").toUpperCase()}`}function Uv(r){let e=r.split(":").map(o=>parseInt(o,16)),t=Uint8Array.from(e),n=Wt(Ge.code,t);return q(`/certhash/${Ja.encode(n.bytes)}`)}function WD(r){switch(r){case 17:return"sha-1";case 18:return"sha-256";case 19:return"sha-512";default:throw new O0(r)}}function Fv(r,e){let{host:t,port:n,type:o}=oe(r);if(o!=="ip4"&&o!=="ip6")throw new A(`Multiaddr ${r} was not an IPv4 or IPv6 address`);let s=qD(r);return{type:"answer",sdp:`v=0
63
+ `)),n.close())}})}function ay(r,e){return e.set("Content-Length",`${r.length}`),e.set("Content-Type",'text/plain; charset="UTF-8"'),new ReadableStream({start(t){t.enqueue(C(r)),t.close()}})}function eI(r,e){if(r!=null){if(typeof r=="string")return ay(r,e);if(r instanceof Blob)return X_(r,e);if(l$(r))return Q_(r,e);if(r instanceof URLSearchParams)return ay(r.toString(),e);if(r instanceof ReadableStream)return J_(r,e);if(r instanceof FormData)return Z_(r,e);throw new Error("Unsupported body type")}}function l$(r){return r==null?!1:r.byteLength!=null}async function tI(r,e,t){let n=new Headers(t.headers),o=n.get("host")??e.hostname;n.set("host",o),n.get("user-agent")==null&&n.set("user-agent","libp2p/fetch");let i=eI(t.body,n),s=[`${t?.method?.toUpperCase()??"GET"} ${e.pathname??"/"} HTTP/1.1`,...Jm(n),"",""];r.send(C(s.join(`\r
64
+ `)))||await r.onDrain({signal:t.signal??void 0}),i!=null&&(t.log("request sending body"),await u$(r,i,t))}async function u$(r,e,t){let n=e.getReader();for(;;){let{done:o,value:i}=await n.read();if(i!=null&&(t.log("request send %d bytes",i.byteLength),r.send(i)||await r.onDrain({signal:t.signal??void 0})),o){t.log("request finished sending body");break}}}async function rI(r,e,t={}){let n=r.log.newScope("http-fetch");e=typeof e=="string"?new URL(e):e;let[o]=await Promise.all([Y_(r,e,{...t,log:n}),tI(r,e,{...t,log:n})]);return await r.close({signal:t.signal??void 0}),o}var o2=class extends Event{message;error;filename="";lineno=0;colno=0;constructor(e){super("error"),this.error=e,this.message=e.message}},Yd=class extends Event{code;reason;wasClean;constructor(e,t){super(e),this.code=t?.code??0,this.reason=t?.reason??"",this.wasClean=t?.wasClean??!0}};var d$={CONTINUATION:0,TEXT:1,BINARY:2,CONNECTION_CLOSE:8,PING:9,PONG:10},cy={0:"CONTINUATION",1:"TEXT",2:"BINARY",8:"CONNECTION_CLOSE",9:"PING",10:"PONG"};var Xd={NORMAL_CLOSURE:1e3,GOING_AWAY:1001,PROTOCOL_ERROR:1002,UNSUPPORTED_DATA:1003,RESERVED:1004,NO_STATUS_RECEIVED:1005,ABNORMAL_CLOSURE:1006,INVALID_FRAME_PAYLOAD_DATA:1007,POLICY_VIOLATION:1008,MESSAGE_TOO_BIG:1009,MANDATORY_EXT:1010,INTERNAL_SERVER_ERROR:1011,TLS_HANDSHAKE:1015};function nI(r){let e=0;if(r.byteLength<e+1)return;let n=r.get(e)&15;if(e++,cy[n]==null)throw new Error(`Unknown opcode: ${n}`);if(r.byteLength<e+1)return;let o=r.get(e),i=(o&128)===128,s=o&127;if(e++,s===126){if(r.byteLength<e+2)return;s=r.getUint16(e),e+=2}else if(s===127){if(r.byteLength<e+8)return;s=r.getUint32(e),e+=8}if(s===0)return r.consume(e),{type:cy[n]};let a;if(i){if(r.byteLength<e+4)return;a=r.subarray(e,e+4),e+=4}if(r.byteLength<e+s)return;let c=r.subarray(e,e+s);return e+=s,a!=null&&(c=oI(c,a)),r.consume(e),{type:cy[n],data:c}}function oI(r,e){let t=0;for(let n=0;n<r.byteLength;n++)r[n]=r[n]^e[t],t++,t===e.byteLength&&(t=0);return r}function iI(r,e,t){let o=new ne(Uint8Array.from([128|d$[r]])),i=e?.byteLength??0;if(i<126)o.append(Uint8Array.from([i|(t===!0?128:0)]));else if(i<65535){let s=new ne(new Uint8Array(3));s.set(0,126|(t===!0?128:0)),s.setUint16(1,i),o.append(s)}else if(i<18446744073709552e3){let s=new ne(new Uint8Array(9));s.set(0,127|(t===!0?128:0)),s.setUint32(1,i),o.append(s)}else throw new Error("Payload too large");if(t===!0&&e!=null){let s=Uint8Array.from([0,0,0,0]);o.append(s),e=oI(e,s)}return e!=null&&o.append(e),o}function sI(r){if(r instanceof Uint8Array||r instanceof ArrayBuffer||r instanceof DataView)return jd(r);if(typeof r=="string")return C(r);if(r instanceof Blob)return r.arrayBuffer().then(e=>jd(e));throw new _("Unsupported data type")}async function aI(r,e){return new Promise((t,n)=>{let o=!1,i=new re("RESPONSE");i[re.kOnHeadersComplete]=s=>{o=!0;let a=[];for(let c=0;c<s.headers.length;c+=2)a.push([s.headers[c],s.headers[c+1]]);t(new go(null,{status:s.statusCode,statusText:s.statusMessage,headers:new Headers(a)}))},Promise.resolve().then(async()=>{for(;;){let{data:s}=await hr(r,"message",e.signal),a=s.subarray(),c=i.execute(a,0,a.byteLength);if(c instanceof Error)throw c;if(c<a.byteLength&&r.push(a.subarray(c)),o)break}}).catch(s=>{n(s)})})}async function*cI(r,e=[],t){let n=wl.encode(crypto.getRandomValues(new Uint8Array(16))).substring(1);t.set("host",r.hostname),t.set("connection","upgrade"),t.set("upgrade","websocket"),t.set("pragma","no-cache"),t.set("cache-control","no-cache"),t.set("sec-websocket-version","13"),t.set("sec-websocket-key",n),e.length>0&&t.set("sec-websocket-protocol",e.join(", ")),yield C([`GET ${r.pathname??"/"} HTTP/1.1`,...[...t.entries()].map(([o,i])=>`${o}: ${i}`),"",""].join(`\r
65
+ `))}var f$=["BINARY","TEXT","CONTINUATION"],h$=10485760;var p$="/http/1.1",i2=class extends ue{binaryType="arraybuffer";bufferedAmount=0;extensions="";protocol="";readyState;url;CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;_onclose;_onerror;_onmessage;_onopen;sentClose;isClient;buffer;maxMessageSize;_url;closeController;constructor(e,t={}){super(),this.readyState=this.CONNECTING,this.url=e.pathname,this.sentClose=!1,this.isClient=t.isClient??!0,this.buffer=new ne,this.closeController=new AbortController,this.maxMessageSize=t.maxMessageSize??h$}send(e){if(this.readyState!==this.OPEN)throw new Error("WebSocket was not open");let t=sI(e);mh(t)?t.then(n=>{this._send("BINARY",n)}).catch(n=>{this._errored(n)}):this._send("BINARY",t)}_send(e,t){if(this.readyState!==this.OPEN)return;let n=iI(e,t,this.isClient),o=n.byteLength;this.bufferedAmount+=o,this._write(n,i=>{this.bufferedAmount-=o,i!=null&&this._errored(i)})}close(e,t){if(this.readyState!==this.OPEN)throw new Error("WebSocket was not open");this.readyState=this.CLOSING,this.sentClose=!0,this._send("CONNECTION_CLOSE")}_errored(e){this.readyState=this.CLOSED,this.dispatchEvent(new o2(e))}set onclose(e){this._onclose=e,this.addEventListener("close",e)}get onclose(){return this._onclose??null}set onerror(e){this._onerror=e,this.addEventListener("error",e)}get onerror(){return this._onerror??null}set onmessage(e){this._onmessage=e,this.addEventListener("message",e)}get onmessage(){return this._onmessage??null}set onopen(e){this._onopen=e,this.addEventListener("open",e)}get onopen(){return this._onopen??null}_push(e){if(this.buffer.append(e),this.buffer.byteLength>this.maxMessageSize){this.close(Xd.MESSAGE_TOO_BIG,"Max message size exceeded");return}for(;;){let t=nI(this.buffer);if(t==null)break;if(f$.includes(t.type)&&t.data!=null){let n;this.binaryType==="blob"?n=new Blob([t.data]):t.data.byteOffset===0&&t.data.byteLength===t.data.buffer.byteLength?n=t.data.buffer:(n=new ArrayBuffer(t.data.byteLength),new Uint8Array(n,0,n.byteLength).set(t.data)),this.dispatchEvent(new MessageEvent("message",{data:n,origin:this._url?.hostname}))}t.type==="PING"&&this._send("PONG",t.data),t.type==="CONNECTION_CLOSE"&&(this.sentClose||this.close(),this.closeController.abort(),this._close(void 0,()=>{this.readyState=this.CLOSED,this.dispatchEvent(new Yd("close"))}))}}_remoteClosed(e){this.readyState=this.CLOSING,this._close(e,()=>{this.readyState=this.CLOSED,this.dispatchEvent(new Yd("close"))})}};var Qd=class extends i2{writer;writable;constructor(e,t,n={}){if(super(new URL(e.url),{...n,isClient:!1}),e.body==null)throw new _("Request body cannot be null");this.readyState=this.OPEN,this.writable=t,this.writer=t.getWriter();let o=e.body.getReader();Promise.resolve().then(async()=>{for(this.dispatchEvent(new Event("open"));;){let{value:i,done:s}=await o.read();if(i!=null&&this._push(i),s){this._remoteClosed();break}}}).catch(i=>{this._errored(i)})}_write(e,t){this.writer?.write(e).then(()=>{t()},n=>{t(n)})}_close(e,t){e!=null?this.writable.abort(e).then(()=>{t()},()=>{t()}):this.writable.close().then(()=>{t()},()=>{t()})}},Zd=class extends i2{stream;handshakeTimeout;drainTimeout;constructor(e,t,n,o){super(t,{...o,isClient:!0}),this.handshakeTimeout=o.handshakeTimeout??1e4,this.drainTimeout=o.drainTimeout??1e4,Promise.resolve().then(async()=>{let i=AbortSignal.timeout(this.handshakeTimeout);this.stream=await n.openStream(e,p$,{...o,signal:i});for await(let a of cI(t,o.protocols,mo(o)))this.stream.send(a)||await this.stream.onDrain({signal:i});let s=await aI(this.stream,{signal:i});if(s.status!==101)throw new Error("Invalid WebSocket handshake - response status "+s.status);await o.onHandshakeResponse?.(s,{signal:i}),this.protocol=s.headers.get("Sec-WebSocket-Protocol")??"",this.readyState=this.OPEN,this.dispatchEvent(new Event("open"));for await(let a of this.stream)this._push(a)}).catch(i=>{this._errored(i)})}_write(e,t){if(this.stream==null){t(new Error("WebSocket was not open"));return}this.stream.send(e)?t():this.stream.onDrain({signal:AbortSignal.timeout(this.drainTimeout)}).then(()=>{t()},n=>{t(n)})}_close(e,t){if(this.stream==null){t();return}if(e!=null){this.stream.abort(e),t();return}this.stream.close().catch(n=>{this.stream?.abort(n)}).finally(()=>{t()})}};var Jd="/http/1.1";var s2=Symbol.for("@libp2p/http/websocket-handler");var mI=wo(hI(),1),c2=class{log;cookies;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:http:cookies"),this.cookies=new Map}async prepareRequest(e,t){if((t.credentials??"same-origin")==="omit")return;let o=t.headers.get("origin");if(o==null||o==="null")return;let i=Gd(e,t.headers),s=(this.cookies.get(i.hostname)??[]).filter(a=>!(a.expires!=null&&a.expires<Date.now()||a.path!=null&&!i.pathname.startsWith(a.path))).map(a=>`${a.name}=${a.value}`).join("; ");s.length>0&&t.headers.set("cookie",s)}async processResponse(e,t,n){if((t.credentials??"same-origin")==="omit"){pI(n);return}let i=t.headers.get("origin");if(i==null||i==="null")return;let s=Gd(e,t.headers);for(let a of n.headers.getSetCookie()){let c=[...this.cookies.get(s.hostname)??[],...S$(mI.default.parse(a))];this.cookies.set(s.hostname,c)}pI(n)}};function pI(r){return r.headers.has("set-cookie")&&r.headers.delete("set-cookie"),r}function S$(r){let e={},t=[];return Object.entries(r).forEach(([n,o])=>{n.toLowerCase()==="domain"&&o!=null&&(e.domain=o),n.toLowerCase()==="max-age"&&o!=null&&(e.expires=Date.now()+parseInt(o,10)*1e3),!A$.includes(n.toLowerCase())&&o!=null&&t.push({name:n,value:o})}),t.map(n=>({...n,...e}))}var A$=["domain","expires","httponly","max-age","partitioned","path","samesite","secure"];var l2=class{async prepareRequest(e,t){if(t.headers.get("origin")!=null||t.mode==="no-cors")return;let n=Gd(e,t.headers);t.headers.set("origin",`${n.protocol}//${n.host}`)}};function T$(r){return typeof r.init=="function"}function u2(r,e){if(T$(r)){let t=r;return t.handler=r.init(e),delete t.init,t}return r}function gI(r){let e=r2(r.method,["GET"]);if(r.fallback==null&&e.filter(n=>n!=="GET").length>0)throw new _("WebSocket handlers only support the GET HTTP method");let t={...r,init:n=>{let o=u2(r,n);return t[s2]=o.handler,async i=>{if(!Zm(i.method,i.headers))return r?.fallback!=null?r.fallback(i):new go(null,{status:400});let s=new TransformStream;try{let a=new go(s.readable,{status:101,headers:await sy(i.headers)}),c=new Qd(i,s.writable,r);return o.handler(c),a}catch{return new go(null,{status:500})}}}};return t}var d2="/.well-known/libp2p/protocols";function yI(r){return gI({path:d2,method:["GET"],cors:!0,handler:e=>{let t=JSON.stringify(r.getProtocolMap());e.send(t),e.close()},fallback:async e=>{let t=JSON.stringify(r.getProtocolMap());return new Response(t,{headers:{"Content-Type":"application/json","Content-Length":`${t.length}`}})}})}var f2=class{log;components;protocols;endpoint;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:http:registrar"),this.protocols=[],this.onStream=this.onStream.bind(this),this.endpoint=t.server,this.handle("",yI(this))}async start(){await this.components.registrar.handle(Jd,this.onStream.bind(this))}async stop(){await this.components.registrar.unhandle(Jd)}async onStream(e,t){let n=await j_(e);if(this.canHandle(n)){this.log("handling incoming request %s %s",n.method,n.url);let o=await this.onRequest(z_(n,e));await W_(o,e),await e.close();return}if(this.endpoint==null){this.log("cannot handle incoming request %s %s and no endpoint configured",n.method,n.url),e.send(G_),await e.close();return}this.log("passing incoming request %s %s to endpoint",n.method,n.url),this.endpoint.inject(n,e,t).catch(o=>{this.log.error("error injecting request to endpoint - %e",o),e.abort(o)})}canHandle(e){let t=iy(e).pathname;return this.protocols.find(n=>n.route.path===t)!=null?(this.log.trace("can handle %s",t),!0):(this.log.trace("cannot handle %s",t),!1)}async onRequest(e){this.log("incoming request %s %s",e.method,e.url);let t=this.findHandler(e.url);if(t==null)return new Response(null,{status:404});let n;return t.route.method.includes(e.method)?n=await t.route.handler(e):e.method==="OPTIONS"?n=new Response(null,{status:204}):n=new Response(null,{status:405}),_$(n,e,t),this.log("%s %s %d %s",e.method,e.url,n.status,n.statusText),n}onWebSocket(e){let t=this.findHandler(e.url);if(t!=null){let n=t.route[s2];if(n!=null){n(e);return}}e.close(Xd.NORMAL_CLOSURE)}findHandler(e){let t=e.startsWith("/")?e:new URL(e).pathname;this.log("search for handler on path %s",t);let n=this.protocols.find(o=>o.route.path===t);return n!=null&&this.log("found handler for HTTP protocol %s on path %s",n.protocol,e),n}handle(e,t){if(t.path=t.path??e,this.protocols.find(n=>n.protocol===e)!=null)throw new _(`HTTP protocol handler for ${e} already registered`);(t.path===""||!t.path.startsWith("/"))&&(t.path=`/${t.path}`),t.cors=t.cors??!0,t.method=r2(t.method),t=u2(t,this.components),this.protocols.push({protocol:e,route:t}),this.protocols.sort(({route:{path:n}},{route:{path:o}})=>o.length-n.length)}unhandle(e){this.protocols=this.protocols.filter(t=>t.protocol===e)}getProtocolMap(){let e={};for(let t of this.protocols)t.protocol!==""&&(e[t.protocol]={path:t.route.path});return e}};function _$(r,e,t){let n=[...new Set(["OPTIONS",...t.route.method])].join(", ");t.route.cors&&(e.headers.get("Access-Control-Request-Method")!=null&&r.headers.set("access-control-allow-methods",n),e.headers.get("Access-Control-Request-Headers")!=null&&r.headers.set("access-control-allow-headers",e.headers.get("Access-Control-Request-Headers")??""),e.headers.get("Origin")!=null&&(r.headers.set("access-control-allow-origin",e.headers.get("Origin")??""),r.headers.set("vary","Origin"))),e.method==="OPTIONS"&&r.headers.set("allow",n)}async function wI(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function bI(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function xI(r,e,t){for(let n of e.middleware)await n.processResponse?.(r,e,t);return t}var h2=class{log;components;httpRegistrar;origin;cookies;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:http"),this.httpRegistrar=new f2(e,t),this.origin=new l2,this.cookies=new c2(e,t)}[Symbol.toStringTag]="@libp2p/http";[Te]=["@libp2p/http"];async start(){await Et(this.httpRegistrar)}async stop(){await Tt(this.httpRegistrar)}agent(...e){throw new fl("This method is not supported in browsers")}dispatcher(...e){throw new fl("This method is not supported in browsers")}async connect(e,t={}){let n=sl(e),o=mo(t),i={...t,headers:o,method:"GET",middleware:t.middleware?.map(s=>s(this.components))??[]};return o.set("connection","upgrade"),o.set("upgrade","websocket"),bI(n,i,async()=>{if(n instanceof URL){let c=new globalThis.WebSocket(n,t.protocols);return c.binaryType="arraybuffer",c}let{addresses:s,httpPath:a}=t2(n);return new Zd(s,new URL(`http://${e2(n,i.headers)}${decodeURIComponent(a)}`),this.components.connectionManager,i)})}async fetch(e,t={}){let n=sl(e),o={...t,headers:mo(t),method:"GET",middleware:[this.origin,this.cookies,...t.middleware?.map(s=>s(this.components))??[]]},i=await wI(n,o,async()=>this.sendRequest(n,t));return xI(n,o,i)}async connectProtocol(e,t,n){let o=await this.getProtocolPath(e,t,n),i=sl(e,o);return this.connect(i,n)}async fetchProtocol(e,t,n={}){let o=await this.getProtocolPath(e,t,n),i=sl(e,o);return this.fetch(i,n)}async getSupportedProtocols(e,t={}){let n=sl(e,d2),o=await this.fetch(n,{method:"GET",headers:{Accept:"application/json"},signal:t.signal});if(o.status!==200)throw new Error(`Unexpected status code: ${o.status}`);return o.json()}async getProtocolPath(e,t,n={}){let o=await this.getSupportedProtocols(e,n);if(o[t]==null)throw new Error(`Peer does not serve protocol: ${t}`);return o[t].path}canHandle(e){return this.httpRegistrar.canHandle(e)}async onRequest(e){return this.httpRegistrar.onRequest(e)}onWebSocket(e){this.httpRegistrar.onWebSocket(e)}handle(e,t){this.httpRegistrar.handle(e,t)}unhandle(e){this.httpRegistrar.unhandle(e)}getProtocolMap(){return this.httpRegistrar.getProtocolMap()}async sendRequest(e,t){if(e instanceof URL)return this.log("making request to %s with global fetch"),globalThis.fetch(e,t);this.log("making request to %s with libp2p fetch",e);let n=e2(e,mo(t)),{addresses:o,httpPath:i}=t2(e),a=await(await this.components.connectionManager.openConnection(o,{signal:t.signal??void 0})).newStream(Jd,{signal:t.signal??void 0});return rI(a,new URL(`http://${n}${decodeURIComponent(i)}`),t)}};function EI(r={}){return e=>new h2(e,r)}var vI="0.1.0";var SI="id/push",AI="1.0.0",TI="1.0.0";var Yi;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{if(a.lengthDelimited!==!1&&s.fork(),i.protocolVersion!=null&&(s.uint32(42),s.string(i.protocolVersion)),i.agentVersion!=null&&(s.uint32(50),s.string(i.agentVersion)),i.publicKey!=null&&(s.uint32(10),s.bytes(i.publicKey)),i.listenAddrs!=null&&i.listenAddrs.length>0)for(let c of i.listenAddrs)s.uint32(18),s.bytes(c);if(i.observedAddr!=null&&(s.uint32(34),s.bytes(i.observedAddr)),i.protocols!=null&&i.protocols.length>0)for(let c of i.protocols)s.uint32(26),s.string(c);i.signedPeerRecord!=null&&(s.uint32(66),s.bytes(i.signedPeerRecord)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={listenAddrs:[],protocols:[]},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 5:{c.protocolVersion=i.string();break}case 6:{c.agentVersion=i.string();break}case 1:{c.publicKey=i.bytes();break}case 2:{if(a.limits?.listenAddrs!=null&&c.listenAddrs.length===a.limits.listenAddrs)throw new Ee('Decode error - repeated field "listenAddrs" had too many elements');c.listenAddrs.push(i.bytes());break}case 4:{c.observedAddr=i.bytes();break}case 3:{if(a.limits?.protocols!=null&&c.protocols.length===a.limits.protocols)throw new Ee('Decode error - repeated field "protocols" had too many elements');c.protocols.push(i.string());break}case 8:{c.signedPeerRecord=i.bytes();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l={listenAddrs:0,protocols:0},u=s==null?i.len:i.pos+s;for(;i.pos<u;){let d=i.uint32();switch(d>>>3){case 5:{yield{field:`${a}.protocolVersion`,value:i.string()};break}case 6:{yield{field:`${a}.agentVersion`,value:i.string()};break}case 1:{yield{field:`${a}.publicKey`,value:i.bytes()};break}case 2:{if(c.limits?.listenAddrs!=null&&l.listenAddrs===c.limits.listenAddrs)throw new Ee('Streaming decode error - repeated field "listenAddrs" had too many elements');yield{field:`${a}.listenAddrs[]`,index:l.listenAddrs,value:i.bytes()},l.listenAddrs++;break}case 4:{yield{field:`${a}.observedAddr`,value:i.bytes()};break}case 3:{if(c.limits?.protocols!=null&&l.protocols===c.limits.protocols)throw new Ee('Streaming decode error - repeated field "protocols" had too many elements');yield{field:`${a}.protocols[]`,index:l.protocols,value:i.string()},l.protocols++;break}case 8:{yield{field:`${a}.signedPeerRecord`,value:i.bytes()};break}default:{i.skipType(d&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Yi||(Yi={}));var Ar={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function _I(r){if(r!=null&&r.length>0)try{return X(r)}catch{}}async function p2(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new ve("message was null or undefined");let i={};if(o.listenAddrs.length>0&&(i.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:X(c)}))),o.protocols.length>0&&(i.protocols=o.protocols),o.publicKey!=null){let c=pt(o.publicKey);if(!so(c).equals(n.remotePeer))throw new ve("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 Yr.openAndCertify(c,pr.DOMAIN),u=pr.createFromProtobuf(l.payload),d=Wr(l.publicKey.toCID());if(!u.peerId.equals(d))throw new ve("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(u.peerId))throw new ve("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=Yr.createFromProtobuf(f.peerRecordEnvelope),p=pr.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=C(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=C(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=>X(c)),observedAddr:o.observedAddr==null?void 0:X(o.observedAddr),protocols:o.protocols,signedPeerRecord:s,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var al=class{host;components;protocol;started;timeout;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.components=e,this.log=t.log,this.timeout=t.timeout??Ar.timeout,this.maxInboundStreams=t.maxInboundStreams??Ar.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Ar.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??Ar.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??Ar.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??Ar.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??Ar.protocolPrefix}/${vI}`,agentVersion:e.nodeInfo.userAgent},this.handleProtocol=this.handleProtocol.bind(this)}isStarted(){return this.started}async start(){this.started||(await this.components.peerStore.merge(this.components.peerId,{metadata:{AgentVersion:C(this.host.agentVersion),ProtocolVersion:C(this.host.protocolVersion)}}),await this.components.registrar.handle(this.protocol,this.handleProtocol,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}};var m2=class extends al{connectionManager;concurrency;_push;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??Ar.protocolPrefix}/${SI}/${TI}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??Ar.concurrency,this._push=Po(this.sendPushMessage.bind(this),t.debounce??1e3),(t.runOnSelfUpdate??Ar.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error("error pushing updates to peers - %e",o)})})}[Te]=["@libp2p/identify-push"];async push(){this._push()}async sendPushMessage(){if(this.isStarted())try{let e=this.components.addressManager.getAddresses().map(u=>u.decapsulateCode(421)),t=new pr({peerId:this.components.peerId,multiaddrs:e}),n=await Yr.seal(t,this.components.privateKey),o=this.components.registrar.getProtocols(),i=await this.components.peerStore.get(this.components.peerId),s=N(i.metadata.get("AgentVersion")??C(this.host.agentVersion)),a=N(i.metadata.get("ProtocolVersion")??C(this.host.protocolVersion)),c=this;async function*l(){for(let u of c.connectionManager.getConnections())(await c.components.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 Qe(f,{maxDataLength:c.maxMessageSize}).pb(Yi).write({listenAddrs:e.map(y=>y.bytes),signedPeerRecord:n.marshal(),protocols:o,agentVersion:s,protocolVersion:a},{signal:h}),await f.close({signal:h})}catch(p){f?.log.newScope("identify-push")?.error("could not push identify update to peer",p),f?.abort(p)}})}await yr(Xo(l(),{concurrency:this.concurrency}))}catch(e){this.log.error("error pushing updates to peers - %e",e)}}async handleProtocol(e,t){let n=e.log.newScope("identify-push");if(this.components.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},s=await Qe(e,{maxDataLength:this.maxMessageSize}).pb(Yi).read(o);await e.close(o),await p2(this.components.peerStore,this.components.events,n,t,s),n.trace("handled push from %p",t.remotePeer)}};var g2=class extends al{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??Ar.protocolPrefix}/${"id"}/${AI}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??Ar.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(()=>{})})}[Te]=["@libp2p/identify"];async _identify(e,t={}){let n,o;if(t.signal==null){let i=AbortSignal.timeout(this.timeout);t={...t,signal:i}}this.log("run identify on new connection %a",e.remoteAddr);try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection}),o=n.log.newScope("identify");let i=Qe(n,{maxDataLength:this.maxMessageSize}).pb(Yi),s=await i.read(t);return await i.unwrap().unwrap().close(t),s}catch(i){throw o?.error("identify failed - %e",i),n?.abort(i),i}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:i,observedAddr:s}=n;if(o==null)throw new ve("Public key was missing from identify message");let a=pt(o),c=Wr(a.toCID());if(!e.remotePeer.equals(c))throw new ve("Identified peer does not match the expected peer");if(this.components.peerId.equals(c))throw new ve("Identified peer is our own peer id?");return this.maybeAddObservedAddress(s),this.log("completed for peer %p and protocols %o",c,i),p2(this.components.peerStore,this.components.events,this.log,e,n)}maybeAddObservedAddress(e){let t=_I(e);if(t==null||(this.log.trace("our observed address was %a",t),ut(t)))return;let n=t.getComponents();if((n[0].code===41||n[0].code===42&&n[1].code===41)&&!ih(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}ra.exactMatch(t)||(this.log.trace("storing the observed address"),this.components.addressManager.addObservedAddr(t))}async handleProtocol(e,t){let n=e.log.newScope("identify");n("responding to identify");let o=AbortSignal.timeout(this.timeout);let i=await this.components.peerStore.get(this.components.peerId,{signal:o}),s=this.components.addressManager.getAddresses().map(u=>u.decapsulateCode(421)),a=i.peerRecordEnvelope;if(s.length>0&&a==null){let u=new pr({peerId:this.components.peerId,multiaddrs:s});a=(await Yr.seal(u,this.components.privateKey,{signal:o})).marshal().subarray()}let c=t.remoteAddr.bytes;bS.matches(t.remoteAddr)||(c=void 0);let l=Qe(e).pb(Yi);n("send response"),await l.write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:It(this.components.privateKey.publicKey),listenAddrs:s.map(u=>u.bytes),signedPeerRecord:a,observedAddr:c,protocols:i.protocols},{signal:o}),n("close write"),await l.unwrap().unwrap().close({signal:o})}};function II(r={}){return e=>new g2(e,r)}function kI(r={}){return e=>new m2(e,r)}var ya=1e3,dy=60*ya,y2=60*dy,CI="/ipfs/kad/1.0.0",w2=48*y2;var RI=24*y2,PI=10,LI=16384,DI=y2,fy=y2,C5e=10*ya,NI=10*ya;var b2=20,Xi=10,OI=5*dy,BI=ya,MI=5*ya,UI=5*dy,FI=30*ya,$I=180*ya,hy=`${ls}-kad-dht`;var ef;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.key!=null&&i.key.byteLength>0&&(s.uint32(10),s.bytes(i.key)),i.value!=null&&i.value.byteLength>0&&(s.uint32(18),s.bytes(i.value)),i.timeReceived!=null&&i.timeReceived!==""&&(s.uint32(42),s.string(i.timeReceived)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={key:de(0),value:de(0),timeReceived:""},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.key=i.bytes();break}case 2:{c.value=i.bytes();break}case 5:{c.timeReceived=i.string();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.key`,value:i.bytes()};break}case 2:{yield{field:`${a}.value`,value:i.bytes()};break}case 5:{yield{field:`${a}.timeReceived`,value:i.string()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(ef||(ef={}));function VI(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 KI(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 Gt=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 ef.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:VI(this.timeReceived)}}static deserialize(e){let t=ef.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=KI(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 Qi=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},x2=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},E2=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var HI;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.key!=null&&(s.uint32(10),s.bytes(i.key)),i.value!=null&&(s.uint32(18),s.bytes(i.value)),i.author!=null&&(s.uint32(26),s.bytes(i.author)),i.signature!=null&&(s.uint32(34),s.bytes(i.signature)),i.timeReceived!=null&&(s.uint32(42),s.string(i.timeReceived)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.key=i.bytes();break}case 2:{c.value=i.bytes();break}case 3:{c.author=i.bytes();break}case 4:{c.signature=i.bytes();break}case 5:{c.timeReceived=i.string();break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{yield{field:`${a}.key`,value:i.bytes()};break}case 2:{yield{field:`${a}.value`,value:i.bytes()};break}case 3:{yield{field:`${a}.author`,value:i.bytes()};break}case 4:{yield{field:`${a}.signature`,value:i.bytes()};break}case 5:{yield{field:`${a}.timeReceived`,value:i.string()};break}default:{i.skipType(u&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(HI||(HI={}));var Ue;(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"})(Ue||(Ue={}));var v2;(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"})(v2||(v2={}));(function(r){r.codec=()=>lt(v2)})(Ue||(Ue={}));var wa;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(wa||(wa={}));var py;(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"})(py||(py={}));(function(r){r.codec=()=>lt(py)})(wa||(wa={}));var Zi;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{if(a.lengthDelimited!==!1&&s.fork(),i.id!=null&&i.id.byteLength>0&&(s.uint32(10),s.bytes(i.id)),i.multiaddrs!=null&&i.multiaddrs.length>0)for(let c of i.multiaddrs)s.uint32(18),s.bytes(c);i.connection!=null&&(s.uint32(24),wa.codec().encode(i.connection,s)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={id:de(0),multiaddrs:[]},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.id=i.bytes();break}case 2:{if(a.limits?.multiaddrs!=null&&c.multiaddrs.length===a.limits.multiaddrs)throw new Ee('Decode error - repeated field "multiaddrs" had too many elements');c.multiaddrs.push(i.bytes());break}case 3:{c.connection=wa.codec().decode(i);break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l={multiaddrs:0},u=s==null?i.len:i.pos+s;for(;i.pos<u;){let d=i.uint32();switch(d>>>3){case 1:{yield{field:`${a}.id`,value:i.bytes()};break}case 2:{if(c.limits?.multiaddrs!=null&&l.multiaddrs===c.limits.multiaddrs)throw new Ee('Streaming decode error - repeated field "multiaddrs" had too many elements');yield{field:`${a}.multiaddrs[]`,index:l.multiaddrs,value:i.bytes()},l.multiaddrs++;break}case 3:{yield{field:`${a}.connection`,value:wa.codec().decode(i)};break}default:{i.skipType(d&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Zi||(Zi={}));var Ji;(function(r){let e;r.codec=()=>(e==null&&(e=me((i,s,a={})=>{if(a.lengthDelimited!==!1&&s.fork(),i.type!=null&&v2[i.type]!==0&&(s.uint32(8),Ue.codec().encode(i.type,s)),i.clusterLevel!=null&&(s.uint32(80),s.int32(i.clusterLevel)),i.key!=null&&(s.uint32(18),s.bytes(i.key)),i.record!=null&&(s.uint32(26),s.bytes(i.record)),i.closer!=null&&i.closer.length>0)for(let c of i.closer)s.uint32(66),Zi.codec().encode(c,s);if(i.providers!=null&&i.providers.length>0)for(let c of i.providers)s.uint32(74),Zi.codec().encode(c,s);a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={type:Ue.PUT_VALUE,closer:[],providers:[]},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.type=Ue.codec().decode(i);break}case 10:{c.clusterLevel=i.int32();break}case 2:{c.key=i.bytes();break}case 3:{c.record=i.bytes();break}case 8:{if(a.limits?.closer!=null&&c.closer.length===a.limits.closer)throw new Ee('Decode error - repeated field "closer" had too many elements');c.closer.push(Zi.codec().decode(i,i.uint32(),{limits:a.limits?.closer$}));break}case 9:{if(a.limits?.providers!=null&&c.providers.length===a.limits.providers)throw new Ee('Decode error - repeated field "providers" had too many elements');c.providers.push(Zi.codec().decode(i,i.uint32(),{limits:a.limits?.providers$}));break}default:{i.skipType(u&7);break}}}return c},function*(i,s,a,c={}){let l={closer:0,providers:0},u=s==null?i.len:i.pos+s;for(;i.pos<u;){let d=i.uint32();switch(d>>>3){case 1:{yield{field:`${a}.type`,value:Ue.codec().decode(i)};break}case 10:{yield{field:`${a}.clusterLevel`,value:i.int32()};break}case 2:{yield{field:`${a}.key`,value:i.bytes()};break}case 3:{yield{field:`${a}.record`,value:i.bytes()};break}case 8:{if(c.limits?.closer!=null&&l.closer===c.limits.closer)throw new Ee('Streaming decode error - repeated field "closer" had too many elements');for(let f of Zi.codec().stream(i,i.uint32(),`${a}.closer[]`,{limits:c.limits?.closer$}))yield{...f,index:l.closer};l.closer++;break}case 9:{if(c.limits?.providers!=null&&l.providers===c.limits.providers)throw new Ee('Streaming decode error - repeated field "providers" had too many elements');for(let f of Zi.codec().stream(i,i.uint32(),`${a}.providers[]`,{limits:c.limits?.providers$}))yield{...f,index:l.providers};l.providers++;break}default:{i.skipType(d&7);break}}}})),e);function t(i){return he(i,r.codec())}r.encode=t;function n(i,s){return fe(i,r.codec(),s)}r.decode=n;function o(i,s){return pe(i,r.codec(),s)}r.stream=o})(Ji||(Ji={}));function my(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 tf(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 S2(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function Kn(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function gy(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function rf(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function yy(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function qI(r,e={}){let t={...r,name:"PATH_ENDED",type:8};return e.onProgress?.(new CustomEvent("kad-dht:query:path-ended",{detail:t})),t}function zI(r,e,t){if(t.length===0)throw new _("No records given");let o=N(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 E2(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:i(e,t)}function L$(r,e){return 0}var WI={pk:L$};async function cl(r,e,t){let n=e.key,i=N(n).split("/");if(i.length<3)return;let s=r[i[1].toString()];if(s==null)throw new _(`No validator available for key type "${i[1]}"`);await s(n,e.value,t)}var D$=async(r,e,t)=>{if(!(r instanceof Uint8Array))throw new _('"key" must be a Uint8Array');if(r.byteLength<5)throw new _("Invalid public key record");if(N(r.subarray(0,4))!=="/pk/")throw new _("key was not prefixed with /pk/");let o=pt(e),i=r.slice(4);if(!se(i,o.toMultihash().bytes))throw new _("public key does not match passed in key")},GI={pk:D$};var N$=C("/pk/");function jI(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>!ut(e))}}async function es(r,e){let t=await st.digest(r);return e?.signal?.throwIfAborted(),t.digest}async function Tr(r,e){return es(r.toMultihash().bytes,e)}function ts(r,e){return new Ze(`${r}/${N(e,"base32")}`,!1)}function YI(r){return Ye([N$,r.toMultihash().bytes])}function XI(r){return N(r.subarray(0,4))==="/pk/"}function QI(r){let e=He(r.subarray(4));return dt(e)}function wy(r,e){let t=new Date;return new Gt(r,e,t).serialize()}function A2(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:Z.createV1(vo,He(C(n,"base32"))),peerId:Xe(t)}}function T2(r,e,t){let n=typeof e=="string"?e:N(e.multihash.bytes,"base32"),o=[r,n];return t!=null&&o.push(t.toString()),new Ze(o.join("/"))}function _2(r){return new Date(Rr(r))}function ba(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 I2(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 k2=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,t){this.log("getLocal %b",e);let n=ts(this.datastorePrefix,e);this.log("fetching record for key %k",n);let o=await this.components.datastore.get(n,t);this.log("found %k in local datastore",n);let i=Gt.deserialize(o);return await cl(this.validators,i,t),i}async*sendCorrectionRecord(e,t,n,o){this.log("sendCorrection for %b",e);let i=wy(e,n);for(let{value:s,from:a}of t){if(se(s,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let u=ts(this.datastorePrefix,e);this.log(`Storing corrected record for key ${u.toString()}`),await this.components.datastore.put(u,i.subarray(),o)}catch(u){this.log.error("failed error correcting self - %e",u)}continue}let c=!1,l={type:Ue.PUT_VALUE,key:e,record:i};for await(let u of this.network.sendRequest(a,l,o))u.name==="PEER_RESPONSE"&&u.record!=null&&se(u.record.value,Gt.deserialize(i).value)&&(c=!0),yield u;if(!c)throw new Qi("Could not send correction");this.log.error("failed error correcting entry")}}async*put(e,t,n){this.log("put key %b value %b",e,t);let o=wy(e,t),i=ts(this.datastorePrefix,e);this.log(`storing record for key ${i.toString()}`),await this.components.datastore.put(i,o.subarray(),n),yield*ac(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),s=>dn(s,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:Ue.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,path:a.path}))c.push(u),u.name==="PEER_RESPONSE"&&(u.record!=null&&se(u.record.value,Gt.deserialize(o).value)||c.push(Kn({from:a.peer.id,error:new Qi("Value not put correctly"),path:u.path},n)));return c}),s=>Xo(s,{ordered:!1,concurrency:Xi}),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)){if(a.name==="VALUE"){n.push(a);continue}yield a}if(n.length===0)return;let o=n.map(a=>a.value),i=0;try{i=zI(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 We("Best value was not found");yield*this.sendCorrectionRecord(e,n,s,{...t,path:{index:-1,queued:0,running:0,total:0}}),yield n[i]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let i=await this.getLocal(e,t);yield rf({value:i.value,from:this.components.peerId,path:{index:-1,running:0,queued:0,total:0}},t)}catch(i){this.log("error getting local value for %b",e,i)}let n=this,o=async function*({peer:i,signal:s,path:a}){for await(let c of n.peerRouting.getValueOrPeers(i.id,e,{...t,signal:s,path:a}))yield c,c.name==="PEER_RESPONSE"&&c.record!=null&&(yield rf({from:i.id,value:c.record.value,path:a},t))};yield*this.queryManager.run(e,o,t)}};function ZI(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function nf(r){if(r.id==null)throw new Error("Invalid peer in message");let e=He(r.id);return{id:dt(e),multiaddrs:(r.multiaddrs??[]).map(t=>X(t))}}var C2=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,n);let i={type:Ue.ADD_PROVIDER,key:o,providers:[ZI({id:this.components.peerId,multiaddrs:t})]},s=0,a=this;async function*c(d){try{a.log("sending provider record for %s to %p",e,d.peer.id);for await(let f of a.network.sendMessage(d.peer.id,i,{...n,path:d.path}))f.name==="PEER_RESPONSE"&&(a.log("sent provider record for %s to %p",e,d.peer.id),s++),yield f}catch(f){a.log.error("error sending provide record to peer %p - %e",d.peer.id,f),yield Kn({from:d.peer.id,error:f,path:d.path},n)}}let l=$t({objectMode:!0}),u=new Vt({concurrency:Xi});u.addEventListener("idle",()=>{l.end()}),u.addEventListener("failure",d=>{this.log.error("error publishing provider record to peer - %e",d.detail.error)}),u.add(async()=>{let d=[];for await(let f of this.peerRouting.getClosestPeers(o,n))l.push(f),f.name==="FINAL_PEER"&&d.push(f);d.forEach(f=>{u.add(async()=>{for await(let h of c(f))l.push(h)}).catch(h=>{this.log.error("error publishing provider record to peer - %e",h)})})}).catch(d=>{l.end(d)}),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,t);if(a.length>0){let u=[];for(let d of a.slice(0,n))try{let f=await this.components.peerStore.get(d,t);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 tf({from:this.components.peerId,messageType:Ue.GET_PROVIDERS,providers:u,path:{index:-1,queued:0,running:0,total:0}},t),yield gy({from:this.components.peerId,providers:u,path:{index:-1,queued:0,running:0,total:0}},t),o+=u.length,o>=n)return}let c=async function*({peer:u,signal:d,path:f}){let h={type:Ue.GET_PROVIDERS,key:i};yield*s.network.sendRequest(u.id,h,{...t,signal:d,path:f})},l=new Gr(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 gy({from:u.from,providers:d,path:u.path},t),o+=d.length,o>=n))return}}};var R2=class extends ue{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 Tn({...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");let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),this.log("dialling %p",e),yield yy({peer:e,path:n.path},n),i=await this.components.connectionManager.openStream(e,this.protocol,n),this.log("sending %s to %p",t.type,e),yield my({to:e,type:o,path:n.path},n);let a=await this._writeReadMessage(i,t,n);i.close(n).catch(c=>{this.log.error("error closing stream to %p - %e",e,c),i?.abort(c)}),yield tf({from:e,messageType:a.type,closer:a.closer.map(nf),providers:a.providers.map(nf),record:a.record==null?void 0:Gt.deserialize(a.record),path:n.path},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 Kn({from:e,error:a,path:n.path},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");let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),this.log("dialling %p",e),yield yy({peer:e,path:n.path},n),i=await this.components.connectionManager.openStream(e,this.protocol,n),this.log("sending %s to %p",t.type,e),yield my({to:e,type:o,path:n.path},n),await this._writeMessage(i,t,n),i.close(n).catch(a=>{this.log.error("error closing stream to %p - %e",e,a),i?.abort(a)}),yield tf({from:e,messageType:o,path:n.path},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),yield Kn({from:e,error:a,path:n.path},n)}finally{this.timeout.cleanUp(s)}}async _writeMessage(e,t,n){await Qe(e).write(t,Ji,n)}async _writeReadMessage(e,t,n){let o=Qe(e);await o.write(t,Ji,n);let i=await o.read(Ji,n);return i.closer.forEach(s=>{this.safeDispatchEvent("peer",{detail:nf(s)})}),i.providers.forEach(s=>{this.safeDispatchEvent("peer",{detail:nf(s)})}),i}};function xa(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 rs=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]}async add(e,t={index:-1,queued:0,running:0,total:0},n){let o=await Tr(e.id,n);this.addWithKadId(e,o,t)}addWithKadId(e,t,n={index:-1,queued:0,running:0,total:0}){if(this.peerDistances.find(s=>s.peer.id.equals(e.id))!=null)return;let o={peer:e,distance:Fn(this.originDhtKey,t),path:n};if(this.peerDistances.length===this.capacity){let s=this.peerDistances[this.peerDistances.length-1];if(s!=null&&xa(o.distance,s.distance)!==-1)return}let i=!1;for(let s=0;s<this.peerDistances.length;s++){let a=xa(this.peerDistances[s].distance,o.distance);if(a===0||a===1){i=!0,this.peerDistances.splice(s,0,o);break}}i||this.peerDistances.push(o),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e,t){if(this.length===0)return!0;let n=await Tr(e,t),o=Fn(n,this.originDhtKey),i=this.peerDistances[this.peerDistances.length-1].distance;return xa(o,i)===-1}async anyCloser(e,t){return e.length===0?!1:Promise.any(e.map(async n=>this.isCloser(n,t)))}};var P2=class{log;routingTable;network;validators;queryManager;components;constructor(e,t){this.routingTable=t.routingTable,this.network=t.network,this.validators=t.validators,this.queryManager=t.queryManager,this.components=e,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,t){let n,o=await this.routingTable.find(e,t);if(o!=null){this.log("findPeerLocal found %p in routing table",e);try{n=await this.components.peerStore.get(o,t)}catch(i){if(i.name!=="NotFoundError")throw i}}if(n==null)try{n=await this.components.peerStore.get(e,t)}catch(i){if(i.name!=="NotFoundError")throw i}if(n!=null)return this.log("findPeerLocal found %p in peer store",e),{id:n.id,multiaddrs:n.addresses.map(i=>i.multiaddr)}}async*_getValueSingle(e,t,n){let o={type:Ue.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=YI(e),o={index:-1,queued:0,running:0,total:0};for await(let i of this._getValueSingle(e,n,{...t,path:o}))if(yield i,i.name==="PEER_RESPONSE"&&i.record!=null){let s=pt(i.record.value),a=so(s);if(!a.equals(e))throw new xo("public key does not match id");if(a.publicKey==null)throw new xo("public key missing");yield rf({from:e,value:i.record.value,path:o},t)}throw new Qi(`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,t);if(o!=null){this.log("found local"),yield S2({from:this.components.peerId,peer:o,path:{index:-1,queued:0,running:0,total:0}},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,i=async function*({peer:s,signal:a,path:c}){let l={type:Ue.FIND_NODE,key:e.toMultihash().bytes};for await(let u of o.network.sendRequest(s.id,l,{...t,signal:a,path:c}))if(yield u,u.name==="PEER_RESPONSE"){let d=u.closer.find(f=>f.id.equals(e));d!=null&&(yield S2({from:u.from,peer:d,path:u.path},t))}};for await(let s of this.queryManager.run(e.toMultihash().bytes,i,t))s.name==="FINAL_PEER"&&(n=!0),yield s}if(!n)throw new We("Not found")}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await es(e,t),o=new rs(n,this.routingTable.kBucketSize),i=this,s=async function*({peer:a,path:c,peerKadId:l,signal:u}){i.log("getClosestPeers asking %p",a.id);let d={type:Ue.FIND_NODE,key:e};yield*i.network.sendRequest(a.id,d,{...t,signal:u,path:c}),o.addWithKadId(a,l,c)};yield*this.queryManager.run(e,s,t),this.log("found %d peers close to %b",o.length,e);for(let{peer:a,path:c}of o.peers)try{if(a.multiaddrs.length===0&&(a=await i.components.peerStore.getInfo(a.id,t)),a.multiaddrs.length===0)continue;yield S2({from:this.components.peerId,peer:await i.components.peerStore.getInfo(a.id,t),path:{index:c.index,queued:0,running:0,total:0}},t)}catch{continue}}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,n)}catch{let s="invalid record received, discarded";this.log(s),yield Kn({from:o.from,error:new Qi(s),path:n.path},n);continue}yield o}}async _verifyRecordOnline(e,t){if(e.timeReceived==null)throw new x2("invalid record received");await cl(this.validators,new Gt(e.key,e.value,e.timeReceived),t)}async getClosestPeersOffline(e,t){let n=[];try{let s=He(e),a=dt(s),c=await this.components.peerStore.get(a,t);n.push({id:c.id,multiaddrs:c.addresses.map(({multiaddr:l})=>l)})}catch{}let o=await es(e,t),i=this.routingTable.closestPeers(o,t);for(let s of i)try{n.push(await this.components.peerStore.getInfo(s,t))}catch(a){if(a.name!=="NotFoundError")throw a}return n.length>0?this.log("getClosestPeersOffline returning the %d closest peer(s) we know to %b",n.length,e):this.log("getClosestPeersOffline could not any peers close to %b with %d peers in the routing table",e,this.routingTable.size),n}};var L2=class{log;datastore;datastorePrefix;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:providers`),this.datastorePrefix=`${t.datastorePrefix}/provider`,this.datastore=e.datastore}async addProvider(e,t,n){this.log.trace("%p provides %s",t,e),await this.writeProviderEntry(e,t,n)}async removeProvider(e,t,n){let o=T2(this.datastorePrefix,e,t);this.log.trace("%p no longer provides %s",t,e),await this.datastore.delete(o,n)}async getProviders(e,t){this.log.trace("get providers for %c",e);let n=await this.loadProviders(e,t);return this.log.trace("got %d providers for %c",n.size,e),[...n.keys()]}async writeProviderEntry(e,t,n){let o=T2(this.datastorePrefix,e,t),i=Zt(n?.time?.getTime()??Date.now());await this.datastore.put(o,i,n)}async loadProviders(e,t){let n=new er,o=T2(this.datastorePrefix,e);for await(let i of this.datastore.query({prefix:o.toString()},t)){let{peerId:s}=A2(i.key);n.set(s,_2(i.value))}return n}};async function*JI(r){let{key:e,startingPeers:t,ourPeerId:n,query:o,alpha:i,path:s,numPaths:a,log:c,peersSeen:l,connectionManager:u,signal:d}=r,f=$t({objectMode:!0}),h=new Vt({concurrency:i,sort:(y,g)=>xa(y.options.distance,g.options.distance)});h.addEventListener("idle",()=>{f.push(qI({path:{index:s,queued:h.queued,running:h.running,total:h.size}},r)),f.end()}),h.addEventListener("failure",y=>{c.error("error during query - %e",y.detail.error)});let p=()=>{h.abort(),f.end(new sr)};d.addEventListener("abort",p);try{let g=function(m,b){if(m==null)return;l.add(m.id.toMultihash().bytes);let v=Fn(b,y);h.add(async()=>{try{for await(let L of o({...r,key:e,peer:m,path:{index:s,queued:h.queued,running:h.running,total:h.size},numPaths:a,peerKadId:b,signal:d})){if(L.name==="PEER_RESPONSE")for(let K of L.closer){if(l.has(K.id.toMultihash().bytes)){c("already seen %p in query",K.id);continue}if(n.equals(K.id)){c("not querying ourselves");continue}if(!await u.isDialable(K.multiaddrs)){c("not querying undialable peer");continue}let V=await Tr(K.id,{signal:d}),Y=Fn(V,y);if(xa(Y,v)!==-1){c("skipping %p as they are not closer to %b than %p",K.id,e,m.id);continue}c("querying closer peer %p",K.id),g(K,V)}f.push({...L,path:{index:s,queued:h.queued,running:h.running,total:h.size}})}}catch(L){f.push(Kn({from:m.id,error:L,path:{index:s,queued:h.queued,running:h.running-1,total:h.size-1}},r))}},{distance:v}).catch(L=>{c.error("error during query - %e",L)})},y=await es(e,{signal:d});await Promise.all(t.map(async m=>{g({id:m,multiaddrs:[]},await Tr(m,{signal:d}))})),yield*f}finally{d.removeEventListener("abort",p)}}var D2=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;allowQueryWithZeroPeers;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??b2,this.alpha=t.alpha??Xi,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.allowQueryWithZeroPeers=t.allowQueryWithZeroPeers??!1,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($I);n={...n,signal:c}}let o=new AbortController,i=we([this.shutDownController.signal,o.signal,n.signal]);o.signal;let s=this.logger.forComponent(`${this.logPrefix}:query:`+N(e,"base58btc")),a=!1;try{this.routingTable.size===0&&!this.allowQueryWithZeroPeers&&(s("routing table was empty, waiting for some peers before running%s query",n.isSelfQuery===!0?" self":""),await Le(this.routingTable,"peer:add",{signal:i,filter:h=>!this.peerId.equals(h.detail)}),s("routing table has peers, continuing with%s query",n.isSelfQuery===!0?" self":"")),n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(s("waiting for initial self query before continuing"),await qe(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),s("query:start");let c=await es(e,{signal:i}),l=this.routingTable.closestPeers(c,{count:this.routingTable.kBucketSize}),u=l.sort(()=>Math.random()>.5?1:-1).reduce((h,p,y)=>(h[y%this.disjointPaths].push(p),h),new Array(this.disjointPaths).fill(0).map(()=>[])).filter(h=>h.length>0);if(l.length===0){s.error("running query with no peers");return}let d=Ut(1024),f=u.map((h,p)=>JI({...n,key:e,startingPeers:h,ourPeerId:this.peerId,signal:i,query:t,path:p,numPaths:u.length,alpha:this.alpha,log:s,peersSeen:d,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let h of fr(...f)){if(h.name==="QUERY_ERROR"&&s.error("query error - %e",h.error),h.name==="PEER_RESPONSE")for(let p of[...h.closer,...h.providers])await this.connectionManager.isDialable(p.multiaddrs,{signal:i})&&await this.routingTable.add(p.id,{signal:i});i.throwIfAborted(),yield h}a=!0}catch(c){if(this.running)throw c}finally{a||(s("query exited early"),o.abort()),i.clear(),s("query finished")}}};function B$(r){return r[Symbol.asyncIterator]!=null}function M$(r){if(B$(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 N2=M$;var O2=class{log;peerId;peerRouting;events;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.events=e.events,this.running=!1,this.peerRouting=t.peerRouting,this.count=t.count??b2,this.interval=t.interval??OI,this.initialInterval=t.initialInterval??BI,this.queryTimeout=t.queryTimeout??MI,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=I2(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",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=Se(),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=we(e);this.controller.signal;try{this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await ac(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),s=>Mi(s,this.count),async s=>N2(s));t?.throwIfAborted();let i=Date.now()-n;this.log("self-query found %d peers in %dms",o,i),this.events.dispatchEvent(new CustomEvent("kad-dht:query:self",{detail:{peers:o,duration:i}}))}catch(n){this.log.error("self-query error - %e",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",e)})},this.interval))}};var B2=class extends ue{log;reprovideQueue;maxQueueSize;datastore;timeout;reprovideTimeout;running;shutdownController;reprovideThreshold;contentRouting;datastorePrefix;addressManager;validity;interval;peerId;constructor(e,t){super(),this.log=e.logger.forComponent(`${t.logPrefix}:reprovider`),this.peerId=e.peerId,this.reprovideQueue=new Vt({concurrency:t.concurrency??PI,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new Tn({...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??RI,this.maxQueueSize=t.maxQueueSize??LI,this.validity=t.validity??w2,this.interval=t.interval??DI,this.contentRouting=t.contentRouting,this.running=!1,this.reprovide=I2(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,this.timeout=setTimeout(()=>{this.processRecords({signal:AbortSignal.timeout(fy)}).catch(e=>{this.log.error("error running process to reprovide/cleanup - %e",e)})},this.interval))}stop(){this.running=!1,this.reprovideQueue.clear(),clearTimeout(this.timeout),this.shutdownController?.abort()}async processRecords(e){try{this.safeDispatchEvent("reprovide:start"),this.log("starting reprovide/cleanup");for await(let t of this.datastore.query({prefix:this.datastorePrefix},e))try{let{cid:n,peerId:o}=A2(t.key),s=_2(t.value).getTime()+this.validity,a=Date.now(),c=a>s,l=this.peerId.equals(o);this.log.trace("comparing: %d (now) < %d (expires) = %s %s",a,s,c,c?"(expired)":"(valid)"),c&&!l&&await this.datastore.delete(t.key,e),this.shouldReprovide(l,s)&&(this.log("reproviding %c as it is within the reprovide threshold (%d)",n,this.reprovideThreshold),this.queueReprovide(n).catch(u=>{this.log.error("could not reprovide %c - %e",n,u)}))}catch(n){this.log.error("error processing datastore key %s - %s",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{this.safeDispatchEvent("reprovide:end"),this.running&&(this.log("queuing next re-provide/cleanup run in %d ms",this.interval),this.timeout=setTimeout(()=>{this.processRecords({signal:AbortSignal.timeout(fy)}).catch(t=>{this.log.error("error running re-provide - %e",t)})},this.interval))}}shouldReprovide(e,t){if(!e)return!1;let n=Date.now();return t<n?!0:t-n<this.reprovideThreshold}async queueReprovide(e,t){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,t);let n=this.reprovideQueue.queue.find(o=>o.options.cid.equals(e));if(n!=null)return this.log.trace("not adding %c to re-provide queue - already in queue",e),n.join();this.log.trace("adding %c to re-provide queue",e),this.reprovideQueue.add(async o=>{if(o.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let i=this.reprovideTimeout.getTimeoutSignal(o);try{await this.reprovide(o.cid,o)}finally{this.reprovideTimeout.cleanUp(i)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(o=>{this.log.error("could not re-provide key %c - %e",e,o)})}async reprovide(e,t){await yr(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var U$=20,F$=5e3,$$="kad-close",V$=50,M2=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??F$,this.peerSetSize=t.peerSetSize??U$,this.closeTagName=t.closeTagName??$$,this.closeTagValue=t.closeTagValue??V$,this.closestPeers=new Gr,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await Tr(this.components.peerId);this.newPeers=new rs(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 Gr(this.newPeers?.peers.map(({peer: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},[hy]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[hy]:void 0}})})])}};function of(r){return Array.isArray(r?.peers)}var U2=class{peerId;root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e,t){this.peerId=e.peerId,this.prefixLength=t.prefixLength??ek,this.kBucketSize=t.kBucketSize??sf,this.splitThreshold=t.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=t.numberOfOldContactsToPing??tk,this.lastPingThreshold=t.lastPingThreshold??rk,this.ping=t.ping,this.verify=t.verify,this.onAdd=t.onAdd,this.onRemove=t.onRemove,this.addingPeerMap=qo({name:`${t.metricsPrefix}_adding_peer_map`,metrics:e.metrics}),this.root={prefix:"",depth:0,peers:[]}}async start(){await this.addSelfPeer(this.peerId)}stop(){this.addingPeerMap.clear(),this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e,t){this.localPeer={peerId:e,kadId:await Tr(e,t),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await Tr(e,t),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,t),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!H$(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n,t);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,t);i&&await this._add(e,t)}*closest(e,t){let n=new rs(e,t?.count??this.kBucketSize);for(let o of this.toIterable())t?.exclude?.some(i=>i.equals(o.peerId))!==!0&&n.addWithKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*dn(n.peers,({peer:o})=>o.id)}count(){function e(t){if(of(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,t){let n=this._determineBucket(e),o=this._indexOf(n,e);if(o>-1){let i=n.peers.splice(o,1)[0];await this.onRemove?.(i,n,t)}}*toIterable(){function*e(t){if(of(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+N(Fn(e,t),"base16"))}_determineBucket(e){let t=N(e,"base2");function n(o,i=0){return of(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=>se(n.kadId,t))}async _split(e,t){let n={prefix:"0",depth:e.depth+1,peers:[]},o={prefix:"1",depth:e.depth+1,peers:[]};for(let i of e.peers)N(i.kadId,"base2")[e.depth]==="0"?(n.peers.push(i),await this.onMove?.(i,e,n,t)):(o.peers.push(i),await this.onMove?.(i,e,o,t));K$(e,n,o)}};function K$(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function H$(r,e){return r.lastPing<Date.now()-e}var sf=20,ek=6;var q$=20,z$=100,tk=3;var W$=20,G$=100,nk="kad-peer",j$=1,rk=6e5,Y$=!0,X$=1e3,F2=class extends ue{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;shutdownController;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??sf,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??nk,this.peerTagValue=t.peerTagValue??j$,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??Y$,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??X$,this.shutdownController=new AbortController,this.shutdownController.signal,this.pingOldContactQueue=new Ht({concurrency:t.pingOldContactConcurrency??W$,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??G$}),this.pingOldContactTimeout=new Tn({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new Ht({concurrency:t.pingNewContactConcurrency??q$,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??z$}),this.pingNewContactTimeout=new Tn({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new U2(e,{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,metricsPrefix:t.metricsPrefix}),this.closestPeerTagger=new M2(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,this.shutdownController=new AbortController,this.shutdownController.signal,await Et(this.closestPeerTagger,this.kb))}async afterStart(){let e=0;Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let t=we([this.shutdownController.signal,AbortSignal.timeout(2e4)]);try{for(let n of await this.components.peerStore.all({filters:[o=>o.protocols.includes(this.protocol)&&o.tags.has(nk)],limit:this.populateFromDatastoreLimit,signal:t})){if(!this.running)return;try{await this.add(n.id,{signal:t}),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(n.id,{tags:{[this.peerTagName]:void 0}})}}}finally{t.clear()}this.log("added %d peer store peers to the routing table",e)}).catch(t=>{this.log.error("error adding %d, peer store peers to the routing table - %e",e,t)})}async stop(){this.running=!1,await Tt(this.closestPeerTagger,this.kb),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort(),this.shutdownController.abort()}async peerAdded(e,t,n){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}},n),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t,n){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}},n),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=we([c,this.shutdownController.signal,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 Xo(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=we([n,this.shutdownController.signal,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{return this.log("pinging contact %p",e.peerId),await this.components.ping.ping(e.peerId,t),this.log("contact %p ping ok",e.peerId),this.safeDispatchEvent("peer:ping",{detail:e.peerId}),!0}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,t){let n=await Tr(e,t);return this.kb.get(n)?.peerId}closestPeer(e){let t=this.closestPeers(e,{count:1});if(t.length>0)return t[0]}closestPeers(e,t){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,t){if(this.kb==null)throw new Error("RoutingTable is not started");let n=await Tr(e,t);await this.kb.remove(n,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(of(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 ok=[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,V2=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??UI,this.refreshQueryTimeout=s??FI,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,t){this.log("refreshing routing table");let n=this._maxCommonPrefix(),o=this._getTrackedCommonPrefixLengthsForRefresh(n);this.log(`max common prefix length ${n}`),this.log(`tracked CPLs [ ${o.map(i=>i.toISOString()).join(", ")} ]`),Promise.all(o.map(async(i,s)=>{try{if(await this._refreshCommonPrefixLength(s,i,e,t),this._numPeersForCpl(n)===0){let a=Math.min(2*(s+1),o.length-1);for(let c=s+1;c<a+1;c++)try{await this._refreshCommonPrefixLength(c,i,e,t)}catch(l){this.log.error("failed to refresh entries with common prefix length %d - %e",c,l)}}}catch(a){this.log.error("failed to refresh entries with common prefix length - %e",a)}})).catch(i=>{this.log.error("failed to refresh table - %e",i)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(i=>{this.log.error("failed to set refresh timeout - %e",i)})}async _refreshCommonPrefixLength(e,t,n,o){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 i=this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,i,this.routingTable.size);let s=we([o?.signal,AbortSignal.timeout(this.refreshQueryTimeout)]);try{let a=await N2(this.peerRouting.getClosestPeers(i.toMultihash().bytes,{signal:s}));this.log(`found ${a} peers that were close to imaginary peer %p`,i),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,i,this.routingTable.size)}finally{s.clear()}}_getTrackedCommonPrefixLengthsForRefresh(e){e>$2&&(e=$2);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}_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=dr(2),n=(t[1]<<8)+t[0],o=this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),i=He(o);return dt(i)}_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=ok[c],u=new ArrayBuffer(34),d=new DataView(u,0,u.byteLength);return d.setUint8(0,st.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=Fn(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var K2=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 ve("Missing key");let n;try{n=Z.decode(t.key)}catch{throw new ve("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=He(o.id),s=dt(i),a=o.multiaddrs.map(c=>X(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 H2=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){this.log("incoming request from %p for peers close to %b",e,t.key);try{if(t.key==null)throw new ve("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getClosestPeersOffline(t.key,{exclude:[e,this.peerId]});se(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(i=>i.decapsulateCode(421))});let o={type:Ue.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 for %p",t.key,e):this.log("found %d peers close to %b for %p",o.closer.length,t.key,e),o}catch(n){throw this.log("error during finding peers closer to %b for %p - %e",t.key,e,n),n}}};var q2=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 ve("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=Z.decode(t.key)}catch{throw new ve("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[o,i]=await Promise.all([Go(dn(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.getClosestPeersOffline(t.key)]),s={type:Ue.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 z2=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 ve("Invalid key");let o={type:Ue.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(XI(n)){this.log("is public key");let a=QI(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new We("No public key found in key book");c=It(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new Gt(n,c,new Date).serialize(),o}let[i,s]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getClosestPeersOffline(n)]);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=ts(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(i){if(i.name==="NotFoundError")return;throw i}let o=Gt.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>w2){await this.datastore.delete(t);return}return o}};var W2=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 G2=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)throw this.log.error("empty record from %p",e),new ve(`Empty record from: ${e}`);try{let o=Gt.deserialize(t.record);await cl(this.validators,o),o.timeReceived=new Date;let i=ts(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 j2=class{handlers;log;metrics;incomingMessageTimeout;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`),rpcTime:e.metrics?.registerMetricGroup(`${t.metricsPrefix}_inbound_rpc_time_seconds`,{label:"operation"})},this.log=e.logger.forComponent(`${t.logPrefix}:rpc`),this.incomingMessageTimeout=t.incomingMessageTimeout??1e4,this.handlers={[Ue.GET_VALUE.toString()]:new z2(e,t),[Ue.PUT_VALUE.toString()]:new G2(e,t),[Ue.FIND_NODE.toString()]:new H2(e,t),[Ue.ADD_PROVIDER.toString()]:new K2(e,t),[Ue.GET_PROVIDERS.toString()]:new q2(e,t),[Ue.PING.toString()]:new W2(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})}}async onIncomingStream(e,t){let n=()=>{e.abort(new zn)},o=AbortSignal.timeout(this.incomingMessageTimeout);o.addEventListener("abort",n);let i=Qe(e).pb(Ji);for(;;){if(e.readStatus!=="readable"){await e.close({signal:o});break}let s=await i.read({signal:o}),a=this.metrics?.rpcTime?.timer(s.type.toString()),c=this.metrics?.rpcTime?.timer(s.type.toString()),l=!1;try{this.log("incoming %s from %p",s.type,t.remotePeer);let u=await this.handleMessage(t.remotePeer,s);u!=null&&await i.write(u,{signal:o})}catch(u){throw l=!0,c?.(),u}finally{l||a?.()}o.removeEventListener("abort",n),o=AbortSignal.timeout(this.incomingMessageTimeout),o.addEventListener("abort",n)}}};var Y2=class extends ue{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 by=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await yr(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.map(o=>({...o,routing:"kad-dht"})))}async put(e,t,n){await yr(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 We("Could not find value for key")}},xy=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 We("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},Q$=32,Z$=64,X2=class extends ue{k;a;d;protocol;routingTable;providers;network;peerRouting;components;log;running;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;reprovider;onPeerConnectTimeout;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.k=t.kBucketSize??sf,this.a=t.alpha??Xi,this.d=t.disjointPaths??this.a,this.protocol=t.protocol??CI,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??Q$,this.maxOutboundStreams=t.maxOutboundStreams??Z$,this.peerInfoMapper=t.peerInfoMapper??jI,this.onPeerConnectTimeout=t.onPeerConnectTimeout??NI,this.providers=new L2(e,{...t.providers,logPrefix:n,datastorePrefix:o}),this.validators={...GI,...t.validators},this.selectors={...WI,...t.selectors},this.network=new R2(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:i}),this.routingTable=new F2(e,{kBucketSize:this.k,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 a=Se();t.allowQueryWithZeroPeers===!0&&a.resolve(),this.queryManager=new D2(e,{disjointPaths:this.d,alpha:this.a,logPrefix:n,metricsPrefix:i,initialQuerySelfHasRun:a,routingTable:this.routingTable,allowQueryWithZeroPeers:t.allowQueryWithZeroPeers}),this.peerRouting=new P2(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new k2(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:o}),this.contentRouting=new C2(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new V2(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new j2(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 Y2(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new O2(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:a,operationMetrics:s}),this.reprovider=new B2(e,{...t.reprovide,logPrefix:n,metricsPrefix:i,datastorePrefix:o,contentRouting:this.contentRouting,operationMetrics:s}),this.network.addEventListener("peer",c=>{let l=c.detail;this.onPeerConnect(l).catch(u=>{this.log.error("could not add %p to routing table - %e",l.id,u)}),this.dispatchEvent(new CustomEvent("peer",{detail:l}))}),this.topologyListener.addEventListener("peer",c=>{let l=c.detail;Promise.resolve().then(async()=>{let u=await this.components.peerStore.get(l),d={id:l,multiaddrs:u.addresses.map(({multiaddr:f})=>f),protocols:u.protocols};await this.onPeerConnect(d)}).catch(u=>{this.log.error("could not add %p to routing table - %e",l,u)})}),this.dhtPeerRouting=new xy(this),this.dhtContentRouting=new by(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",c=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let l=c.detail.peer.addresses.some(({multiaddr:d})=>!ut(d)&&!Ot.exactMatch(d)),u=this.getMode();l&&u==="client"?await this.setMode("server"):u==="server"&&!l&&await this.setMode("client")}).catch(l=>{this.log.error("error setting dht server mode - %e",l)})}),this.get=ba(this.get.bind(this),s,"GET_VALUE"),this.findProviders=ba(this.findProviders.bind(this),s,"FIND_PROVIDERS"),this.findPeer=ba(this.findPeer.bind(this),s,"FIND_PEER"),this.getClosestPeers=ba(this.getClosestPeers.bind(this),s,"GET_CLOSEST_PEERS"),this.provide=ba(this.provide.bind(this),s,"PROVIDE"),this.put=ba(this.put.bind(this),s,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[Te]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery","@libp2p/kad-dht"];[Ir]=["@libp2p/identify","@libp2p/ping"];get[bo](){return this.dhtContentRouting}get[Eo](){return this.dhtPeerRouting}get[cs](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id,e.multiaddrs),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(n=>n.toString()));return}let t=AbortSignal.timeout(this.onPeerConnectTimeout);try{await this.routingTable.add(e.id,{signal:t})}catch(n){this.log.error("could not add %p to routing table - %e",e.id,n)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t){if(e===this.getMode()&&t?.force!==!0){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol,t),e===this.getMode()&&t?.force!==!0){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),{signal:t?.signal,maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running||(this.running=!0,await this.setMode(this.clientMode?"client":"server",{force:!0}),await Et(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await Et(this.querySelf))}async stop(){this.running=!1,await Tt(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,t){await this.providers.removeProvider(e,this.components.peerId,t)}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(e){this.routingTableRefresh.refreshTable(!0,e)}};var ik;(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",r[r.PATH_ENDED=8]="PATH_ENDED"})(ik||(ik={}));function sk(r={}){return e=>new X2(e,r)}var Fe;(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"})(Fe||(Fe={}));var af=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),Ey=Object.freeze({NEW_STREAM:Fe.NEW_STREAM,MESSAGE:Fe.MESSAGE_INITIATOR,CLOSE:Fe.CLOSE_INITIATOR,RESET:Fe.RESET_INITIATOR}),ak=Object.freeze({MESSAGE:Fe.MESSAGE_RECEIVER,CLOSE:Fe.CLOSE_RECEIVER,RESET:Fe.RESET_RECEIVER});var cf=1<<20,vy=4<<20,Q2=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=cf,t=vy){this._buffer=new ne,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 ve("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===Fe.NEW_STREAM||o===Fe.MESSAGE_INITIATOR||o===Fe.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}=lk(e),{value:o,offset:i}=lk(e,n),s=t&7;if(af[s]==null)throw new Error(`Invalid type received: ${s}`);if(o>this._maxMessageSize)throw new ve("Message size too large");return{id:t>>3,type:s,offset:n+i,length:o}}},J$=128,ck=127;function lk(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&ck)<<n:(i&ck)*Math.pow(2,n),n+=7}while(i>=J$);return e=o-e,{value:t,offset:e}}var Sy=10*1024,Ay=class{_pool;_poolOffset;constructor(){this._pool=Re(Sy),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Zt(e.id<<3|e.type,n,o),o+=ye(e.id<<3|e.type),(e.type===Fe.NEW_STREAM||e.type===Fe.MESSAGE_INITIATOR||e.type===Fe.MESSAGE_RECEIVER)&&e.data!=null?(Zt(e.data.length,n,o),o+=ye(e.data.length)):(Zt(0,n,o),o+=ye(0));let i=n.subarray(this._poolOffset,o);Sy-o<100?(this._pool=Re(Sy),this._poolOffset=0):this._poolOffset=o,t.append(i),(e.type===Fe.NEW_STREAM||e.type===Fe.MESSAGE_INITIATOR||e.type===Fe.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},eV=new Ay;function lf(r){let e=new ne;return eV.write(r,e),e}var Ty=class extends Ti{streamId;types;maxDataSize;muxer;constructor(e){super(e),this.types=e.direction==="outbound"?Ey:ak,this.maxDataSize=e.maxDataSize,this.muxer=e.muxer,this.streamId=parseInt(this.id.substring(1)),e.direction==="outbound"&&queueMicrotask(()=>{this.muxer.send(lf({id:this.streamId,type:Ey.NEW_STREAM,data:new ne(C(this.id))}))})}sendData(e){let t=new ne,n=e.byteLength;for(;e.byteLength>0;){let o=Math.min(e.byteLength,this.maxDataSize),i=e.sublist(0,o);e=e.sublist(o),t.append(lf({id:this.streamId,type:this.types.MESSAGE,data:i}))}return{sentBytes:n,canSendMore:this.muxer.send(t)}}sendReset(){return this.muxer.send(lf({id:this.streamId,type:this.types.RESET}))}async sendCloseWrite(e){this.muxer.send(lf({id:this.streamId,type:this.types.CLOSE})),e?.signal?.throwIfAborted()}async sendCloseRead(e){e?.signal?.throwIfAborted()}sendPause(){}sendResume(){}};function uk(r){let{id:e,muxer:t,direction:n,maxMsgSize:o=cf}=r;return new Ty({...r,id:n==="outbound"?`i${e}`:`r${e}`,direction:n,maxDataSize:o,muxer:t,log:r.log.newScope(`${n}:${e}`),protocol:""})}var tV=5;function rV(r){let e={...r,type:`${af[r.type]} (${r.type})`};return r.type===Fe.NEW_STREAM&&(e.data=N(r.data.subarray())),(r.type===Fe.MESSAGE_INITIATOR||r.type===Fe.MESSAGE_RECEIVER)&&(e.data=N(r.data.subarray(),"base16")),e}var Z2=class extends Ai{_streamId;rateLimiter;maxMessageSize;maxUnprocessedMessageQueueSize;decoder;constructor(e,t){super(e,{...t,protocol:"/mplex/6.7.0",name:"mplex"}),this._streamId=0,this.maxMessageSize=t.maxMessageSize??cf,this.maxUnprocessedMessageQueueSize=t.maxUnprocessedMessageQueueSize??vy,this.decoder=new Q2(this.maxMessageSize,this.maxUnprocessedMessageQueueSize),this.rateLimiter=new gc({points:t.disconnectThreshold??tV,duration:1})}onData(e){for(let t of this.decoder.write(e))this.handleMessage(t)}onCreateStream(e){if(this.status!=="open")throw new mn("Muxer already closed");let t=this._streamId++;return this._newStream(t,"outbound",e)}_newStream(e,t,n){return this.log("new %s stream %s",t,e),uk({...n,id:e,direction:t,maxMsgSize:this.maxMessageSize,log:this.log,muxer:this})}handleMessage(e){if(this.log.enabled&&this.log.trace("incoming message",rV(e)),e.type===Fe.NEW_STREAM){try{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}let o=this._newStream(e.id,"inbound",this.streamOptions);this.onRemoteStream(o);return}let t=`${(e.type&1)===1?"i":"r"}${e.id}`,n=this.streams.find(o=>o.id===t);if(n==null){this.log("missing stream %s for message type %s",t,af[e.type]);try{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}try{switch(e.type){case Fe.MESSAGE_INITIATOR:case Fe.MESSAGE_RECEIVER:n.onData(e.data);break;case Fe.CLOSE_INITIATOR:case Fe.CLOSE_RECEIVER:n.onRemoteCloseWrite();break;case Fe.RESET_INITIATOR:case Fe.RESET_RECEIVER:n.onRemoteReset();break;default:this.log("unknown message type")}}catch(o){this.log.error("error while processing message - %e",o),n.abort(o)}}};var _y=class{protocol="/mplex/6.7.0";_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@libp2p/mplex";[Te]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new Z2(e,{...this._init})}};function dk(r={}){return()=>new _y(r)}var fk="1.0.0",hk="ping",pk="ipfs";var J2=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;constructor(e,t={}){this.components=e,this.started=!1,this.protocol=`/${t.protocolPrefix??pk}/${hk}/${fk}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnLimitedConnection=t.runOnLimitedConnection??!0,this.handlePing=this.handlePing.bind(this)}[Symbol.toStringTag]="@libp2p/ping";[Te]=["@libp2p/ping"];async start(){await this.components.registrar.handle(this.protocol,this.handlePing,{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}async handlePing(e,t){let n=e.log.newScope("ping");n.trace("ping from %p",t.remotePeer);let o=AbortSignal.timeout(this.timeout);o.addEventListener("abort",()=>{e.abort(new zn("Ping timed out"))});let i=Date.now();for await(let s of e){if(e.status!=="open"){n("stream status changed to %s",e.status);break}e.send(s)||(n("waiting for stream to drain"),await Le(e,"drain",{rejectionEvents:["close"],signal:o}),n("stream drained"))}n("ping from %p complete in %dms",t.remotePeer,Date.now()-i),await e.close({signal:o})}async ping(e,t={}){let n=dr(32),o=await this.components.connectionManager.openStream(e,this.protocol,{runOnLimitedConnection:this.runOnLimitedConnection,...t}),i=o.log.newScope("ping");try{let s=Date.now(),a=Promise.withResolvers(),c=new ne,l=u=>{if(c.append(u.data),c.byteLength===32){o.removeEventListener("message",l);let d=Date.now()-s;Promise.all([o.closeRead(t)]).then(()=>{if(se(n,c.subarray()))a.resolve(d);else throw new ss(`Received wrong ping ack after ${d}ms`)}).catch(f=>{o.abort(f),a.reject(f)})}};return o.addEventListener("message",l),o.send(n),await o.close(t),await qe(a.promise,t.signal)}catch(s){throw i.error("error while pinging %o - %e",e,s),o?.abort(s),s}finally{o?.close()}}};function gk(r={}){return e=>new J2(e,r)}var ir;(function(r){let e;(function(a){a.FIN="FIN",a.STOP_SENDING="STOP_SENDING",a.RESET="RESET",a.FIN_ACK="FIN_ACK"})(e=r.Flag||(r.Flag={}));let t;(function(a){a[a.FIN=0]="FIN",a[a.STOP_SENDING=1]="STOP_SENDING",a[a.RESET=2]="RESET",a[a.FIN_ACK=3]="FIN_ACK"})(t||(t={})),(function(a){a.codec=()=>lt(t)})(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=me((a,c,l={})=>{l.lengthDelimited!==!1&&c.fork(),a.flag!=null&&(c.uint32(8),r.Flag.codec().encode(a.flag,c)),a.message!=null&&(c.uint32(18),c.bytes(a.message)),l.lengthDelimited!==!1&&c.ldelim()},(a,c,l={})=>{let u={},d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{u.flag=r.Flag.codec().decode(a);break}case 2:{u.message=a.bytes();break}default:{a.skipType(f&7);break}}}return u},function*(a,c,l,u={}){let d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{yield{field:`${l}.flag`,value:r.Flag.codec().decode(a)};break}case 2:{yield{field:`${l}.message`,value:a.bytes()};break}default:{a.skipType(f&7);break}}}})),n);function o(a){return he(a,r.codec())}r.encode=o;function i(a,c){return fe(a,r.codec(),c)}r.decode=i;function s(a,c){return pe(a,r.codec(),c)}r.stream=s})(ir||(ir={}));var yk=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"],Iy=Array.from("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"),wk="libp2p+webrtc+v1/",bk=2*1024*1024,ll=16*1024;function sV(r=ll){let e=ye(r-ye(r)),t=1+ye(Object.keys(ir.Flag).length-1),n=1,o=r-e-t-n,i=ye(o);return e+t+n+i}var xk=sV();var Ek=1e4,ky="/webrtc",uf="/webrtc-signaling/0.0.1";var vk=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))},aV=(function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r})();var cV=(function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r})();var lV=(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 uV=(function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r})();var dV=(function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r})();var fV=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,hV=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,Sk=3,pV=[["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",fV]],Ak=[["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 _k(r){return r?Tk(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new dV:typeof navigator<"u"?Tk(navigator.userAgent):yV()}function mV(r){return r!==""&&pV.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 Tk(r){var e=mV(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new uV;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<Sk&&(o=vk(vk([],o,!0),wV(Sk-o.length),!0)):o=[];var i=o.join("."),s=gV(r),a=hV.exec(r);return a&&a[1]?new lV(t,i,s,a[1]):new aV(t,i,s)}function gV(r){for(var e=0,t=Ak.length;e<t;e++){var n=Ak[e],o=n[0],i=n[1],s=i.exec(r);if(s)return o}return null}function yV(){var r=typeof process<"u"&&process.version;return r?new cV(process.version.slice(1)):null}function wV(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var Ik=_k(),eg=Ik!=null&&Ik.name==="firefox";async function Cy(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??yk.map(e=>({urls:[e]})),r}var kk=(r=32)=>wk+[...Array(r)].map(()=>Iy.at(Math.floor(Math.random()*Iy.length))).join("");var Ry=class extends Ti{channel;incomingData;maxBufferedAmount;receivedFinAck;finAckTimeout;constructor(e){super({...e,maxMessageSize:(e.maxMessageSize??ll)-xk}),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=$t(),this.maxBufferedAmount=e.maxBufferedAmount??bk,this.finAckTimeout=e.finAckTimeout??Ek,this.channel.onclose=()=>{this.log.trace("received datachannel close event"),this.onRemoteCloseWrite(),this.onTransportClosed()},this.channel.onerror=n=>{let o=n.error;this.log.trace("received datachannel error event - %e",o),this.abort(o)},this.channel.onmessage=async n=>{this.log("incoming message %d bytes",n.data.byteLength);let{data:o}=n;o===null||o.byteLength===0||this.incomingData.push(new Uint8Array(o,0,o.byteLength))},this.channel.bufferedAmountLowThreshold=0,this.channel.onbufferedamountlow=()=>{this.writableNeedsDrain&&this.safeDispatchEvent("drain")},Promise.resolve().then(async()=>{for await(let n of Vs(this.incomingData))this.processIncomingProtobuf(n)}).catch(n=>{this.log.error("error processing incoming data channel messages - %e",n)});let t=()=>{this.channel.readyState==="open"&&(this.log.trace("stream closed, closing underlying datachannel"),this.channel.close())};this.addEventListener("close",t),this.channel.readyState!=="open"&&(this.log('channel ready state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),Le(this.channel,"open",{rejectionEvents:["close","error"]}).then(()=>{this.log('channel ready state is now "%s", dispatching drain',this.channel.readyState),this.safeDispatchEvent("drain")}).catch(n=>{this.abort(n.error??n)}))}sendNewStream(){}_sendMessage(e){if(this.channel.readyState!=="open")throw new Hn(`Invalid datachannel state - ${this.channel.readyState}`);if(this.log.trace('sending message, channel state "%s"',this.channel.readyState),eg){this.channel.send(e.subarray());return}for(let t of e)this.channel.send(t)}sendData(e){return this.channel.readyState!=="open"?{sentBytes:0,canSendMore:!1}:(this._sendMessage(Uo.single(ir.encode({message:e.subarray()}))),{sentBytes:e.byteLength,canSendMore:this.channel.bufferedAmount<this.maxBufferedAmount})}sendReset(e){try{this.log.error("sending reset - %e",e),this._sendFlag(ir.Flag.RESET),this.receivedFinAck?.reject(e)}catch(t){this.log.error("failed to send reset - %e",t)}}async sendCloseWrite(e){this._sendFlag(ir.Flag.FIN),e?.signal?.throwIfAborted(),this.receivedFinAck=Promise.withResolvers();let t=e?.signal??AbortSignal.timeout(this.finAckTimeout),n=[Le(this.channel,"close",{signal:t}),Le(this.channel,"error",{signal:t})];await Promise.any([qe(this.receivedFinAck.promise,t),...n]).finally(()=>{n.forEach(o=>o.cancel())})}async sendCloseRead(e){this._sendFlag(ir.Flag.STOP_SENDING),e?.signal?.throwIfAborted()}processIncomingProtobuf(e){let t=ir.decode(e);t.message!=null&&(this.readStatus==="readable"||this.readStatus==="paused")&&this.onData(new ne(t.message)),t.flag!==void 0&&(this.log.trace('incoming flag %s, write status "%s", read status "%s"',t.flag,this.writeStatus,this.readStatus),t.flag===ir.Flag.FIN&&(this._sendFlag(ir.Flag.FIN_ACK),this.onRemoteCloseWrite()),t.flag===ir.Flag.RESET&&(this.receivedFinAck?.reject(new Sa("The stream was reset")),this.onRemoteReset()),t.flag===ir.Flag.STOP_SENDING&&this.onRemoteCloseRead(),t.flag===ir.Flag.FIN_ACK&&this.receivedFinAck?.resolve())}_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=ir.encode({flag:e}),n=Uo.single(t);try{return this._sendMessage(n),!0}catch(o){this.log.error("could not send flag %s - %e",e.toString(),o)}return!1}sendPause(){}sendResume(){}};function df(r){let{channel:e,direction:t,isHandshake:n}=r;return new Ry({...r,id:`${e.id}`,log:r.log.newScope(`${n===!0?"handshake":t}:${e.id}`),protocol:""})}var ns=class{protocol;peerConnection;metrics;dataChannelOptions;earlyDataChannels;constructor(e){this.onEarlyDataChannel=this.onEarlyDataChannel.bind(this),this.peerConnection=e.peerConnection,this.metrics=e.metrics,this.protocol=e.protocol??ky,this.dataChannelOptions=e.dataChannelOptions??{},this.peerConnection.addEventListener("datachannel",this.onEarlyDataChannel),this.earlyDataChannels=[]}onEarlyDataChannel(e){this.earlyDataChannels.push(e.channel)}createStreamMuxer(e){return this.peerConnection.removeEventListener("datachannel",this.onEarlyDataChannel),new Py(e,{peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,protocol:this.protocol,earlyDataChannels:this.earlyDataChannels})}},Py=class extends Ai{peerConnection;dataChannelOptions;constructor(e,t){super(e,{...t,name:"muxer"}),this.peerConnection=t.peerConnection,this.protocol=t.protocol??ky,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{this.onDataChannel(n)},queueMicrotask(()=>{if(this.status!=="open"){t.earlyDataChannels.forEach(n=>{n.close()});return}t.earlyDataChannels.forEach(n=>{this.onDataChannel(n)})})}onDataChannel(e){if(this.log("incoming datachannel with channel id %d, protocol %s and status %s",e.id,e.protocol,e.readyState),e.label==="init"){this.log.trace("closing init channel %d",e.id),e.close();return}let t=df({...this.streamOptions,...this.dataChannelOptions,channel:e,direction:"inbound",log:this.log});this.onRemoteStream(t)}async onCreateStream(e){let t=this.peerConnection.createDataChannel("",{});return this.log("open channel %d for protocol %s",t.id,e?.protocol),df({...e,...this.dataChannelOptions,channel:t,direction:"outbound",log:this.log})}onData(){}};var Ly=class extends Si{peerConnection;constructor(e){super(e),this.peerConnection=e.peerConnection;let t=e.peerConnection.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change %s initial state %s",this.peerConnection.connectionState,t),(this.peerConnection.connectionState==="disconnected"||this.peerConnection.connectionState==="failed"||this.peerConnection.connectionState==="closed")&&(this.onTransportClosed(),this.peerConnection.close())}}sendData(e){return{sentBytes:e.byteLength,canSendMore:!0}}async sendClose(e){this.peerConnection.close(),e?.signal?.throwIfAborted()}sendReset(){this.peerConnection.close()}sendPause(){}sendResume(){}},ff=r=>new Ly(r);var tg=globalThis.RTCPeerConnection,rg=globalThis.RTCSessionDescription,Ck=globalThis.RTCIceCandidate;var os=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},pn=class extends os{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var ng=class extends os{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var og=class extends os{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},ig=class extends os{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 _r;(function(r){let e;(function(a){a.SDP_OFFER="SDP_OFFER",a.SDP_ANSWER="SDP_ANSWER",a.ICE_CANDIDATE="ICE_CANDIDATE"})(e=r.Type||(r.Type={}));let t;(function(a){a[a.SDP_OFFER=0]="SDP_OFFER",a[a.SDP_ANSWER=1]="SDP_ANSWER",a[a.ICE_CANDIDATE=2]="ICE_CANDIDATE"})(t||(t={})),(function(a){a.codec=()=>lt(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=me((a,c,l={})=>{l.lengthDelimited!==!1&&c.fork(),a.type!=null&&(c.uint32(8),r.Type.codec().encode(a.type,c)),a.data!=null&&(c.uint32(18),c.string(a.data)),l.lengthDelimited!==!1&&c.ldelim()},(a,c,l={})=>{let u={},d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{u.type=r.Type.codec().decode(a);break}case 2:{u.data=a.string();break}default:{a.skipType(f&7);break}}}return u},function*(a,c,l,u={}){let d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{yield{field:`${l}.type`,value:r.Type.codec().decode(a)};break}case 2:{yield{field:`${l}.data`,value:a.string()};break}default:{a.skipType(f&7);break}}}})),n);function o(a){return he(a,r.codec())}r.encode=o;function i(a,c){return fe(a,r.codec(),c)}r.decode=i;function s(a,c){return pe(a,r.codec(),c)}r.stream=s})(_r||(_r={}));var sg=async(r,e,t)=>{try{let n=Promise.withResolvers();for(bV(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal})]);if(o==null){t.signal?.throwIfAborted();break}if(o.type!==_r.Type.ICE_CANDIDATE)throw new ve("ICE candidate message expected");let i=JSON.parse(o.data??"null");if(i===""||i===null){t.onProgress?.(new O("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let s=new Ck(i);t.log.trace("%s received new ICE candidate %o",t.direction,i);try{t.onProgress?.(new O("webrtc:add-ice-candidate",s.candidate)),await r.addIceCandidate(s)}catch(a){t.log.error("%s bad candidate received %o - %e",t.direction,i,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate - %e",t.direction,n),t.signal?.aborted===!0&&r.connectionState!=="connected")throw n}};function bV(r,e){if(r.connectionState==="connected"){e.resolve();return}r.onconnectionstatechange=t=>{switch(r.connectionState){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new va(`RTCPeerConnection connection state became "${r.connectionState}"`));break;default:break}}}function ag(r){let e;for(let t of r.getComponents())t.name==="p2p"&&(e=Xe(t.value??""));if(e==null)throw new qn("Remote peerId must be present in multiaddr");return e}async function Rk({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:i,transportManager:s,log:a,logger:c,onProgress:l}){let{circuitAddress:u,targetPeer:d}=Pk(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing circuit address: %a",u);let f=i.getConnections(d),h;f.length===0?(l?.(new O("webrtc:dial-relay")),h=await s.dial(u,{signal:t,onProgress:l})):(l?.(new O("webrtc:reuse-relay-connection")),h=f[0]),l?.(new O("webrtc:open-signaling-stream"));let p=await h.newStream(uf,{signal:t,runOnLimitedConnection:!0}),y=Qe(p).pb(_r),g=new tg(r);g.addEventListener("connectionstatechange",()=>{switch(g.connectionState){case"closed":g.close();break;default:break}});let m=new ns({peerConnection:g,dataChannelOptions:e});try{let b=g.createDataChannel("init");g.onicecandidate=({candidate:V})=>{if(g.connectionState==="connected"){a.trace("ignore new ice candidate as peer connection is already connected");return}if(V==null||V?.candidate===""){a.trace("initiator detected end of ICE candidates");return}let Y=JSON.stringify(V?.toJSON()??null);a.trace("initiator sending ICE candidate %o",V),y.write({type:_r.Type.ICE_CANDIDATE,data:Y},{signal:t}).catch(T=>{a.error("error sending ICE candidate - %e",T)})},g.onicecandidateerror=V=>{a.error("initiator ICE candidate error",V)};let v=await g.createOffer().catch(V=>{throw a.error("could not execute createOffer - %e",V),new pn("Failed to set createOffer")});a.trace("initiator send SDP offer %s",v.sdp),l?.(new O("webrtc:send-sdp-offer")),await y.write({type:_r.Type.SDP_OFFER,data:v.sdp},{signal:t}),await g.setLocalDescription(v).catch(V=>{throw a.error("could not execute setLocalDescription - %e",V),new pn("Failed to set localDescription")}),l?.(new O("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let L=await y.read({signal:t});if(L.type!==_r.Type.SDP_ANSWER)throw new pn("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",L.data);let K=new rg({type:"answer",sdp:L.data});return await g.setRemoteDescription(K).catch(V=>{throw a.error("could not execute setRemoteDescription - %e",V),new pn("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new O("webrtc:read-ice-candidates")),await sg(g,y,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected"),b.readyState!=="open"&&(a.trace("wait for init channel to open"),await Le(b,"open",{signal:t})),a.trace("closing init channel"),b.close(),a.trace("waiting for init channel to close"),await Le(b,"close",{signal:t}),l?.(new O("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await p.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:g,muxerFactory:m}}catch(b){throw a.error("outgoing signaling error - %e",b),g.close(),p.abort(b),b}finally{g.onicecandidate=null,g.onicecandidateerror=null}}var Lk=Ke(Bc.matchers[0],Ve(290)),cg=class r extends ue{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=>Lk.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=>Lk.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 Dk(r,e,{peerConnection:t,signal:n,log:o}){o.trace("new inbound signaling stream");let i=Qe(r).pb(_r);try{t.onicecandidate=({candidate:d})=>{if(t.connectionState==="connected"){o.trace("ignore new ice candidate as peer connection is already connected");return}if(d==null||d?.candidate===""){o.trace("recipient detected end of ICE candidates");return}let f=JSON.stringify(d?.toJSON()??null);o.trace("recipient sending ICE candidate %s",f),i.write({type:_r.Type.ICE_CANDIDATE,data:f},{signal:n}).catch(h=>{o.error("error sending ICE candidate - %e",h)})},o.trace("recipient read SDP offer");let c=await i.read({signal:n});if(c.type!==_r.Type.SDP_OFFER)throw new pn(`expected message type SDP_OFFER, received: ${c.type??"undefined"} `);o.trace("recipient received SDP offer %s",c.data);let l=new rg({type:"offer",sdp:c.data});await t.setRemoteDescription(l).catch(d=>{throw o.error("could not execute setRemoteDescription - %e",d),new pn("Failed to set remoteDescription")});let u=await t.createAnswer().catch(d=>{throw o.error("could not execute createAnswer - %e",d),new pn("Failed to create answer")});o.trace("recipient send SDP answer %s",u.sdp),await i.write({type:_r.Type.SDP_ANSWER,data:u.sdp},{signal:n}),await t.setLocalDescription(u).catch(d=>{throw o.error("could not execute setLocalDescription - %e",d),new pn("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await sg(t,i,{direction:"recipient",signal:n,log:o})}catch(c){if(t.connectionState!=="connected")throw o.error("error while handling signaling stream from peer %a - %e",e.remoteAddr,c),t.close(),c;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",e.remoteAddr,c)}let s=ag(e.remoteAddr),a=X(`/webrtc/p2p/${s}`);return o.trace("recipient connected to remote address %s",a),{remoteAddress:a,remotePeer:s}}var lg=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"})})}[ui]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[Te]=["@libp2p/transport"];[Ir]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(uf,(e,t)=>{let n=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);this._onProtocol(e,t,n).catch(o=>{this.log.error("failed to handle incoming connect from %p - %e",t.remotePeer,o)}).finally(()=>{n.clear()})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(uf),this._started=!1}createListener(e){return new cg(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(Ju.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 Rk({rtcConfiguration:await Cy(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=ff({peerConnection:o,remoteAddr:n,metrics:this.metrics?.dialerEvents,direction:"outbound",log:this.components.logger.forComponent("libp2p:webrtc:connection")}),a=await t.upgrader.upgradeOutbound(s,{skipProtection:!0,skipEncryption:!0,remotePeer:ag(e),muxerFactory:i,onProgress:t.onProgress,signal:t.signal});return this._closeOnShutdown(o,s),a}async _onProtocol(e,t,n){let o=new tg(await Cy(this.init.rtcConfiguration));o.addEventListener("connectionstatechange",()=>{switch(o.connectionState){case"closed":o.close();break;default:break}});let i=new ns({peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:s,remotePeer:a}=await Dk(e,t,{peerConnection:o,signal:n,log:this.log});await e.close({signal:n});let c=ff({peerConnection:o,remoteAddr:s,metrics:this.metrics?.listenerEvents,direction:"inbound",log:this.components.logger.forComponent("libp2p:webrtc:connection")});await this.components.upgrader.upgradeInbound(c,{skipEncryption:!0,skipProtection:!0,remotePeer:a,muxerFactory:i,signal:n}),this._closeOnShutdown(o,c)}catch(s){throw this.log.error("incoming signaling error - %e",s),o.close(),e.abort(s),s}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection - %e",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function Pk(r){let e=r.getComponents().filter(({name:n})=>n==="p2p").map(({value:n})=>n).pop();if(e==null)throw new _("Destination peer id was missing");return{circuitAddress:X(r.getComponents().filter(({name:n})=>n!=="webrtc")),targetPeer:Xe(e)}}var Dy=Object.values(hs).map(r=>r.decoder).reduce((r,e)=>r.or(e)),xV=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function Nk(r){return r?.match(xV)?.groups?.fingerprint}function Ny(r){let t=r.getComponents().find(n=>n.code===466)?.value;if(t===void 0||t==="")throw new _(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function EV(r){return nt.decode(Dy.decode(r))}function vV(r){let e=EV(Ny(r)),t=SV(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 ng(n,r.toString());return`${t} ${o.join(":").toUpperCase()}`}function Ok(r){let e=r.split(":").map(o=>parseInt(o,16)),t=Uint8Array.from(e),n=cr(st.code,t);return X(`/certhash/${bl.encode(n.bytes)}`)}function SV(r){switch(r){case 17:return"sha-1";case 18:return"sha-256";case 19:return"sha-512";default:throw new ig(r)}}function Bk(r,e){let{host:t,port:n,type:o}=ce(r);if(o!=="ip4"&&o!=="ip6")throw new _(`Multiaddr ${r} was not an IPv4 or IPv6 address`);let i=vV(r);return{type:"answer",sdp:`v=0
66
66
  o=- 0 0 IN IP${o==="ip4"?4:6} ${t}
67
67
  s=-
68
68
  t=0 0
@@ -73,13 +73,13 @@ a=mid:0
73
73
  a=ice-options:ice2
74
74
  a=ice-ufrag:${e}
75
75
  a=ice-pwd:${e}
76
- a=fingerprint:${s}
76
+ a=fingerprint:${i}
77
77
  a=setup:passive
78
78
  a=sctp-port:5000
79
- a=max-message-size:${Va}
79
+ a=max-message-size:${ll}
80
80
  a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host
81
81
  a=end-of-candidates
82
- `}}function $v(r,e){let{host:t,port:n,type:o}=oe(r);if(o!=="ip4"&&o!=="ip6")throw new A(`Multiaddr ${r} was not an IPv4 or IPv6 address`);return{type:"offer",sdp:`v=0
82
+ `}}function Mk(r,e){let{host:t,port:n,type:o}=ce(r);if(o!=="ip4"&&o!=="ip6")throw new _(`Multiaddr ${r} was not an IPv4 or IPv6 address`);return{type:"offer",sdp:`v=0
83
83
  o=- 0 0 IN IP${o==="ip4"?4:6} ${t}
84
84
  s=-
85
85
  c=IN IP${o==="ip4"?4:6} ${t}
@@ -92,15 +92,15 @@ a=ice-ufrag:${e}
92
92
  a=ice-pwd:${e}
93
93
  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
94
94
  a=sctp-port:5000
95
- a=max-message-size:${Va}
95
+ a=max-message-size:${ll}
96
96
  a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host
97
97
  a=end-of-candidates
98
- `}}function h6(r,e){if(r.sdp===void 0)throw new A("Can't munge a missing SDP");let t=r.sdp.includes(`\r
98
+ `}}function Oy(r,e){if(r.sdp===void 0)throw new _("Can't munge a missing SDP");let t=r.sdp.includes(`\r
99
99
  `)?`\r
100
100
  `:`
101
101
  `;try{r.sdp=r.sdp.replace(/\na=ice-ufrag:[^\n]*\n/,`
102
102
  a=ice-ufrag:`+e+t).replace(/\na=ice-pwd:[^\n]*\n/,`
103
- a=ice-pwd:`+e+t)}catch{}return r}var p6=C("libp2p-webrtc-noise:");function Vv(r,e,t){let n=r.trim().toLowerCase().replaceAll(":",""),o=C(n,"hex"),s=Wt(Ge.code,o),i=d6.decode(f6(e)),a=p6.byteLength+s.bytes.byteLength+i.byteLength;return t==="server"?Be([p6,i,s.bytes],a):Be([p6,s.bytes,i],a)}var zD=R0?"iceconnectionstatechange":"connectionstatechange";function GD(r,e){return r.role==="server"}async function Hv(r,e,t,n){let o=r.createDataChannel("",{negotiated:!0,id:0});try{if(n.role==="client"){n.log.trace("client creating local offer");let u=await r.createOffer();n.log.trace("client created local offer %s",u.sdp);let f=h6(u,t);n.log.trace("client setting local offer %s",f.sdp),await r.setLocalDescription(f);let h=Fv(n.remoteAddr,t);n.log.trace("client setting server description %s",h.sdp),await r.setRemoteDescription(h)}else{let u=$v(n.remoteAddr,t);n.log.trace("server setting client %s %s",u.type,u.sdp),await r.setRemoteDescription(u),n.log.trace("server creating local answer");let f=await r.createAnswer();n.log.trace("server created local answer");let h=h6(f,t);n.log.trace("server setting local description %s",f.sdp),await r.setLocalDescription(h)}if(o.readyState!=="open"&&(n.log.trace("%s wait for handshake channel to open, starting status %s",n.role,o.readyState),await xe(o,"open",n)),n.log.trace("%s handshake channel opened",n.role),GD(n,r)){let u=r.remoteFingerprint()?.value??"";n.remoteAddr=n.remoteAddr.encapsulate(Uv(u))}let s=Mv(r.localDescription?.sdp);if(s==null)throw new ns("Could not get fingerprint from local description sdp");n.log.trace("%s performing noise handshake",n.role);let i=Vv(s,n.remoteAddr,n.role),a=np({prologueBytes:i})(n),c=gu({channel:o,direction:"outbound",isHandshake:!0,log:n.log,...n.dataChannel??{}}),l=yu({peerConnection:r,remoteAddr:n.remoteAddr,metrics:n.events,direction:n.role==="client"?"outbound":"inbound",log:n.logger.forComponent("libp2p:webrtc-direct:connection")});if(r.addEventListener(zD,()=>{switch(r.connectionState){case"failed":case"disconnected":case"closed":l.close().catch(u=>{n.log.error("error closing connection - %e",u),l.abort(u)});break;default:break}}),n.events?.increment({peer_connection:!0}),n.role==="client"){n.log.trace("%s secure inbound",n.role);let u=await a.secureInbound(c,{remotePeer:n.remotePeer,signal:n.signal,skipStreamMuxerNegotiation:!0});return n.log.trace("%s upgrade outbound",n.role),await n.upgrader.upgradeOutbound(l,{skipProtection:!0,skipEncryption:!0,remotePeer:u.remotePeer,muxerFactory:e,signal:n.signal})}n.log.trace("%s secure outbound",n.role);let d=await a.secureOutbound(c,{remotePeer:n.remotePeer,signal:n.signal,skipStreamMuxerNegotiation:!0});l.remoteAddr=l.remoteAddr.encapsulate(`/p2p/${d.remotePeer}`),n.log.trace("%s upgrade inbound",n.role),await n.upgrader.upgradeInbound(l,{skipProtection:!0,skipEncryption:!0,remotePeer:d.remotePeer,muxerFactory:e,signal:n.signal})}catch(s){throw o.close(),r.close(),s}}async function qv(r,e,t={}){let n=t.certificate;n==null&&(n=await RTCPeerConnection.generateCertificate({name:"ECDSA",namedCurve:"P-256"}));let o=typeof t.rtcConfiguration=="function"?await t.rtcConfiguration():t.rtcConfiguration,s=new RTCPeerConnection({...o??{},certificates:[n]}),i=new rs({peerConnection:s,metrics:t.events,dataChannelOptions:t.dataChannel});return{peerConnection:s,muxerFactory:i}}var $0=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"})})}[Eo]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[me]=["@libp2p/transport"];async dial(e,t){this.log("dial %a",e),t.signal.throwIfAborted();let n,o=e.getComponents().findLast(c=>c.code===421)?.value;o!=null&&(n=Me(o));let s=Pv(),{peerConnection:i,muxerFactory:a}=await qv("client",s,{rtcConfiguration:typeof this.init.rtcConfiguration=="function"?await this.init.rtcConfiguration():this.init.rtcConfiguration??{},dataChannel:this.init.dataChannel});try{return await Hv(i,a,s,{role:"client",log:this.log,logger:this.components.logger,events:this.metrics?.dialerEvents,signal:t.signal,remoteAddr:e,dataChannel:this.init.dataChannel,upgrader:t.upgrader,peerId:this.components.peerId,remotePeer:n,privateKey:this.components.privateKey})}catch(c){throw i.close(),c}}createListener(e){throw new N0("WebRTCDirectTransport.createListener")}listenFilter(e){return[]}dialFilter(e){return e.filter(ml.exactMatch)}};function Wv(r){return e=>new $0(e,r)}function zv(r){return e=>new F0(e,r)}function Gv(){throw new Error("WebSocket Servers can not be created in the browser!")}var YD=1024*1024*4,XD=10,m6=class extends Do{websocket;maxBufferedAmount;checkBufferedAmountTask;constructor(e){super(e),this.websocket=e.websocket,this.maxBufferedAmount=e.maxBufferedAmount??YD,this.checkBufferedAmountTask=ra(this.checkBufferedAmount.bind(this),e.bufferedAmountPollInterval??XD),this.websocket.addEventListener("close",t=>{if(this.log('closed - code %d, reason "%s", wasClean %s',t.code,t.reason,t.wasClean),this.checkBufferedAmountTask.stop(),!t.wasClean){this.onRemoteReset();return}this.onTransportClosed()},{once:!0}),this.websocket.addEventListener("message",t=>{try{let n;if(typeof t.data=="string")n=C(t.data);else if(t.data instanceof ArrayBuffer)n=new Uint8Array(t.data,0,t.data.byteLength);else{this.abort(new Error("Incorrect binary type"));return}this.onData(n)}catch(n){this.log.error("error receiving data - %e",n)}})}sendData(e){for(let n of e)this.websocket.send(n);let t=this.websocket.bufferedAmount<this.maxBufferedAmount;return t||this.checkBufferedAmountTask.start(),{sentBytes:e.byteLength,canSendMore:t}}sendReset(){this.websocket.close(1006)}async sendClose(e){this.websocket.close(),e?.signal?.throwIfAborted()}sendPause(){}sendResume(){}checkBufferedAmount(){this.log("buffered amount now %d",this.websocket.bufferedAmount),this.websocket.bufferedAmount===0&&(this.checkBufferedAmountTask.stop(),this.safeDispatchEvent("drain"))}};function Yv(r){return new m6(r)}var g6=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"})})}[Eo]=!0;[Symbol.toStringTag]="@libp2p/websockets";[me]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=Yv({websocket:await this._connect(e,t),remoteAddr:e,metrics:this.metrics?.dialerEvents,direction:"outbound",log:this.components.logger.forComponent("libp2p:websockets:connection"),maxBufferedAmount:this.init.maxBufferedAmount,bufferedAmountPollInterval:this.init.bufferedAmountPollInterval});this.log("new outbound connection %s",n.remoteAddr);let o=await t.upgrader.upgradeOutbound(n,t);return this.log("outbound connection %s upgraded",n.remoteAddr),o}async _connect(e,t){t?.signal?.throwIfAborted();let n=Vo(e);this.log("create websocket connection to %s",n);let o=new WebSocket(n);o.binaryType="arraybuffer";try{t.onProgress?.(new H("websockets:open-connection")),await xe(o,"open",t)}catch(s){if(t.signal?.aborted)throw this.metrics?.dialerEvents.increment({abort:!0}),new li(`Could not connect to ${n}`);this.metrics?.dialerEvents.increment({error:!0});try{o.close()}catch{}throw s}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),o}createListener(e){return Gv({logger:this.logger,events:this.components.events,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e.filter(t=>to.exactMatch(t)||Xs.exactMatch(t))}dialFilter(e){return this.listenFilter(e)}};function Xv(r={}){return e=>new g6(e,r)}var y6=Pn(Jf(),1);function Qv(r,e){let t=e.map((n,o)=>({record:xn(n),index:o}));return t.sort((n,o)=>{let s=n.record.sequence,i=o.record.sequence;if(s>i)return-1;if(s<i)return 1;if(n.record.validityType===or.ValidityType.EOL&&o.record.validityType===or.ValidityType.EOL){let a=y6.default.fromString(n.record.validity).toDate(),c=y6.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 jv="6.0.22-080e4f91",Zv="helia";var Jv={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 K0(r={}){let e=`${Zv}/${jv} ${r1()}`;return{privateKey:r.privateKey,dns:r.dns,nodeInfo:{userAgent:e},addresses:{listen:["/p2p-circuit","/webrtc"]},transports:[BE(),zv(),Wv(),Xv()],connectionEncrypters:[np()],streamMuxers:[EE(),pv()],peerDiscovery:[TE(Jv)],services:{autoNAT:AE(),dcutr:FE(),delegatedRouting:Z9(pg()),dht:lv({clientMode:!0,validators:{ipns:ih},selectors:{ipns:Qv}}),identify:Rx(),identifyPush:Px(),keychain:Q1(r.keychain),ping:bv(),http:Ax()}}}async function eS(r){let e=r.libp2p??{};e.privateKey==null&&r.datastore!=null&&(e.privateKey=await t4(r.datastore,r.keychain));let t=K0(e);return t.datastore=t.datastore??r.datastore,await Hw({...t,...e,start:!1})}async function w6(r={}){let e=r.datastore??new js,t=r.blockstore??new xl,n;return qw(r.libp2p)?n=r.libp2p:n=await eS({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e}),{...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[fg(),tg()],routers:r.routers??[Tg(n),Sg()],metrics:n.metrics}}async function QD(r={}){let e=await w6(r),t=new Pf(e);return e.start!==!1&&await t.start(),t}return iS(jD);})();
103
+ a=ice-pwd:`+e+t)}catch{}return r}var By=C("libp2p-webrtc-noise:");function Fk(r,e,t){let n=r.trim().toLowerCase().replaceAll(":",""),o=C(n,"hex"),i=cr(st.code,o),s=Dy.decode(Ny(e)),a=By.byteLength+i.bytes.byteLength+s.byteLength;return t==="server"?Ye([By,s,i.bytes],a):Ye([By,i.bytes,s],a)}var AV=eg?"iceconnectionstatechange":"connectionstatechange";function TV(r,e){return r.role==="server"}async function $k(r,e,t,n){let o=r.createDataChannel("",{negotiated:!0,id:0});try{if(n.role==="client"){n.log.trace("client creating local offer");let d=await r.createOffer();n.log.trace("client created local offer %s",d.sdp);let f=Oy(d,t);n.log.trace("client setting local offer %s",f.sdp),await r.setLocalDescription(f);let h=Bk(n.remoteAddr,t);n.log.trace("client setting server description %s",h.sdp),await r.setRemoteDescription(h)}else{let d=Mk(n.remoteAddr,t);n.log.trace("server setting client %s %s",d.type,d.sdp),await r.setRemoteDescription(d),n.log.trace("server creating local answer");let f=await r.createAnswer();n.log.trace("server created local answer");let h=Oy(f,t);n.log.trace("server setting local description %s",f.sdp),await r.setLocalDescription(h)}if(o.readyState!=="open"&&(n.log.trace("%s wait for handshake channel to open, starting status %s",n.role,o.readyState),await Le(o,"open",n)),n.log.trace("%s handshake channel opened",n.role),TV(n,r)){let d=r.remoteFingerprint()?.value??"";n.remoteAddr=n.remoteAddr.encapsulate(Ok(d))}let i=Nk(r.localDescription?.sdp);if(i==null)throw new os("Could not get fingerprint from local description sdp");n.log.trace("%s performing noise handshake",n.role);let s=Fk(i,n.remoteAddr,n.role),a=Rm({prologueBytes:s})(n),c=df({channel:o,direction:"outbound",isHandshake:!0,log:n.log,...n.dataChannel??{}}),l=ff({peerConnection:r,remoteAddr:n.remoteAddr,metrics:n.events,direction:n.role==="client"?"outbound":"inbound",log:n.logger.forComponent("libp2p:webrtc-direct:connection")});if(r.addEventListener(AV,()=>{switch(r.connectionState){case"failed":case"disconnected":case"closed":l.close().catch(d=>{n.log.error("error closing connection - %e",d),l.abort(d)});break;default:break}}),n.events?.increment({peer_connection:!0}),n.role==="client"){n.log.trace("%s secure inbound",n.role);let d=await a.secureInbound(c,{remotePeer:n.remotePeer,signal:n.signal,skipStreamMuxerNegotiation:!0});return n.log.trace("%s upgrade outbound",n.role),await n.upgrader.upgradeOutbound(l,{skipProtection:!0,skipEncryption:!0,remotePeer:d.remotePeer,muxerFactory:e,signal:n.signal})}n.log.trace("%s secure outbound",n.role);let u=await a.secureOutbound(c,{remotePeer:n.remotePeer,signal:n.signal,skipStreamMuxerNegotiation:!0});l.remoteAddr=l.remoteAddr.encapsulate(`/p2p/${u.remotePeer}`),n.log.trace("%s upgrade inbound",n.role),await n.upgrader.upgradeInbound(l,{skipProtection:!0,skipEncryption:!0,remotePeer:u.remotePeer,muxerFactory:e,signal:n.signal})}catch(i){throw o.close(),r.close(),i}}async function Vk(r,e,t={}){let n=t.certificate;n==null&&(n=await RTCPeerConnection.generateCertificate({name:"ECDSA",namedCurve:"P-256"}));let o=typeof t.rtcConfiguration=="function"?await t.rtcConfiguration():t.rtcConfiguration,i=new RTCPeerConnection({...o??{},certificates:[n]}),s=new ns({peerConnection:i,metrics:t.events,dataChannelOptions:t.dataChannel});return{peerConnection:i,muxerFactory:s}}var ug=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"})})}[ui]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[Te]=["@libp2p/transport"];async dial(e,t){this.log("dial %a",e),t.signal.throwIfAborted();let n,o=e.getComponents().findLast(c=>c.code===421)?.value;o!=null&&(n=Xe(o));let i=kk(),{peerConnection:s,muxerFactory:a}=await Vk("client",i,{rtcConfiguration:typeof this.init.rtcConfiguration=="function"?await this.init.rtcConfiguration():this.init.rtcConfiguration??{},dataChannel:this.init.dataChannel});try{return await $k(s,a,i,{role:"client",log:this.log,logger:this.components.logger,events:this.metrics?.dialerEvents,signal:t.signal,remoteAddr:e,dataChannel:this.init.dataChannel,upgrader:t.upgrader,peerId:this.components.peerId,remotePeer:n,privateKey:this.components.privateKey})}catch(c){throw s.close(),c}}createListener(e){throw new og("WebRTCDirectTransport.createListener")}listenFilter(e){return[]}dialFilter(e){return e.filter(Zu.exactMatch)}};function Kk(r){return e=>new ug(e,r)}function Hk(r){return e=>new lg(e,r)}function qk(){throw new Error("WebSocket Servers can not be created in the browser!")}var _V=1024*1024*4,IV=10,My=class extends Si{websocket;maxBufferedAmount;checkBufferedAmountTask;constructor(e){super(e),this.websocket=e.websocket,this.maxBufferedAmount=e.maxBufferedAmount??_V,this.checkBufferedAmountTask=yc(this.checkBufferedAmount.bind(this),e.bufferedAmountPollInterval??IV),this.websocket.addEventListener("close",t=>{if(this.log('closed - code %d, reason "%s", wasClean %s',t.code,t.reason,t.wasClean),this.checkBufferedAmountTask.stop(),!t.wasClean){this.onRemoteReset();return}this.onTransportClosed()},{once:!0}),this.websocket.addEventListener("message",t=>{try{let n;if(typeof t.data=="string")n=C(t.data);else if(t.data instanceof ArrayBuffer)n=new Uint8Array(t.data,0,t.data.byteLength);else{this.abort(new Error("Incorrect binary type"));return}this.onData(n)}catch(n){this.log.error("error receiving data - %e",n)}})}sendData(e){for(let n of e)this.websocket.send(n);let t=this.websocket.bufferedAmount<this.maxBufferedAmount;return t||this.checkBufferedAmountTask.start(),{sentBytes:e.byteLength,canSendMore:t}}sendReset(){this.websocket.close(1006)}async sendClose(e){this.websocket.close(),e?.signal?.throwIfAborted()}sendPause(){}sendResume(){}checkBufferedAmount(){this.log("buffered amount now %d",this.websocket.bufferedAmount),this.websocket.bufferedAmount===0&&(this.checkBufferedAmountTask.stop(),this.safeDispatchEvent("drain"))}};function zk(r){return new My(r)}var Uy=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"})})}[ui]=!0;[Symbol.toStringTag]="@libp2p/websockets";[Te]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=zk({websocket:await this._connect(e,t),remoteAddr:e,metrics:this.metrics?.dialerEvents,direction:"outbound",log:this.components.logger.forComponent("libp2p:websockets:connection"),maxBufferedAmount:this.init.maxBufferedAmount,bufferedAmountPollInterval:this.init.bufferedAmountPollInterval});this.log("new outbound connection %s",n.remoteAddr);let o=await t.upgrader.upgradeOutbound(n,t);return this.log("outbound connection %s upgraded",n.remoteAddr),o}async _connect(e,t){t?.signal?.throwIfAborted();let n=Ui(e);this.log("create websocket connection to %s",n);let o=new WebSocket(n);o.binaryType="arraybuffer";try{t.onProgress?.(new O("websockets:open-connection")),await Le(o,"open",t)}catch(i){if(t.signal?.aborted)throw this.metrics?.dialerEvents.increment({abort:!0}),new va(`Could not connect to ${n}`);this.metrics?.dialerEvents.increment({error:!0});try{o.close()}catch{}throw i}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),o}createListener(e){return qk({logger:this.logger,events:this.components.events,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e.filter(t=>Wo.exactMatch(t)||na.exactMatch(t))}dialFilter(e){return this.listenFilter(e)}};function Wk(r={}){return e=>new Uy(e,r)}var Fy=wo(vp(),1);function Gk(r,e){let t=e.map((n,o)=>({record:ao(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===Er.ValidityType.EOL&&o.record.validityType===Er.ValidityType.EOL){let a=Fy.default.fromString(n.record.validity).toDate(),c=Fy.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 jk="6.0.22-397f2d86",Yk="helia";var Xk={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 dg(r={}){let e=`${Yk}/${jk} ${A0()}`;return{privateKey:r.privateKey,dns:r.dns,nodeInfo:{userAgent:e},addresses:{listen:["/p2p-circuit","/webrtc"]},transports:[D_(),Hk(),Kk(),Wk()],connectionEncrypters:[Rm()],streamMuxers:[y_(),dk()],peerDiscovery:[v_(Xk)],services:{autoNAT:E_(),dcutr:B_(),delegatedRouting:GS(P8()),dht:sk({clientMode:!0,validators:{ipns:Lp},selectors:{ipns:Gk}}),identify:II(),identifyPush:kI(),keychain:wm(r.keychain),ping:gk(),http:EI()}}}async function Qk(r){let e=r.libp2p??{};e.privateKey==null&&r.datastore!=null&&(e.privateKey=await d5(r.datastore,r.keychain));let t=dg(e);return t.datastore=t.datastore??r.datastore,await LA({...t,...e,start:!1})}async function $y(r={}){let e=r.datastore??new aa,t=r.blockstore??new sd,n;return DA(r.libp2p)?n=r.libp2p:n=await Qk({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e}),{...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[p8(),X6()],routers:r.routers??[O8(n),D8()],metrics:n.metrics}}async function kV(r={}){let e=await $y(r),t=new ep(e);return e.start!==!1&&await t.start(),t}return nC(CV);})();
104
104
  /*! Bundled license information:
105
105
 
106
106
  pvtsutils/build/index.js: