helia 6.0.21 → 6.0.22-080e4f91

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,16 +1,16 @@
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 iS=Object.create;var xu=Object.defineProperty;var aS=Object.getOwnPropertyDescriptor;var cS=Object.getOwnPropertyNames;var lS=Object.getPrototypeOf,uS=Object.prototype.hasOwnProperty;var an=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),et=(r,e)=>{for(var t in e)xu(r,t,{get:e[t],enumerable:!0})},A6=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of cS(e))!uS.call(r,o)&&o!==t&&xu(r,o,{get:()=>e[o],enumerable:!(n=aS(e,o))||n.enumerable});return r};var Ln=(r,e,t)=>(t=r!=null?iS(lS(r)):{},A6(e||!r||!r.__esModule?xu(t,"default",{value:r,enumerable:!0}):t,r)),dS=r=>A6(xu({},"__esModule",{value:!0}),r);var _6=an((ZN,q0)=>{"use strict";var fS=Object.prototype.hasOwnProperty,Ht="~";function Qa(){}Object.create&&(Qa.prototype=Object.create(null),new Qa().__proto__||(Ht=!1));function hS(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function T6(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var s=new hS(t,n||r,o),i=Ht?Ht+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 Lu(r,e){--r._eventsCount===0?r._events=new Qa:delete r._events[e]}function Lt(){this._events=new Qa,this._eventsCount=0}Lt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)fS.call(t,n)&&e.push(Ht?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Lt.prototype.listeners=function(e){var t=Ht?Ht+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};Lt.prototype.listenerCount=function(e){var t=Ht?Ht+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Lt.prototype.emit=function(e,t,n,o,s,i){var a=Ht?Ht+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};Lt.prototype.on=function(e,t,n){return T6(this,e,t,n,!1)};Lt.prototype.once=function(e,t,n){return T6(this,e,t,n,!0)};Lt.prototype.removeListener=function(e,t,n,o){var s=Ht?Ht+e:e;if(!this._events[s])return this;if(!t)return Lu(this,s),this;var i=this._events[s];if(i.fn)i.fn===t&&(!o||i.once)&&(!n||i.context===n)&&Lu(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:Lu(this,s)}return this};Lt.prototype.removeAllListeners=function(e){var t;return e?(t=Ht?Ht+e:e,this._events[t]&&Lu(this,t)):(this._events=new Qa,this._eventsCount=0),this};Lt.prototype.off=Lt.prototype.removeListener;Lt.prototype.addListener=Lt.prototype.on;Lt.prefixed=Ht;Lt.EventEmitter=Lt;typeof q0<"u"&&(q0.exports=Lt)});var X6=an((fM,j6)=>{j6.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 i7=an(Mc=>{(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})(),Mc.ip2long=i,Mc.long2ip=a,Mc.Netmask=r}).call(Mc)});var th=an((QX,m3)=>{var XX=(function(){typeof m3<"u"&&(m3.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(B){var x,L=new g,B=(B+="").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(P,v,E){return v<0&&(E*=-1),x=6e4*(60*+v+ +E),""}).replace(/\.\d+$/,function(P){return L.nano=+(P+c).substr(1,9),""}).split(/\D+/);if(1<B.length?B[1]--:B[1]=0,L.time=x=Date.UTC.apply(Date,B)-(x||0),isNaN(x))throw new TypeError("Invalid Date");return m(L)},g.fromTimeT=function(S){return T(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(),B={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 P=x.getYear();return 999999<P?"+"+P:9999<P?"+"+z(P,6):0<=P?z(P,4):-999999<=P?"-"+z(-P,6):P},a:function(){return h[L.getUTCDay()]},b:function(){return f[L.getUTCMonth()]},d:function(){return $(L.getUTCDate())},e:function(){return(function(P){return(9<P?"":" ")+(0|P)})(L.getUTCDate())},m:function(){return $(L.getUTCMonth()+1)}};return(function P(v){return v.replace(/%./g,function(E){var _=E[1],b=p[_],_=B[_];return b?P(b):_?_():E})})(S||u)},d.writeInt64BE=I(0,1,2,3,0,4),d.writeInt64LE=I(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 B=this;if(!(B instanceof g))return new g(S,x,L);B.time=+S||0,B.nano=+x||0,B.year=+L||0,m(B)}function m(S){var x,L,B,P=S.year,v=S.time,E=S.nano,b=((E<0||a<=E)&&(E-=(L=Math.floor(E/a))*a,v+=L,L=1),P%e);return(v<-s||s<v||b)&&((x=l(v/o))&&(P+=x*e,v-=x*o),(B=w(v)).setUTCFullYear(b+B.getUTCFullYear()),B=(v=+B)+(x=l((P-=b)/e))*o,x&&-s<=B&&B<=s&&(P-=x*e,v=B),L=1),L&&(S.year=P,S.time=v,S.nano=E),S}function w(S){var x=new Date(0);return x.setTime(S),x}function T(P,B){P=+P||0;var L=l((B=(B|0)*i)/n)+l(P/n),B=B%n+P%n,P=l(B/n);return P&&(L+=P,B-=P*n),new g(1e3*B,0,L*e)}function I(S,x,L,B,P,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),M=l(O/i)+l(k/i),O=O%i+k%i,k=Math.floor(O/i);return k&&(M+=k,O-=k*i),E(b,_+P,M),E(b,_+v,O),b};function E(b,_,M){b[_+S]=M>>24&255,b[_+x]=M>>16&255,b[_+L]=M>>8&255,b[_+B]=255&M}}function D(S,x,L,B,P,v){return function(b,_){F(b,_|=0);var M=E(b,_+P);return T(E(b,_+v),M)};function E(b,_){return 16777216*b[_+S]+(b[_+x]<<16|b[_+L]<<8|b[_+B])}}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 Yw=an((gse,Gw)=>{"use strict";function lR(r){return r>=55296&&r<=56319}function uR(r){return r>=56320&&r<=57343}Gw.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],lR(i)&&uR(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 Xw=an((yse,jw)=>{"use strict";function dR(r){return r>=55296&&r<=56319}function fR(r){return r>=56320&&r<=57343}jw.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),fR(o)?s!=null&&dR(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 Zw=an((wse,Qw)=>{"use strict";var hR=Yw(),pR=Xw();Qw.exports=hR.bind(null,pR)});var tb=an((bse,eb)=>{"use strict";var mR=Zw(),gR=/[\/\?<>\\:\*\|"]/g,yR=/[\x00-\x1f\x80-\x9f]/g,wR=/^\.+$/,bR=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,ER=/[\. ]+$/;function Jw(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(gR,e).replace(yR,e).replace(wR,e).replace(bR,e).replace(ER,e);return mR(t,255)}eb.exports=function(r,e){var t=e&&e.replacement||"",n=Jw(r,t);return t===""?n:Jw(n,"")}});var rb=an(Aa=>{"use strict";var vR="[object ArrayBuffer]",ao=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===vR}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}},j3="string",SR=/^[0-9a-f\s]+$/i,AR=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,IR=/^[a-zA-Z0-9-_]+$/,i1=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=ao.toUint8Array(e),n="";for(let s=0;s<t.length;s++)n+=String.fromCharCode(t[s]);return decodeURIComponent(escape(n))}},Or=class{static toString(e,t=!1){let n=ao.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}},a1=class r{static isHex(e){return typeof e===j3&&SR.test(e)}static isBase64(e){return typeof e===j3&&AR.test(e)}static isBase64Url(e){return typeof e===j3&&IR.test(e)}static ToString(e,t="utf8"){let n=ao.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 Or.toString(n,!0);case"utf16":case"utf16be":return Or.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 Or.fromString(e,!0);case"utf16":case"utf16be":return Or.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=ao.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 i1.fromString(e);case"utf16":case"utf16be":return Or.fromString(e);case"utf16le":case"usc2":return Or.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 i1.toString(e);case"utf16":case"utf16be":return Or.toString(e);case"utf16le":case"usc2":return Or.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=ao.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=ao.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 Or.toString(e,t)}static FromUtf16String(e,t=!1){return Or.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,"")||""}};a1.DEFAULT_UTF8_ENCODING="utf8";function TR(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 _R(...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 CR(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}Aa.BufferSourceConverter=ao;Aa.Convert=a1;Aa.assign=TR;Aa.combine=_R;Aa.isEqual=CR});var wx=an(Rn=>{"use strict";Object.defineProperty(Rn,"__esModule",{value:!0});Rn.parseCookie=gx;Rn.parse=gx;Rn.stringifyCookie=jL;Rn.stringifySetCookie=Fp;Rn.serialize=Fp;Rn.parseSetCookie=XL;Rn.stringifySetCookie=Fp;Rn.serialize=Fp;var px=/^[\u0021-\u003A\u003C\u003E-\u007E]+$/,mx=/^[\u0021-\u003A\u003C-\u007E]*$/,qL=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,WL=/^[\u0020-\u003A\u003D-\u007E]*$/,zL=/^-?\d+$/,GL=Object.prototype.toString,YL=(()=>{let r=function(){};return r.prototype=Object.create(null),r})();function gx(r,e){let t=new YL,n=r.length;if(n<2)return t;let o=e?.decode||yx,s=0;do{let i=q4(r,s,n);if(i===-1)break;let a=H4(r,s,n);if(i>a){s=r.lastIndexOf(";",i-1)+1;continue}let c=Xo(r,s,i);t[c]===void 0&&(t[c]=o(Xo(r,i+1,a))),s=a+1}while(s<n);return t}function jL(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(!px.test(o))throw new TypeError(`cookie name is invalid: ${o}`);let i=t(s);if(!mx.test(i))throw new TypeError(`cookie val is invalid: ${s}`);n.push(`${o}=${i}`)}return n.join("; ")}function Fp(r,e,t){let n=typeof r=="object"?r:{...t,name:r,value:String(e)},s=(typeof e=="object"?e:t)?.encode||encodeURIComponent;if(!px.test(n.name))throw new TypeError(`argument name is invalid: ${n.name}`);let i=n.value?s(n.value):"";if(!mx.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(!qL.test(n.domain))throw new TypeError(`option domain is invalid: ${n.domain}`);a+="; Domain="+n.domain}if(n.path){if(!WL.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 XL(r,e){let t=e?.decode||yx,n=r.length,o=H4(r,0,n),s=q4(r,0,o),i=s===-1?{name:"",value:t(Xo(r,0,o))}:{name:Xo(r,0,s),value:t(Xo(r,s+1,o))},a=o+1;for(;a<n;){let c=H4(r,a,n),l=q4(r,a,c),d=l===-1?Xo(r,a,c):Xo(r,a,l),u=l===-1?void 0:Xo(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&&zL.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 H4(r,e,t){let n=r.indexOf(";",e);return n===-1?t:n}function q4(r,e,t){let n=r.indexOf("=",e);return n<t?n:-1}function Xo(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 yx(r){if(r.indexOf("%")===-1)return r;try{return decodeURIComponent(r)}catch{return r}}function QL(r){return GL.call(r)==="[object Date]"}});var fN={};et(fN,{DEFAULT_CID_PEER_FILTER_SIZE:()=>Sg,DEFAULT_SESSION_MAX_PROVIDERS:()=>vg,DEFAULT_SESSION_MIN_PROVIDERS:()=>xg,InsufficientProvidersError:()=>rl,InvalidCodecError:()=>Ag,NoRoutersAvailableError:()=>Vo,UnknownCodecError:()=>ol,UnknownHashAlgorithmError:()=>nl,createHelia:()=>dN,heliaDefaults:()=>E6,libp2pDefaults:()=>H0});var I6=Symbol.for("@libp2p/connection");var Dn=Symbol.for("@libp2p/content-routing");var Vt=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},vu=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},Su=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"}},Nn=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},za=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}},Ga=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"}},di=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"}},fi=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}};var cn=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},Ya=class extends Error{static name="StreamBufferError";constructor(e="The stream buffer was full"){super(e),this.name="StreamBufferError"}},Le=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},hi=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},ln=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},Au=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},bo=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},pi=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"}},as=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},un=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},Ur=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var Eo=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},cs=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},ja=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},Iu=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},mi=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},Fr=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var Tu=class extends Event{data;constructor(e,t){super("message",t),this.data=e}},xo=class extends Event{error;local;constructor(e,t,n){super("close",n),this.error=t,this.local=e}},_u=class extends xo{constructor(e,t){super(!0,e,t)}},Cu=class extends xo{constructor(e,t){super(!1,e,t)}};var ls=Symbol.for("@libp2p/peer-discovery");var ku=Symbol.for("@libp2p/peer-id");function Rt(r){return!!r?.[ku]}var On=Symbol.for("@libp2p/peer-routing");var us="keep-alive";function Pu(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function at(...r){let e=[];for(let t of r)Pu(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 lt(...r){let e=[];for(let t of r)Pu(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 vo=Symbol.for("@libp2p/transport");var Xa;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(Xa||(Xa={}));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 Ru=class extends AggregateError{static name="DNSQueryFailedError";name="DNSQueryFailedError"};var W0=Ln(_6(),1);var z0=class r extends Error{name="TimeoutError";constructor(e,t){super(e,t),Error.captureStackTrace?.(this,r)}},C6=r=>r.reason??new DOMException("This operation was aborted.","AbortError");function qt(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(C6(i));return}if(i&&(c=()=>{f(C6(i))},i.addEventListener("abort",c,{once:!0})),r.then(u,f),t===Number.POSITIVE_INFINITY)return;let h=new z0;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 G0(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 Za=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=G0(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 ds=class extends W0.default{#e;#t;#r=0;#a;#c=!1;#m=!1;#u;#T=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:Za,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#M(){return this.#o<this.#y}#B(){this.#o--,this.#o===0&&this.emit("pendingZero"),this.#A(),this.emit("next")}#U(){this.#f=void 0,this.#P(),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.#T-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.#M){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.#P()},this.#u),this.#T=Date.now()+this.#u)}#P(){this.#l||(this.#r===0&&this.#o===0&&this.#d&&this.#S(),this.#r=this.#e?this.#o:0),this.#I(),this.#g()}#I(){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.#I()}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=qt(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.#B()})}},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.#I(),this):this}pause(){this.#h=!0}clear(){this.#n=new this.#_,this.#S(),this.#R(),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.#R()}))}#K(){this.#t||(this.#N(),this.#g())}#R(){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 Du(r){let e=[dr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var J0={};et(J0,{base10:()=>ES});var uO=new Uint8Array(0);function k6(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 $r(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 P6(r){return new TextEncoder().encode(r)}function R6(r){return new TextDecoder().decode(r)}function pS(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,T=p.length;w!==T&&p[w]===0;)w++,g++;for(var I=(T-w)*d+1>>>0,D=new Uint8Array(I);w!==T;){for(var F=p[w],$=0,z=I-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=I-m;S!==I&&D[S]===0;)S++;for(var x=c.repeat(g);S<I;++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 T=(p.length-g)*l+1>>>0,I=new Uint8Array(T);p[g];){var D=t[p.charCodeAt(g)];if(D===255)return;for(var F=0,$=T-1;(D!==0||F<w)&&$!==-1;$--,F++)D+=a*I[$]>>>0,I[$]=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=T-w;z!==T&&I[z]===0;)z++;for(var S=new Uint8Array(m+(T-z)),x=m;z!==T;)S[x++]=I[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 mS=pS,gS=mS,L6=gS;var j0=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")}},X0=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 D6(this,e)}},Q0=class{decoders;constructor(e){this.decoders=e}or(e){return D6(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 D6(r,e){return new Q0({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var Z0=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 j0(e,t,n),this.decoder=new X0(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function gi({name:r,prefix:e,encode:t,decode:n}){return new Z0(r,e,t,n)}function So({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=L6(t,r);return gi({prefix:e,name:r,encode:n,decode:s=>$r(o(s))})}function yS(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 wS(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 bS(r){let e={};for(let t=0;t<r.length;++t)e[r[t]]=t;return e}function Xe({name:r,prefix:e,bitsPerChar:t,alphabet:n}){let o=bS(n);return gi({prefix:e,name:r,encode(s){return wS(s,n,t)},decode(s){return yS(s,o,t,r)}})}var ES=So({prefix:"9",name:"base10",alphabet:"0123456789"});var e2={};et(e2,{base16:()=>xS,base16upper:()=>vS});var xS=Xe({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),vS=Xe({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var t2={};et(t2,{base2:()=>SS});var SS=Xe({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var r2={};et(r2,{base256emoji:()=>CS});var N6=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}"),AS=N6.reduce((r,e,t)=>(r[t]=e,r),[]),IS=N6.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function TS(r){return r.reduce((e,t)=>(e+=AS[t],e),"")}function _S(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=IS[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var CS=gi({prefix:"\u{1F680}",name:"base256emoji",encode:TS,decode:_S});var n2={};et(n2,{base32:()=>ut,base32hex:()=>LS,base32hexpad:()=>NS,base32hexpadupper:()=>OS,base32hexupper:()=>DS,base32pad:()=>PS,base32padupper:()=>RS,base32upper:()=>kS,base32z:()=>MS});var ut=Xe({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),kS=Xe({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),PS=Xe({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),RS=Xe({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),LS=Xe({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),DS=Xe({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),NS=Xe({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),OS=Xe({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),MS=Xe({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var o2={};et(o2,{base36:()=>Ar,base36upper:()=>BS});var Ar=So({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),BS=So({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var s2={};et(s2,{base58btc:()=>De,base58flickr:()=>US});var De=So({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),US=So({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var i2={};et(i2,{base64:()=>rt,base64pad:()=>Ja,base64url:()=>ec,base64urlpad:()=>FS});var rt=Xe({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),Ja=Xe({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),ec=Xe({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),FS=Xe({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var a2={};et(a2,{base8:()=>$S});var $S=Xe({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var c2={};et(c2,{identity:()=>KS});var KS=gi({prefix:"\0",name:"identity",encode:r=>R6(r),decode:r=>P6(r)});var Nu={};et(Nu,{code:()=>l2,decode:()=>zS,encode:()=>WS,name:()=>qS});var VS=new TextEncoder,HS=new TextDecoder,qS="json",l2=512;function WS(r){return VS.encode(JSON.stringify(r))}function zS(r){return JSON.parse(HS.decode(r))}var fs={};et(fs,{code:()=>Mn,decode:()=>jS,encode:()=>YS,name:()=>GS});var GS="raw",Mn=85;function YS(r){return $r(r)}function jS(r){return $r(r)}var f2={};et(f2,{identity:()=>dt});var He={};et(He,{Digest:()=>hs,create:()=>Wt,decode:()=>ke,equals:()=>d2,hasCode:()=>pA});var XS=B6,O6=128,QS=127,ZS=~QS,JS=Math.pow(2,31);function B6(r,e,t){e=e||[],t=t||0;for(var n=t;r>=JS;)e[t++]=r&255|O6,r/=128;for(;r&ZS;)e[t++]=r&255|O6,r>>>=7;return e[t]=r|0,B6.bytes=t-n+1,e}var eA=u2,tA=128,M6=127;function u2(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw u2.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&M6)<<o:(i&M6)*Math.pow(2,o),o+=7}while(i>=tA);return u2.bytes=s-n,t}var rA=Math.pow(2,7),nA=Math.pow(2,14),oA=Math.pow(2,21),sA=Math.pow(2,28),iA=Math.pow(2,35),aA=Math.pow(2,42),cA=Math.pow(2,49),lA=Math.pow(2,56),uA=Math.pow(2,63),dA=function(r){return r<rA?1:r<nA?2:r<oA?3:r<sA?4:r<iA?5:r<aA?6:r<cA?7:r<lA?8:r<uA?9:10},fA={encode:XS,decode:eA,encodingLength:dA},hA=fA,tc=hA;function rc(r,e=0){return[tc.decode(r,e),tc.decode.bytes]}function yi(r,e,t=0){return tc.encode(r,e,t),e}function wi(r){return tc.encodingLength(r)}function Wt(r,e){let t=e.byteLength,n=wi(r),o=n+wi(t),s=new Uint8Array(o+t);return yi(r,s,0),yi(t,s,n),s.set(e,o),new hs(r,t,e,s)}function ke(r){let e=$r(r),[t,n]=rc(e),[o,s]=rc(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new hs(t,o,i,e)}function d2(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&k6(r.bytes,t.bytes)}}var hs=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function pA(r,e){return r.code===e}var U6=0,mA="identity",F6=$r;function gA(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(U6,F6(r))}var dt={code:U6,name:mA,encode:F6,digest:gA};var p2={};et(p2,{sha256:()=>ze,sha512:()=>Mu});var yA=20;function nc({name:r,code:e,encode:t,minDigestLength:n,maxDigestLength:o}){return new h2(r,e,t,n,o)}var h2=class{name;code;encode;minDigestLength;maxDigestLength;constructor(e,t,n,o,s){this.name=e,this.code=t,this.encode=n,this.minDigestLength=o??yA,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?$6(n,this.code,t?.truncate):n.then(o=>$6(o,this.code,t?.truncate))}else throw Error("Unknown type, must be binary type")}};function $6(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 V6(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var ze=nc({name:"sha2-256",code:18,encode:V6("SHA-256")}),Mu=nc({name:"sha2-512",code:19,encode:V6("SHA-512")});function H6(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return bA(t,m2(r),e??De.encoder);default:return EA(t,m2(r),e??ut.encoder)}}var q6=new WeakMap;function m2(r){let e=q6.get(r);if(e==null){let t=new Map;return q6.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!==oc)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==xA)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&&d2(e.multihash,n.multihash)}toString(e){return H6(this,e)}toJSON(){return{"/":H6(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??W6(n,o,s.bytes))}else if(t[vA]===!0){let{version:n,multihash:o,code:s}=t,i=ke(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!==oc)throw new Error(`Version 0 CID must use dag-pb (code: ${oc}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=W6(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,oc,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=$r(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 hs(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]=rc(e.subarray(t));return t+=f,u},o=n(),s=oc;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]=wA(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 m2(s).set(n,e),s}};function wA(r,e){switch(r[0]){case"Q":{let t=e??De;return[De.prefix,t.decode(`${De.prefix}${r}`)]}case De.prefix:{let t=e??De;return[De.prefix,t.decode(r)]}case ut.prefix:{let t=e??ut;return[ut.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 bA(r,e,t){let{prefix:n}=t;if(n!==De.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 EA(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 oc=112,xA=18;function W6(r,e,t){let n=wi(r),o=n+wi(e),s=new Uint8Array(o+t.byteLength);return yi(r,s,0),yi(e,s,n),s.set(t,o),s}var vA=Symbol.for("@ipld/js-cid/CID");var ps={...c2,...t2,...a2,...J0,...e2,...n2,...o2,...s2,...i2,...r2},GO={...p2,...f2};function ae(r=0){return new Uint8Array(r)}function Ge(r=0){return new Uint8Array(r)}function G6(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var z6=G6("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),g2=G6("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=Ge(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),SA={utf8:z6,"utf-8":z6,hex:ps.base16,latin1:g2,ascii:g2,binary:g2,...ps},Bu=SA;function R(r,e="utf8"){let t=Bu[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var y2=60;function Uu(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??y2,data:e.data instanceof Uint8Array?R(e.data):e.data}))}}var AA=4;function w2(r,e={}){let t=new ds({concurrency:e.queryConcurrency??AA});return async(n,o={})=>{let s=o?.logger?.forComponent("dns:dns-json-over-https"),i=new URLSearchParams;i.set("name",n),Du(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=Uu(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 Y6(){return[w2("https://cloudflare-dns.com/dns-query"),w2("https://dns.google/resolve")]}var Q6=Ln(X6(),1);var b2=class{lru;constructor(e){this.lru=(0,Q6.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 Uu({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??y2)*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 Z6(r){return new b2(r)}var IA=1e3,Fu=class{resolvers;cache;logger;constructor(e){this.resolvers={},this.cache=Z6(e.cacheSize??IA),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["."]=Y6())}async query(e,t={}){let n=Du(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 Ru(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 $u(r={}){return new Fu(r)}function TA(r){return r[Symbol.asyncIterator]!=null}function _A(r){if(TA(r))return(async()=>{for await(let e of r);})();for(let e of r);}var er=_A;var sc=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},ic=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},Ku=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 Ku("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 nt=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 Oe(r,e){e==null&&(e=r.reduce((o,s)=>o+s.length,0));let t=Ge(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}var t5=Symbol.for("@achingbrain/uint8arraylist");function e5(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 bi(r){return!!r?.[t5]}var X=class r{bufs;length;[t5]=!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(bi(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(bi(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=e5(this.bufs,e);return t.buf[t.index]}set(e,t){let n=e5(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(bi(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 Oe(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:Oe(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(!bi(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=Ge(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=Ge(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=Bu[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}var kA=parseInt("11111",2),E2=parseInt("10000000",2),PA=parseInt("01111111",2),r5={0:ac,1:ac,2:RA,3:NA,4:OA,5:DA,6:LA,16:ac,22:ac,48:ac};function Ir(r,e={offset:0}){let t=r[e.offset]&kA;if(e.offset++,r5[t]!=null)return r5[t](r,e);throw new Error("No decoder for tag "+t)}function cc(r,e){let t=0;if((r[e.offset]&E2)===E2){let n=r[e.offset]&PA,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 ac(r,e){cc(r,e);let t=[];for(;!(e.offset>=r.byteLength);){let n=Ir(r,e);if(n===null)break;t.push(n)}return t}function RA(r,e){let t=cc(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 LA(r,e){let t=cc(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 DA(r,e){return e.offset++,null}function NA(r,e){let t=cc(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 OA(r,e){let t=cc(r,e),n=r.subarray(e.offset,e.offset+t);return e.offset+=t,n}function MA(r){let e=r.toString(16);e.length%2===1&&(e="0"+e);let t=new X;for(let n=0;n<e.length;n+=2)t.append(Uint8Array.from([parseInt(`${e[n]}${e[n+1]}`,16)]));return t}function Vu(r){if(r.byteLength<128)return Uint8Array.from([r.byteLength]);let e=MA(r.byteLength);return new X(Uint8Array.from([e.byteLength|E2]),e)}function zt(r){let e=new X,t=128;return(r.subarray()[0]&t)===t&&e.append(Uint8Array.from([0])),e.append(r),new X(Uint8Array.from([2]),Vu(e),e)}function lc(r){let e=Uint8Array.from([0]),t=new X(e,r);return new X(Uint8Array.from([3]),Vu(t),t)}function n5(r){return new X(Uint8Array.from([4]),Vu(r),r)}function Kr(r,e=48){let t=new X;for(let n of r)t.append(n);return new X(Uint8Array.from([e]),Vu(t),t)}var o5="1.2.840.10045.3.1.7",s5="1.3.132.0.34",i5="1.3.132.0.35";async function a5(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 c5(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 l5(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 BA=Uint8Array.from([6,8,42,134,72,206,61,3,1,7]),UA=Uint8Array.from([6,5,43,129,4,0,34]),FA=Uint8Array.from([6,5,43,129,4,0,35]),u5={ext:!0,kty:"EC",crv:"P-256"},d5={ext:!0,kty:"EC",crv:"P-384"},f5={ext:!0,kty:"EC",crv:"P-521"},Ei=32,xi=48,vi=66;function h5(r){let e=Ir(r);return x2(e)}function x2(r){let e=r[1],t=R(e,"base64url"),n=r[2][1][0],o=1,s,i;if(e.byteLength===Ei)return s=R(n.subarray(o,o+Ei),"base64url"),i=R(n.subarray(o+Ei),"base64url"),new gs({...u5,key_ops:["sign"],d:t,x:s,y:i});if(e.byteLength===xi)return s=R(n.subarray(o,o+xi),"base64url"),i=R(n.subarray(o+xi),"base64url"),new gs({...d5,key_ops:["sign"],d:t,x:s,y:i});if(e.byteLength===vi)return s=R(n.subarray(o,o+vi),"base64url"),i=R(n.subarray(o+vi),"base64url"),new gs({...f5,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 v2(r){let e=Ir(r);return p5(e)}function p5(r){let e=r[1][1][0],t=1,n,o;if(e.byteLength===Ei*2+1)return n=R(e.subarray(t,t+Ei),"base64url"),o=R(e.subarray(t+Ei),"base64url"),new ms({...u5,key_ops:["verify"],x:n,y:o});if(e.byteLength===xi*2+1)return n=R(e.subarray(t,t+xi),"base64url"),o=R(e.subarray(t+xi),"base64url"),new ms({...d5,key_ops:["verify"],x:n,y:o});if(e.byteLength===vi*2+1)return n=R(e.subarray(t,t+vi),"base64url"),o=R(e.subarray(t+vi),"base64url"),new ms({...f5,key_ops:["verify"],x:n,y:o});throw new A(`coordinates were wrong length, got ${e.byteLength}, expected 65, 97 or 133`)}function m5(r){return Kr([zt(Uint8Array.from([1])),n5(C(r.d??"","base64url")),Kr([y5(r.crv)],160),Kr([lc(new X(Uint8Array.from([4]),C(r.x??"","base64url"),C(r.y??"","base64url")))],161)]).subarray()}function g5(r){return Kr([zt(Uint8Array.from([1])),Kr([y5(r.crv)],160),Kr([lc(new X(Uint8Array.from([4]),C(r.x??"","base64url"),C(r.y??"","base64url")))],161)]).subarray()}function y5(r){if(r==="P-256")return BA;if(r==="P-384")return UA;if(r==="P-521")return FA;throw new A(`Invalid curve ${r}`)}async function w5(r="P-256"){let e=await a5(r);return new gs(e.privateKey)}var ms=class{type="ECDSA";jwk;_raw;constructor(e){this.jwk=e}get raw(){return this._raw==null&&(this._raw=g5(this.jwk)),this._raw}toMultihash(){return dt.digest(ft(this))}toCID(){return G.createV1(114,this.toMultihash())}toString(){return De.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 l5(this.jwk,t,e,n)}},gs=class{type="ECDSA";jwk;publicKey;_raw;constructor(e){this.jwk=e,this.publicKey=new ms({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=m5(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}async sign(e,t){return c5(this.jwk,e,t)}};function ys(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function Dt(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=ys(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 Un(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash must wrapped by utils.createHasher");Dt(r.outputLen),Dt(r.blockLen)}function Si(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 E5(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 Nt(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function ws(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function Vr(r,e){return r<<32-e|r>>>e}function Hu(r,e){return r<<e|r>>>32-e>>>0}var x5=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",$A=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Fn(r){if(ce(r),x5)return r.toHex();let e="";for(let t=0;t<r.length;t++)e+=$A[r[t]];return e}var Bn={_0:48,_9:57,A:65,F:70,a:97,f:102};function b5(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 $n(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);if(x5)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=b5(r.charCodeAt(s)),a=b5(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 KA=async()=>{};async function v5(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 KA(),n+=s)}}function VA(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}function S2(r,e=""){return typeof r=="string"?VA(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 S5(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 uc(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 dn(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 A2=r=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,r])});function qu(r,e,t){return r&e^~r&t}function Wu(r,e,t){return r&e^r&t^e&t}var bs=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=ws(this.buffer)}update(e){Si(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=ws(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){Si(this),E5(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:s}=this,{pos:i}=this;t[i++]=128,Nt(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=ws(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()}},Kn=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var bt=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var zu=BigInt(4294967295),A5=BigInt(32);function HA(r,e=!1){return e?{h:Number(r&zu),l:Number(r>>A5&zu)}:{h:Number(r>>A5&zu)|0,l:Number(r&zu)|0}}function I5(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}=HA(r[s],e);[n[s],o[s]]=[i,a]}return[n,o]}var I2=(r,e,t)=>r>>>t,T2=(r,e,t)=>r<<32-t|e>>>t,Es=(r,e,t)=>r>>>t|e<<32-t,xs=(r,e,t)=>r<<32-t|e>>>t,dc=(r,e,t)=>r<<64-t|e>>>t-32,fc=(r,e,t)=>r>>>t-32|e<<64-t;function fn(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var T5=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),_5=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,C5=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),k5=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,P5=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),R5=(r,e,t,n,o,s)=>e+t+n+o+s+(r/2**32|0)|0;var WA=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]),Ao=new Uint32Array(64),_2=class extends bs{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)Ao[u]=e.getUint32(t,!1);for(let u=16;u<64;u++){let f=Ao[u-15],h=Ao[u-2],p=Vr(f,7)^Vr(f,18)^f>>>3,g=Vr(h,17)^Vr(h,19)^h>>>10;Ao[u]=g+Ao[u-7]+p+Ao[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=Vr(a,6)^Vr(a,11)^Vr(a,25),h=d+f+qu(a,c,l)+WA[u]+Ao[u]|0,g=(Vr(n,2)^Vr(n,13)^Vr(n,22))+Wu(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(){Nt(Ao)}destroy(){this.set(0,0,0,0,0,0,0,0),Nt(this.buffer)}},C2=class extends _2{A=Kn[0]|0;B=Kn[1]|0;C=Kn[2]|0;D=Kn[3]|0;E=Kn[4]|0;F=Kn[5]|0;G=Kn[6]|0;H=Kn[7]|0;constructor(){super(32)}};var L5=I5(["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))),zA=L5[0],GA=L5[1],Io=new Uint32Array(80),To=new Uint32Array(80),k2=class extends bs{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 I=0;I<16;I++,t+=4)Io[I]=e.getUint32(t),To[I]=e.getUint32(t+=4);for(let I=16;I<80;I++){let D=Io[I-15]|0,F=To[I-15]|0,$=Es(D,F,1)^Es(D,F,8)^I2(D,F,7),z=xs(D,F,1)^xs(D,F,8)^T2(D,F,7),S=Io[I-2]|0,x=To[I-2]|0,L=Es(S,x,19)^dc(S,x,61)^I2(S,x,6),B=xs(S,x,19)^fc(S,x,61)^T2(S,x,6),P=C5(z,B,To[I-7],To[I-16]),v=k5(P,$,L,Io[I-7],Io[I-16]);Io[I]=v|0,To[I]=P|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:T}=this;for(let I=0;I<80;I++){let D=Es(u,f,14)^Es(u,f,18)^dc(u,f,41),F=xs(u,f,14)^xs(u,f,18)^fc(u,f,41),$=u&h^~u&g,z=f&p^~f&m,S=P5(T,F,z,GA[I],To[I]),x=R5(S,w,D,$,zA[I],Io[I]),L=S|0,B=Es(n,o,28)^dc(n,o,34)^dc(n,o,39),P=xs(n,o,28)^fc(n,o,34)^fc(n,o,39),v=n&s^n&a^s&a,E=o&i^o&c^i&c;w=g|0,T=m|0,g=h|0,m=p|0,h=u|0,p=f|0,{h:u,l:f}=fn(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=T5(L,P,E);n=_5(b,x,B,v),o=b|0}({h:n,l:o}=fn(this.Ah|0,this.Al|0,n|0,o|0)),{h:s,l:i}=fn(this.Bh|0,this.Bl|0,s|0,i|0),{h:a,l:c}=fn(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:d}=fn(this.Dh|0,this.Dl|0,l|0,d|0),{h:u,l:f}=fn(this.Eh|0,this.El|0,u|0,f|0),{h,l:p}=fn(this.Fh|0,this.Fl|0,h|0,p|0),{h:g,l:m}=fn(this.Gh|0,this.Gl|0,g|0,m|0),{h:w,l:T}=fn(this.Hh|0,this.Hl|0,w|0,T|0),this.set(n,o,s,i,a,c,l,d,u,f,h,p,g,m,w,T)}roundClean(){Nt(Io,To)}destroy(){Nt(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}},P2=class extends k2{Ah=bt[0]|0;Al=bt[1]|0;Bh=bt[2]|0;Bl=bt[3]|0;Ch=bt[4]|0;Cl=bt[5]|0;Dh=bt[6]|0;Dl=bt[7]|0;Eh=bt[8]|0;El=bt[9]|0;Fh=bt[10]|0;Fl=bt[11]|0;Gh=bt[12]|0;Gl=bt[13]|0;Hh=bt[14]|0;Hl=bt[15]|0;constructor(){super(64)}};var Tr=uc(()=>new C2,A2(1));var _o=uc(()=>new P2,A2(3));var L2=BigInt(0),R2=BigInt(1);function Vn(r,e=""){if(typeof r!="boolean"){let t=e&&`"${e}" `;throw new Error(t+"expected boolean, got type="+typeof r)}return r}function D5(r){if(typeof r=="bigint"){if(!Gu(r))throw new Error("positive bigint expected, got "+r)}else Dt(r);return r}function hc(r){let e=D5(r).toString(16);return e.length&1?"0"+e:e}function N5(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return r===""?L2:BigInt("0x"+r)}function Ai(r){return N5(Fn(r))}function hn(r){return N5(Fn(vs(ce(r)).reverse()))}function Yu(r,e){Dt(e),r=D5(r);let t=$n(r.toString(16).padStart(e*2,"0"));if(t.length!==e)throw new Error("number too large");return t}function pc(r,e){return Yu(r,e).reverse()}function vs(r){return Uint8Array.from(r)}var Gu=r=>typeof r=="bigint"&&L2<=r;function YA(r,e,t){return Gu(r)&&Gu(e)&&Gu(t)&&e<=r&&r<t}function Co(r,e,t,n){if(!YA(e,t,n))throw new Error("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function D2(r){let e;for(e=0;r>L2;r>>=R2,e+=1);return e}var mc=r=>(R2<<BigInt(r))-R2;function O5(r,e,t){if(Dt(r,"hashLen"),Dt(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 T=c.slice();w.push(T),m+=c.length}return tr(...w)};return(m,w)=>{u(),h(m);let T;for(;!(T=w(p()));)h();return u(),T}}function pn(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 Ii(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),ht=BigInt(1),Ss=BigInt(2),U5=BigInt(3),F5=BigInt(4),$5=BigInt(5),jA=BigInt(7),K5=BigInt(8),XA=BigInt(9),V5=BigInt(16);function qe(r,e){let t=r%e;return t>=Gt?t:e+t}function $e(r,e,t){let n=r;for(;e-- >Gt;)n*=n,n%=t;return n}function M5(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=qe(r,e),n=e,o=Gt,s=ht,i=ht,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!==ht)throw new Error("invert: does not exist");return qe(o,e)}function O2(r,e,t){if(!r.eql(r.sqr(e),t))throw new Error("Cannot find square root")}function H5(r,e){let t=(r.ORDER+ht)/F5,n=r.pow(e,t);return O2(r,n,e),n}function QA(r,e){let t=(r.ORDER-$5)/K5,n=r.mul(e,Ss),o=r.pow(n,t),s=r.mul(e,o),i=r.mul(r.mul(s,Ss),o),a=r.mul(s,r.sub(i,r.ONE));return O2(r,a,e),a}function ZA(r){let e=Ti(r),t=q5(r),n=t(e,e.neg(e.ONE)),o=t(e,n),s=t(e,e.neg(n)),i=(r+jA)/V5;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 O2(a,m,c),m}}function q5(r){if(r<U5)throw new Error("sqrt is not defined for small field");let e=r-ht,t=0;for(;e%Ss===Gt;)e/=Ss,t++;let n=Ss,o=Ti(r);for(;B5(o,n)===1;)if(n++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(t===1)return H5;let s=o.pow(n,e),i=(e+ht)/Ss;return function(c,l){if(c.is0(l))return l;if(B5(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=ht<<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 JA(r){return r%F5===U5?H5:r%K5===$5?QA:r%V5===XA?ZA(r):q5(r)}var W5=(r,e)=>(qe(r,e)&ht)===ht,eI=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function M2(r){let e={ORDER:"bigint",BYTES:"number",BITS:"number"},t=eI.reduce((n,o)=>(n[o]="function",n),e);return pn(r,t),r}function tI(r,e,t){if(t<Gt)throw new Error("invalid exponent, negatives unsupported");if(t===Gt)return r.ONE;if(t===ht)return e;let n=r.ONE,o=e;for(;t>Gt;)t&ht&&(n=r.mul(n,o)),o=r.sqr(o),t>>=ht;return n}function gc(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 B5(r,e){let t=(r.ORDER-ht)/Ss,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 rI(r,e){e!==void 0&&Dt(e);let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}var N2=class{ORDER;BITS;BYTES;isLE;ZERO=Gt;ONE=ht;_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}=rI(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 qe(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&ht)===ht}neg(e){return qe(-e,this.ORDER)}eql(e,t){return e===t}sqr(e){return qe(e*e,this.ORDER)}add(e,t){return qe(e+t,this.ORDER)}sub(e,t){return qe(e-t,this.ORDER)}mul(e,t){return qe(e*t,this.ORDER)}pow(e,t){return tI(this,e,t)}div(e,t){return qe(e*M5(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 M5(e,this.ORDER)}sqrt(e){return this._sqrt||(this._sqrt=JA(this.ORDER)),this._sqrt(this,e)}toBytes(e){return this.isLE?pc(e,this.BYTES):Yu(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?hn(e):Ai(e);if(a&&(c=qe(c,i)),!t&&!this.isValid(c))throw new Error("invalid field element: outside of range 0..ORDER");return c}invertBatch(e){return gc(this,e)}cmov(e,t,n){return n?t:e}};function Ti(r,e={}){return new N2(r,e)}function z5(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 B2(r){let e=z5(r);return e+Math.ceil(e/2)}function U2(r,e,t=!1){ce(r);let n=r.length,o=z5(e),s=B2(e);if(n<16||n<s||n>1024)throw new Error("expected "+s+"-1024 bytes of input, got "+n);let i=t?hn(r):Ai(r),a=qe(i,e-ht)+ht;return t?pc(a,o):Yu(a,o)}var _i=BigInt(0),As=BigInt(1);function yc(r,e){let t=e.negate();return r?t:e}function Is(r,e){let t=gc(r.Fp,e.map(n=>n.Z));return e.map((n,o)=>r.fromAffine(n.toAffine(t[o])))}function X5(r,e){if(!Number.isSafeInteger(r)||r<=0||r>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+r)}function F2(r,e){X5(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1),o=2**r,s=mc(r),i=BigInt(r);return{windows:t,windowSize:n,mask:s,maxNumber:o,shiftBy:i}}function G5(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+=As);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 $2=new WeakMap,Q5=new WeakMap;function K2(r){return Q5.get(r)||1}function Y5(r){if(r!==_i)throw new Error("invalid wNAF")}var Ci=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>_i;)t&As&&(n=n.add(o)),o=o.double(),t>>=As;return n}precomputeWindow(e,t){let{windows:n,windowSize:o}=F2(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=F2(e,this.bits);for(let a=0;a<i.windows;a++){let{nextN:c,offset:l,isZero:d,isNeg:u,isNegF:f,offsetF:h}=G5(n,a,i);n=c,d?s=s.add(yc(f,t[h])):o=o.add(yc(u,t[l]))}return Y5(n),{p:o,f:s}}wNAFUnsafe(e,t,n,o=this.ZERO){let s=F2(e,this.bits);for(let i=0;i<s.windows&&n!==_i;i++){let{nextN:a,offset:c,isZero:l,isNeg:d}=G5(n,i,s);if(n=a,!l){let u=t[c];o=o.add(d?u.negate():u)}}return Y5(n),o}getPrecomputes(e,t,n){let o=$2.get(t);return o||(o=this.precomputeWindow(t,e),e!==1&&(typeof n=="function"&&(o=n(o)),$2.set(t,o))),o}cached(e,t,n){let o=K2(e);return this.wNAF(o,this.getPrecomputes(o,e,n),t)}unsafe(e,t,n,o){let s=K2(e);return s===1?this._unsafeLadder(e,t,o):this.wNAFUnsafe(s,this.getPrecomputes(s,e,n),t,o)}createCache(e,t){X5(t,this.bits),Q5.set(e,t),$2.delete(e)}hasCache(e){return K2(e)!==1}};function Z5(r,e,t,n){let o=e,s=r.ZERO,i=r.ZERO;for(;t>_i||n>_i;)t&As&&(s=s.add(o)),n&As&&(i=i.add(o)),o=o.double(),t>>=As,n>>=As;return{p1:s,p2:i}}function j5(r,e,t){if(e){if(e.ORDER!==r)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return M2(e),e}else return Ti(r,{isLE:t})}function ju(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>_i))throw new Error(`CURVE.${c} must be positive bigint`)}let o=j5(e.p,t.Fp,n),s=j5(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 ki(r,e){return function(n){let o=r(n);return{secretKey:o,publicKey:e(o)}}}var ko=BigInt(0),pt=BigInt(1),V2=BigInt(2),nI=BigInt(8);function oI(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=ju("edwards",r,e,e.FpFnLE),{Fp:n,Fn:o}=t,s=t.CURVE,{h:i}=s;pn(e,{},{uvRatio:"function"});let a=V2<<BigInt(o.BYTES*8)-pt,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:ko}}});if(!oI(n,s,s.Gx,s.Gy))throw new Error("bad curve params: generator point");function d(m,w,T=!1){let I=T?pt:ko;return Co("coordinate "+m,w,I,a),w}function u(m){if(!(m instanceof p))throw new Error("EdwardsPoint expected")}let f=Ii((m,w)=>{let{X:T,Y:I,Z:D}=m,F=m.is0();w==null&&(w=F?nI:n.inv(D));let $=c(T*w),z=c(I*w),S=n.mul(D,w);if(F)return{x:ko,y:pt};if(S!==pt)throw new Error("invZ was invalid");return{x:$,y:z}}),h=Ii(m=>{let{a:w,d:T}=s;if(m.is0())throw new Error("bad point: ZERO");let{X:I,Y:D,Z:F,T:$}=m,z=c(I*I),S=c(D*D),x=c(F*F),L=c(x*x),B=c(z*w),P=c(x*c(B+S)),v=c(L+c(T*c(z*S)));if(P!==v)throw new Error("bad point: equation left != right (1)");let E=c(I*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,pt,c(s.Gx*s.Gy));static ZERO=new p(ko,pt,pt,ko);static Fp=n;static Fn=o;X;Y;Z;T;constructor(w,T,I,D){this.X=d("x",w),this.Y=d("y",T),this.Z=d("z",I,!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:T,y:I}=w||{};return d("x",T),d("y",I),new p(T,I,pt,c(T*I))}static fromBytes(w,T=!1){let I=n.BYTES,{a:D,d:F}=s;w=vs(ce(w,I,"point")),Vn(T,"zip215");let $=vs(w),z=w[I-1];$[I-1]=z&-129;let S=hn($),x=T?a:n.ORDER;Co("point.y",S,ko,x);let L=c(S*S),B=c(L-pt),P=c(F*L-D),{isValid:v,value:E}=l(B,P);if(!v)throw new Error("bad point: invalid y coordinate");let b=(E&pt)===pt,_=(z&128)!==0;if(!T&&E===ko&&_)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,T=!1){return p.fromBytes($n(w),T)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(w=8,T=!0){return g.createCache(this,w),T||this.multiply(V2),this}assertValidity(){h(this)}equals(w){u(w);let{X:T,Y:I,Z:D}=this,{X:F,Y:$,Z:z}=w,S=c(T*z),x=c(F*D),L=c(I*z),B=c($*D);return S===x&&L===B}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:T,Y:I,Z:D}=this,F=c(T*T),$=c(I*I),z=c(V2*c(D*D)),S=c(w*F),x=T+I,L=c(c(x*x)-F-$),B=S+$,P=B-z,v=S-$,E=c(L*P),b=c(B*v),_=c(L*v),M=c(P*B);return new p(E,b,M,_)}add(w){u(w);let{a:T,d:I}=s,{X:D,Y:F,Z:$,T:z}=this,{X:S,Y:x,Z:L,T:B}=w,P=c(D*S),v=c(F*x),E=c(z*I*B),b=c($*L),_=c((D+F)*(S+x)-P-v),M=b-E,O=b+E,k=c(v-T*P),U=c(_*M),K=c(O*k),W=c(_*k),we=c(M*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:T,f:I}=g.cached(this,w,D=>Is(p,D));return Is(p,[T,I])[0]}multiplyUnsafe(w,T=p.ZERO){if(!o.isValid(w))throw new Error("invalid scalar: expected 0 <= sc < curve.n");return w===ko?p.ZERO:this.is0()||w===pt?this:g.unsafe(this,w,I=>Is(p,I),T)}isSmallOrder(){return this.multiplyUnsafe(i).is0()}isTorsionFree(){return g.unsafe(this,s.n).is0()}toAffine(w){return f(this,w)}clearCofactor(){return i===pt?this:this.multiplyUnsafe(i)}toBytes(){let{x:w,y:T}=this.toAffine(),I=n.toBytes(T);return I[I.length-1]|=w&pt?128:0,I}toHex(){return Fn(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let g=new Ci(p,o.BITS);return p.BASE.precompute(8),p}function e8(r,e,t={}){if(typeof e!="function")throw new Error('"hash" function param is required');pn(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||dn,c=t.adjustScalarBytes||(S=>S),l=t.domain||((S,x,L)=>{if(Vn(L,"phflag"),x.length||L)throw new Error("Contexts/pre-hash are not supported");return S});function d(S){return i.create(hn(S))}function u(S){let x=I.secretKey;ce(S,I.secretKey,"secretKey");let L=ce(e(S),2*x,"hashedSecretKey"),B=c(L.slice(0,x)),P=L.slice(x,2*x),v=d(B);return{head:B,prefix:P,scalar:v}}function f(S){let{head:x,prefix:L,scalar:B}=u(S),P=o.multiply(B),v=P.toBytes();return{head:x,prefix:L,scalar:B,point:P,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:B,scalar:P,pointBytes:v}=f(x),E=p(L.context,B,S),b=o.multiply(E).toBytes(),_=p(L.context,b,v,S),M=i.create(E+_*P);if(!i.isValid(M))throw new Error("sign failed: invalid s");let O=tr(b,i.toBytes(M));return ce(O,I.signature,"result")}let m={zip215:!0};function w(S,x,L,B=m){let{context:P,zip215:v}=B,E=I.signature;S=ce(S,E,"signature"),x=ce(x,void 0,"message"),L=ce(L,I.publicKey,"publicKey"),v!==void 0&&Vn(v,"zip215"),n&&(x=n(x));let b=E/2,_=S.subarray(0,b),M=hn(S.subarray(b,E)),O,k,U;try{O=r.fromBytes(L,v),k=r.fromBytes(_,v),U=o.multiplyUnsafe(M)}catch{return!1}if(!v&&O.isSmallOrder())return!1;let K=p(P,k.toBytes(),O.toBytes(),x);return k.add(O.multiplyUnsafe(K)).subtract(U).clearCofactor().is0()}let T=s.BYTES,I={secretKey:T,publicKey:T,signature:2*T,seed:T};function D(S=a(I.seed)){return ce(S,I.seed,"seed")}function F(S){return ys(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=I.publicKey,B=L===32;if(!B&&L!==57)throw new Error("only defined for 25519 and 448");let P=B?s.div(pt+x,pt-x):s.div(x-pt,x+pt);return s.toBytes(P)},toMontgomerySecret(S){let x=I.secretKey;ce(S,x);let L=e(S.subarray(0,x));return c(L).subarray(0,x)}};return Object.freeze({keygen:ki(D,h),getPublicKey:h,sign:g,verify:w,utils:z,Point:r,lengths:I})}var wc=BigInt(0),Pi=BigInt(1),Xu=BigInt(2);function sI(r){return pn(r,{adjustScalarBytes:"function",powPminus2:"function"}),Object.freeze({...r})}function t8(r){let e=sI(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||dn,l=a?255:448,d=a?32:56,u=BigInt(a?9:5),f=BigInt(a?121665:39081),h=a?Xu**BigInt(254):Xu**BigInt(447),p=a?BigInt(8)*Xu**BigInt(251)-Pi:BigInt(4)*Xu**BigInt(445)-Pi,g=h+p+Pi,m=E=>qe(E,t),w=T(u);function T(E){return pc(m(E),d)}function I(E){let b=vs(ce(E,d,"uCoordinate"));return a&&(b[31]&=127),m(hn(b))}function D(E){return hn(o(vs(ce(E,d,"scalar"))))}function F(E,b){let _=L(I(b),D(E));if(_===wc)throw new Error("invalid private or public key received");return T(_)}function $(E){return F(E,w)}let z=$,S=F;function x(E,b,_){let M=m(E*(b-_));return b=m(b-M),_=m(_+M),{x_2:b,x_3:_}}function L(E,b){Co("u",E,wc,t),Co("scalar",b,h,g);let _=b,M=E,O=Pi,k=wc,U=E,K=Pi,W=wc;for(let pe=BigInt(l-1);pe>=wc;pe--){let ue=_>>pe&Pi;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,Re=m(be*be),Je=O-k,Ee=m(Je*Je),it=Re-Ee,ui=U+K,Eu=U-K,Wa=m(Eu*be),x6=m(ui*Je),v6=Wa+x6,S6=Wa-x6;U=m(v6*v6),K=m(M*m(S6*S6)),O=m(Re*Ee),k=m(it*(Re+m(f*it)))}({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 B={secretKey:d,publicKey:d,seed:d},P=(E=c(d))=>(ce(E,B.seed,"seed"),E),v={randomSecretKey:P};return Object.freeze({keygen:ki(P,z),getSharedSecret:S,getPublicKey:z,scalarMult:F,scalarMultBase:$,utils:v,GuBytes:w.slice(),lengths:B})}var iI=BigInt(1),r8=BigInt(2),aI=BigInt(3),cI=BigInt(5),lI=BigInt(8),Qu=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),uI={p:Qu,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:lI,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function o8(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),s=Qu,a=r*r%s*r%s,c=$e(a,r8,s)*a%s,l=$e(c,iI,s)*r%s,d=$e(l,cI,s)*l%s,u=$e(d,e,s)*d%s,f=$e(u,t,s)*u%s,h=$e(f,n,s)*f%s,p=$e(h,o,s)*h%s,g=$e(p,o,s)*h%s,m=$e(g,e,s)*d%s;return{pow_p_5_8:$e(m,r8,s)*r%s,b2:a}}function s8(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}var n8=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function dI(r,e){let t=Qu,n=qe(e*e*e,t),o=qe(n*n*e,t),s=o8(r*o).pow_p_5_8,i=qe(r*n*s,t),a=qe(e*i*i,t),c=i,l=qe(i*n8,t),d=a===r,u=a===qe(-r,t),f=a===qe(-r*n8,t);return d&&(i=c),(u||f)&&(i=l),W5(i,t)&&(i=qe(-i,t)),{isValid:d||u,value:i}}var fI=J5(uI,{uvRatio:dI});function hI(r){return e8(fI,_o,Object.assign({adjustScalarBytes:s8},r))}var bc=hI({});var Ec=(()=>{let r=Qu;return t8({P:r,type:"x25519",powPminus2:e=>{let{pow_p_5_8:t,b2:n}=o8(e);return qe($e(t,aI,r)*n,r)},adjustScalarBytes:s8})})();var Ts=32,fr=64,H2=32;var Ri,i8=(async()=>{try{return await nt.get().subtle.generateKey({name:"Ed25519"},!0,["sign","verify"]),!0}catch{return!1}})();function a8(){let r=bc.utils.randomSecretKey(),e=bc.getPublicKey(r);return{privateKey:wI(r,e),publicKey:e}}async function pI(r,e){let t;r.length===fr?t=r.subarray(0,32):t=r;let n={crv:"Ed25519",kty:"OKP",x:R(r.subarray(32),"base64url"),d:R(t,"base64url"),ext:!0,key_ops:["sign"]},o=await nt.get().subtle.importKey("jwk",n,{name:"Ed25519"},!0,["sign"]),s=await nt.get().subtle.sign({name:"Ed25519"},o,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(s,0,s.byteLength)}function mI(r,e){let t=r.subarray(0,H2);return bc.sign(e instanceof Uint8Array?e:e.subarray(),t)}async function c8(r,e){return Ri==null&&(Ri=await i8),Ri?pI(r,e):mI(r,e)}async function gI(r,e,t){if(r.buffer instanceof ArrayBuffer){let n=await nt.get().subtle.importKey("raw",r.buffer,{name:"Ed25519"},!1,["verify"]);return await nt.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 yI(r,e,t){return bc.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}async function l8(r,e,t){return Ri==null&&(Ri=await i8),Ri?gI(r,e,t):yI(r,e,t)}function wI(r,e){let t=new Uint8Array(fr);for(let n=0;n<H2;n++)t[n]=r[n],t[H2+n]=e[n];return t}function Li(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var xc=class{type="Ed25519";raw;constructor(e){this.raw=Ni(e,Ts)}toMultihash(){return dt.digest(ft(this))}toCID(){return G.createV1(114,this.toMultihash())}toString(){return De.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=l8(this.raw,t,e);return Li(o)?o.then(s=>(n?.signal?.throwIfAborted(),s)):o}},Di=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=Ni(e,fr),this.publicKey=new xc(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}sign(e,t){t?.signal?.throwIfAborted();let n=c8(this.raw,e);return Li(n)?n.then(o=>(t?.signal?.throwIfAborted(),o)):(t?.signal?.throwIfAborted(),n)}};function q2(r){if(r.length>fr){r=Ni(r,fr+Ts);let n=r.subarray(0,fr),o=r.subarray(fr,r.length);return new Di(n,o)}r=Ni(r,fr);let e=r.subarray(0,fr),t=r.subarray(Ts);return new Di(e,t)}function W2(r){return r=Ni(r,Ts),new xc(r)}async function d8(){let{privateKey:r,publicKey:e}=a8();return new Di(r,e)}function Ni(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 bI=Math.pow(2,7),EI=Math.pow(2,14),xI=Math.pow(2,21),z2=Math.pow(2,28),G2=Math.pow(2,35),Y2=Math.pow(2,42),j2=Math.pow(2,49),Te=128,Ot=127;function he(r){if(r<bI)return 1;if(r<EI)return 2;if(r<xI)return 3;if(r<z2)return 4;if(r<G2)return 5;if(r<Y2)return 6;if(r<j2)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Oi(r,e,t=0){switch(he(r)){case 8:e[t++]=r&255|Te,r/=128;case 7:e[t++]=r&255|Te,r/=128;case 6:e[t++]=r&255|Te,r/=128;case 5:e[t++]=r&255|Te,r/=128;case 4:e[t++]=r&255|Te,r>>>=7;case 3:e[t++]=r&255|Te,r>>>=7;case 2:e[t++]=r&255|Te,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function vI(r,e,t=0){switch(he(r)){case 8:e.set(t++,r&255|Te),r/=128;case 7:e.set(t++,r&255|Te),r/=128;case 6:e.set(t++,r&255|Te),r/=128;case 5:e.set(t++,r&255|Te),r/=128;case 4:e.set(t++,r&255|Te),r>>>=7;case 3:e.set(t++,r&255|Te),r>>>=7;case 2:e.set(t++,r&255|Te),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function X2(r,e){let t=r[e],n=0;if(n+=t&Ot,t<Te||(t=r[e+1],n+=(t&Ot)<<7,t<Te)||(t=r[e+2],n+=(t&Ot)<<14,t<Te)||(t=r[e+3],n+=(t&Ot)<<21,t<Te)||(t=r[e+4],n+=(t&Ot)*z2,t<Te)||(t=r[e+5],n+=(t&Ot)*G2,t<Te)||(t=r[e+6],n+=(t&Ot)*Y2,t<Te)||(t=r[e+7],n+=(t&Ot)*j2,t<Te))return n;throw new RangeError("Could not decode varint")}function SI(r,e){let t=r.get(e),n=0;if(n+=t&Ot,t<Te||(t=r.get(e+1),n+=(t&Ot)<<7,t<Te)||(t=r.get(e+2),n+=(t&Ot)<<14,t<Te)||(t=r.get(e+3),n+=(t&Ot)<<21,t<Te)||(t=r.get(e+4),n+=(t&Ot)*z2,t<Te)||(t=r.get(e+5),n+=(t&Ot)*G2,t<Te)||(t=r.get(e+6),n+=(t&Ot)*Y2,t<Te)||(t=r.get(e+7),n+=(t&Ot)*j2,t<Te))return n;throw new RangeError("Could not decode varint")}function Mt(r,e,t=0){return e==null&&(e=Ge(he(r))),e instanceof Uint8Array?Oi(r,e,t):vI(r,e,t)}function hr(r,e=0){return r instanceof Uint8Array?X2(r,e):SI(r,e)}var Q2=new Float32Array([-0]),Po=new Uint8Array(Q2.buffer);function f8(r,e,t){Q2[0]=r,e[t]=Po[0],e[t+1]=Po[1],e[t+2]=Po[2],e[t+3]=Po[3]}function h8(r,e){return Po[0]=r[e],Po[1]=r[e+1],Po[2]=r[e+2],Po[3]=r[e+3],Q2[0]}var Z2=new Float64Array([-0]),Bt=new Uint8Array(Z2.buffer);function p8(r,e,t){Z2[0]=r,e[t]=Bt[0],e[t+1]=Bt[1],e[t+2]=Bt[2],e[t+3]=Bt[3],e[t+4]=Bt[4],e[t+5]=Bt[5],e[t+6]=Bt[6],e[t+7]=Bt[7]}function m8(r,e){return Bt[0]=r[e],Bt[1]=r[e+1],Bt[2]=r[e+2],Bt[3]=r[e+3],Bt[4]=r[e+4],Bt[5]=r[e+5],Bt[6]=r[e+6],Bt[7]=r[e+7],Z2[0]}var AI=BigInt(Number.MAX_SAFE_INTEGER),II=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 _s;if(e<AI&&e>II)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>g8&&(o=0n,++n>g8&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return _s;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):_s}},_s=new pr(0,0);_s.toBigInt=function(){return 0n};_s.zzEncode=_s.zzDecode=function(){return this};_s.length=function(){return 1};var g8=4294967296n;function y8(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 w8(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 Hr(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Zu(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var em=class{buf;pos;len;_slice=Uint8Array.prototype.subarray;constructor(e){this.buf=e,this.pos=0,this.len=e.length}uint32(){let e=4294967295;if(e=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(e=(e|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return e;if((this.pos+=5)>this.len)throw this.pos=this.len,Hr(this,10);return e}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw Hr(this,4);return Zu(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Hr(this,4);return Zu(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Hr(this,4);let e=h8(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Hr(this,4);let e=m8(this.buf,this.pos);return this.pos+=8,e}bytes(){let e=this.uint32(),t=this.pos,n=this.pos+e;if(n>this.len)throw Hr(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return w8(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Hr(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Hr(this);while((this.buf[this.pos++]&128)!==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 Hr(this);if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(this.buf[this.pos++]&127)<<t*7)>>>0,e}if(this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw Hr(this);if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw Hr(this,8);let e=Zu(this.buf,this.pos+=4),t=Zu(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=X2(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 tm(r){return new em(r instanceof Uint8Array?r:r.subarray())}function te(r,e,t){let n=tm(r);return e.decode(n,void 0,t)}function rm(r){let e=r??8192,t=e>>>1,n,o=e;return function(i){if(i<1||i>t)return Ge(i);o+i>e&&(n=Ge(e),o=0);let a=n.subarray(o,o+=i);return(o&7)!==0&&(o=(o|7)+1),a}}var Cs=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function nm(){}var sm=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},TI=rm();function _I(r){return globalThis.Buffer!=null?Ge(r):TI(r)}var Sc=class{len;head;tail;states;constructor(){this.len=0,this.head=new Cs(nm,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new Cs(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new im((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(Oi,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(om,1,e?1:0)}fixed32(e){return this._push(vc,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=pr.fromBigInt(e);return this._push(vc,4,t.lo)._push(vc,4,t.hi)}fixed64Number(e){let t=pr.fromNumber(e);return this._push(vc,4,t.lo)._push(vc,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(f8,4,e)}double(e){return this._push(p8,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(om,1,0):this.uint32(t)._push(kI,t,e)}string(e){let t=y8(e);return t!==0?this.uint32(t)._push(J2,t,e):this._push(om,1,0)}fork(){return this.states=new sm(this),this.head=this.tail=new Cs(nm,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 Cs(nm,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=_I(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function om(r,e,t){e[t]=r&255}function CI(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var im=class extends Cs{next;constructor(e,t){super(CI,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 vc(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 kI(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(Sc.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(PI,e,r),this},Sc.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(RI,e,r),this});function PI(r,e,t){e.set(r,t)}function RI(r,e,t){r.length<40?J2(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(C(r),t)}function am(){return new Sc}function re(r,e){let t=am();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Mi;(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"})(Mi||(Mi={}));function ed(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function We(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 ed("enum",Mi.VARINT,t,n)}function ne(r,e){return ed("message",Mi.LENGTH_DELIMITED,r,e)}var Ne=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},Ac=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var Be;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1",r.ECDSA="ECDSA"})(Be||(Be={}));var cm;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1",r[r.ECDSA=3]="ECDSA"})(cm||(cm={}));(function(r){r.codec=()=>We(cm)})(Be||(Be={}));var mn;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Be.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=Be.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)})(mn||(mn={}));var Ic;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Be.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=Be.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)})(Ic||(Ic={}));function Yt(r){if(isNaN(r)||r<=0)throw new A("random bytes length must be a Number bigger than 0");return dn(r)}var _c={};et(_c,{MAX_RSA_KEY_SIZE:()=>lm,generateRSAKeyPair:()=>wm,jwkToJWKKeyPair:()=>S8,jwkToPkcs1:()=>OI,jwkToPkix:()=>hm,jwkToRSAPrivateKey:()=>ym,pkcs1MessageToJwk:()=>dm,pkcs1MessageToRSAPrivateKey:()=>td,pkcs1ToJwk:()=>NI,pkcs1ToRSAPrivateKey:()=>pm,pkixMessageToJwk:()=>fm,pkixMessageToRSAPublicKey:()=>gm,pkixToJwk:()=>MI,pkixToRSAPublicKey:()=>mm});var Bi=class{type="RSA";jwk;_raw;_multihash;constructor(e,t){this.jwk=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=_c.jwkToPkix(this.jwk)),this._raw}toMultihash(){return this._multihash}toCID(){return G.createV1(114,this._multihash)}toString(){return De.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 v8(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=_c.jwkToPkcs1(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}sign(e,t){return x8(this.jwk,e,t)}};var lm=8192,um=18,LI=1062,DI=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function NI(r){let e=Ir(r);return dm(e)}function dm(r){return{n:R(r[1],"base64url"),e:R(r[2],"base64url"),d:R(r[3],"base64url"),p:R(r[4],"base64url"),q:R(r[5],"base64url"),dp:R(r[6],"base64url"),dq:R(r[7],"base64url"),qi:R(r[8],"base64url"),kty:"RSA"}}function OI(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 Kr([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 MI(r){let e=Ir(r,{offset:0});return fm(e)}function fm(r){let e=Ir(r[1],{offset:0});return{kty:"RSA",n:R(e[0],"base64url"),e:R(e[1],"base64url")}}function hm(r){if(r.n==null||r.e==null)throw new A("JWK was missing components");return Kr([DI,lc(Kr([zt(C(r.n,"base64url")),zt(C(r.e,"base64url"))]))]).subarray()}function pm(r){let e=Ir(r);return td(e)}function td(r){let e=dm(r);return ym(e)}function mm(r,e){if(r.byteLength>=LI)throw new Nn("Key size is too large");let t=Ir(r,{offset:0});return gm(t,r,e)}function gm(r,e,t){let n=fm(r);if(t==null){let o=Tr(mn.encode({Type:Be.RSA,Data:e}));t=Wt(um,o)}return new Bi(n,t)}function ym(r){if(I8(r)>lm)throw new A("Key size is too large");let e=S8(r),t=Tr(mn.encode({Type:Be.RSA,Data:hm(e.publicKey)})),n=Wt(um,t);return new Tc(e.privateKey,new Bi(e.publicKey,n))}async function wm(r){if(r>lm)throw new A("Key size is too large");let e=await A8(r),t=Tr(mn.encode({Type:Be.RSA,Data:hm(e.publicKey)})),n=Wt(um,t);return new Tc(e.privateKey,new Bi(e.publicKey,n))}function S8(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 A8(r,e){let t=await nt.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 BI(t,e);return{privateKey:n[0],publicKey:n[1]}}async function x8(r,e,t){let n=await nt.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]);t?.signal?.throwIfAborted();let o=await nt.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 v8(r,e,t,n){let o=await nt.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);n?.signal?.throwIfAborted();let s=await nt.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},o,e,t instanceof Uint8Array?t:t.subarray());return n?.signal?.throwIfAborted(),s}async function BI(r,e){if(r.privateKey==null||r.publicKey==null)throw new A("Private and public key are required");let t=await Promise.all([nt.get().subtle.exportKey("jwk",r.privateKey),nt.get().subtle.exportKey("jwk",r.publicKey)]);return e?.signal?.throwIfAborted(),t}function I8(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 rd=class{oHash;iHash;blockLen;outputLen;finished=!1;destroyed=!1;constructor(e,t){if(Un(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),Nt(o)}update(e){return Si(this),this.iHash.update(e),this}digestInto(e){Si(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()}},Ro=(r,e,t)=>new rd(r,e).update(t).digest();Ro.create=(r,e)=>new rd(r,e);var T8=(r,e)=>(r+(r>=0?e:-e)/_8)/e;function UI(r,e,t){let[[n,o],[s,i]]=e,a=T8(i*r,t),c=T8(-o*r,t),l=r-a*n-c*s,d=-a*o-c*i,u=l<qn,f=d<qn;u&&(l=-l),f&&(d=-d);let h=mc(Math.ceil(D2(t)/2))+Ui;if(l<qn||l>=h||d<qn||d>=h)throw new Error("splitScalar (endomorphism): failed, k="+r);return{k1neg:u,k1:l,k2neg:f,k2:d}}function Em(r){if(!["compact","recovered","der"].includes(r))throw new Error('Signature format must be "compact", "recovered", or "der"');return r}function bm(r,e){let t={};for(let n of Object.keys(e))t[n]=r[n]===void 0?e[n]:r[n];return Vn(t.lowS,"lowS"),Vn(t.prehash,"prehash"),t.format!==void 0&&Em(t.format),t}var xm=class extends Error{constructor(e=""){super(e)}},Lo={Err:xm,_tlv:{encode:(r,e)=>{let{Err:t}=Lo;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=hc(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let s=n>127?hc(o.length/2|128):"";return hc(r)+s+o+e},decode(r,e){let{Err:t}=Lo,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}=Lo;if(r<qn)throw new e("integer: negative integers are not allowed");let t=hc(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}=Lo;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 Ai(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Lo,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}=Lo,n=e.encode(2,t.encode(r.r)),o=e.encode(2,t.encode(r.s)),s=n+o;return e.encode(48,s)}},qn=BigInt(0),Ui=BigInt(1),_8=BigInt(2),nd=BigInt(3),FI=BigInt(4);function C8(r,e={}){let t=ju("weierstrass",r,e),{Fp:n,Fn:o}=t,s=t.CURVE,{h:i,n:a}=s;pn(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=P8(n,o);function d(){if(!n.isOdd)throw new Error("compression is not supported: Field does not have .isOdd()")}function u(P,v,E){let{x:b,y:_}=v.toAffine(),M=n.toBytes(b);if(Vn(E,"isCompressed"),E){d();let O=!n.isOdd(_);return tr(k8(O),M)}else return tr(Uint8Array.of(4),M,n.toBytes(_))}function f(P){ce(P,void 0,"Point");let{publicKey:v,publicKeyUncompressed:E}=l,b=P.length,_=P[0],M=P.subarray(1);if(b===v&&(_===2||_===3)){let O=n.fromBytes(M);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(M.subarray(0,O)),U=n.fromBytes(M.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(P){let v=n.sqr(P),E=n.mul(v,P);return n.add(n.add(E,n.mul(P,s.a)),s.b)}function m(P,v){let E=n.sqr(v),b=g(P);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,nd),FI),T=n.mul(n.sqr(s.b),BigInt(27));if(n.is0(n.add(w,T)))throw new Error("bad curve params: a or b");function I(P,v,E=!1){if(!n.isValid(v)||E&&n.is0(v))throw new Error(`bad point coordinate ${P}`);return v}function D(P){if(!(P instanceof x))throw new Error("Weierstrass Point expected")}function F(P){if(!c||!c.basises)throw new Error("no endo");return UI(P,c.basises,o.ORDER)}let $=Ii((P,v)=>{let{X:E,Y:b,Z:_}=P;if(n.eql(_,n.ONE))return{x:E,y:b};let M=P.is0();v==null&&(v=M?n.ONE:n.inv(_));let O=n.mul(E,v),k=n.mul(b,v),U=n.mul(_,v);if(M)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=Ii(P=>{if(P.is0()){if(e.allowInfinityPoint&&!n.is0(P.Y))return;throw new Error("bad point: ZERO")}let{x:v,y:E}=P.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(!P.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});function S(P,v,E,b,_){return E=new x(n.mul(E.X,P),E.Y,E.Z),v=yc(b,v),E=yc(_,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=I("x",v),this.Y=I("y",E,!0),this.Z=I("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($n(v))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(v=8,E=!0){return B.createCache(this,v),E||this.multiply(nd),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:M,Y:O,Z:k}=v,U=n.eql(n.mul(E,k),n.mul(M,_)),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,nd),{X:_,Y:M,Z:O}=this,k=n.ZERO,U=n.ZERO,K=n.ZERO,W=n.mul(_,_),we=n.mul(M,M),pe=n.mul(O,O),ue=n.mul(_,M);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(M,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:M,Y:O,Z:k}=v,U=n.ZERO,K=n.ZERO,W=n.ZERO,we=s.a,pe=n.mul(s.b,nd),ue=n.mul(E,M),be=n.mul(b,O),Re=n.mul(_,k),Je=n.add(E,b),Ee=n.add(M,O);Je=n.mul(Je,Ee),Ee=n.add(ue,be),Je=n.sub(Je,Ee),Ee=n.add(E,_);let it=n.add(M,k);return Ee=n.mul(Ee,it),it=n.add(ue,Re),Ee=n.sub(Ee,it),it=n.add(b,_),U=n.add(O,k),it=n.mul(it,U),U=n.add(be,Re),it=n.sub(it,U),W=n.mul(we,Ee),U=n.mul(pe,Re),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),Re=n.mul(we,Re),Ee=n.mul(pe,Ee),be=n.add(be,Re),Re=n.sub(ue,Re),Re=n.mul(we,Re),Ee=n.add(Ee,Re),ue=n.mul(be,Ee),K=n.add(K,ue),ue=n.mul(it,Ee),U=n.mul(Je,U),U=n.sub(U,ue),ue=n.mul(Je,be),W=n.mul(it,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,_,M=O=>B.cached(this,O,k=>Is(x,k));if(E){let{k1neg:O,k1:k,k2neg:U,k2:K}=F(v),{p:W,f:we}=M(k),{p:pe,f:ue}=M(K);_=we.add(ue),b=S(E.beta,W,pe,O,U)}else{let{p:O,f:k}=M(v);b=O,_=k}return Is(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===qn||b.is0())return x.ZERO;if(v===Ui)return b;if(B.hasCache(this))return this.multiply(v);if(E){let{k1neg:_,k1:M,k2neg:O,k2:k}=F(v),{p1:U,p2:K}=Z5(x,b,M,k);return S(E.beta,U,K,_,O)}else return B.unsafe(b,v)}toAffine(v){return $(this,v)}isTorsionFree(){let{isTorsionFree:v}=e;return i===Ui?!0:v?v(x,this):B.unsafe(this,a).is0()}clearCofactor(){let{clearCofactor:v}=e;return i===Ui?this:v?v(x,this):this.multiplyUnsafe(i)}isSmallOrder(){return this.multiplyUnsafe(i).is0()}toBytes(v=!0){return Vn(v,"isCompressed"),this.assertValidity(),h(x,this,v)}toHex(v=!0){return Fn(this.toBytes(v))}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let L=o.BITS,B=new Ci(x,e.endo?Math.ceil(L/2):L);return x.BASE.precompute(8),x}function k8(r){return Uint8Array.of(r?2:3)}function P8(r,e){return{secretKey:e.BYTES,publicKey:1+r.BYTES,publicKeyUncompressed:1+2*r.BYTES,publicKeyHasPrefix:!0,signature:2*e.BYTES}}function $I(r,e={}){let{Fn:t}=r,n=e.randomBytes||dn,o=Object.assign(P8(r.Fp,t),{seed:B2(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 U2(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(!ys(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=ki(a,c);return Object.freeze({getPublicKey:c,getSharedSecret:d,keygen:f,Point:r,utils:u,lengths:o})}function R8(r,e,t={}){Un(e),pn(t,{},{hmac:"function",lowS:"boolean",randomBytes:"function",bits2int:"function",bits2int_modN:"function"}),t=Object.assign({},t);let n=t.randomBytes||dn,o=t.hmac||((E,b)=>Ro(e,E,b)),{Fp:s,Fn:i}=r,{ORDER:a,BITS:c}=i,{keygen:l,getPublicKey:d,getSharedSecret:u,utils:f,lengths:h}=$I(r,t),p={prehash:!0,lowS:typeof t.lowS=="boolean"?t.lowS:!0,format:"compact",extraEntropy:!1},g=a*_8<s.ORDER;function m(E){let b=a>>Ui;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 T(){if(g)throw new Error('"recovered" sig type is not supported for cofactor >2 curves')}function I(E,b){Em(b);let _=h.signature,M=b==="compact"?_:b==="recovered"?_+1:void 0;return ce(E,M)}class D{r;s;recovery;constructor(b,_,M){if(this.r=w("r",b),this.s=w("s",_),M!=null){if(T(),![0,1,2,3].includes(M))throw new Error("invalid recovery id");this.recovery=M}Object.freeze(this)}static fromBytes(b,_=p.format){I(b,_);let M;if(_==="der"){let{r:K,s:W}=Lo.toSig(ce(b));return new D(K,W)}_==="recovered"&&(M=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),M)}static fromHex(b,_){return this.fromBytes($n(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:M}=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(k8((O&1)===0),U)),W=i.inv(k),we=$(ce(b,void 0,"msgHash")),pe=i.create(-we*W),ue=i.create(M*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(Em(b),b==="der")return $n(Lo.hexFromSig(this));let{r:_,s:M}=this,O=i.toBytes(_),k=i.toBytes(M);return b==="recovered"?(T(),tr(Uint8Array.of(this.assertRecovery()),O,k)):tr(O,k)}toHex(b){return Fn(this.toBytes(b))}}let F=t.bits2int||function(b){if(b.length>8192)throw new Error("input is too large");let _=Ai(b),M=b.length*8-c;return M>0?_>>BigInt(M):_},$=t.bits2int_modN||function(b){return i.create(F(b))},z=mc(c);function S(E){return Co("num < 2^"+c,E,qn,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:M,prehash:O,extraEntropy:k}=bm(_,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 Re=F(be);if(!i.isValidNot0(Re))return;let Je=i.inv(Re),Ee=r.BASE.multiply(Re).toAffine(),it=i.create(Ee.x);if(it===qn)return;let ui=i.create(Je*i.create(pe+it*K));if(ui===qn)return;let Eu=(Ee.x===it?0:2)|Number(Ee.y&Ui),Wa=ui;return M&&m(ui)&&(Wa=i.neg(ui),Eu^=1),new D(it,Wa,g?void 0:Eu)}return{seed:we,k2sig:ue}}function B(E,b,_={}){let{seed:M,k2sig:O}=L(E,b,_);return O5(e.outputLen,i.BYTES,o)(M,O).toBytes(_.format)}function P(E,b,_,M={}){let{lowS:O,prehash:k,format:U}=bm(M,p);if(_=ce(_,void 0,"publicKey"),b=x(b,k),!ys(E)){let K=E instanceof D?", use sig.toBytes()":"";throw new Error("verify expects Uint8Array signature"+K)}I(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),Re=i.create(ue*be),Je=i.create(we*be),Ee=r.BASE.multiplyUnsafe(Re).add(W.multiplyUnsafe(Je));return Ee.is0()?!1:i.create(Ee.x)===we}catch{return!1}}function v(E,b,_={}){let{prehash:M}=bm(_,p);return b=x(b,M),D.fromBytes(E,"recovered").recoverPublicKey(b).toBytes()}return Object.freeze({keygen:l,getPublicKey:d,getSharedSecret:u,utils:f,lengths:h,Point:r,sign:B,verify:P,recoverPublicKey:v,Signature:D,hash:e})}var Sm={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt(1),a:BigInt(0),b:BigInt(7),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")},KI={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),basises:[[BigInt("0x3086d221a7d46bcde86c90e49284eb15"),-BigInt("0xe4437ed6010e88286f547fa90abfe4c3")],[BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),BigInt("0x3086d221a7d46bcde86c90e49284eb15")]]};var L8=BigInt(2);function VI(r){let e=Sm.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=$e(d,t,e)*d%e,f=$e(u,t,e)*d%e,h=$e(f,L8,e)*l%e,p=$e(h,o,e)*h%e,g=$e(p,s,e)*p%e,m=$e(g,a,e)*g%e,w=$e(m,c,e)*m%e,T=$e(w,a,e)*g%e,I=$e(T,t,e)*d%e,D=$e(I,i,e)*p%e,F=$e(D,n,e)*l%e,$=$e(F,L8,e);if(!vm.eql(vm.sqr($),r))throw new Error("Cannot find square root");return $}var vm=Ti(Sm.p,{sqrt:VI}),HI=C8(Sm,{Fp:vm,endo:KI}),qr=R8(HI,Tr);var D8=32;function N8(r,e,t){let n=ze.digest(e instanceof Uint8Array?e:e.subarray());if(Li(n))return n.then(({digest:o})=>(t?.signal?.throwIfAborted(),qr.sign(o,r,{prehash:!1,format:"der"}))).catch(o=>{throw o.name==="AbortError"?o:new sc(String(o))});try{return qr.sign(n.digest,r,{prehash:!1,format:"der"})}catch(o){throw new sc(String(o))}}function O8(r,e,t,n){let o=ze.digest(t instanceof Uint8Array?t:t.subarray());if(Li(o))return o.then(({digest:s})=>(n?.signal?.throwIfAborted(),qr.verify(e,s,r,{prehash:!1,format:"der"}))).catch(s=>{throw s.name==="AbortError"?s:new ic(String(s))});try{return n?.signal?.throwIfAborted(),qr.verify(e,o.digest,r,{prehash:!1,format:"der"})}catch(s){throw new ic(String(s))}}var Cc=class{type="secp256k1";raw;_key;constructor(e){this._key=U8(e),this.raw=M8(this._key)}toMultihash(){return dt.digest(ft(this))}toCID(){return G.createV1(114,this.toMultihash())}toString(){return De.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 O8(this._key,t,e,n)}},kc=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=B8(e),this.publicKey=new Cc(t??F8(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}sign(e,t){return N8(this.raw,e,t)}};function Am(r){return new kc(r)}function Im(r){return new Cc(r)}async function $8(){let r=qI();return new kc(r)}function M8(r){return qr.Point.fromBytes(r).toBytes()}function B8(r){try{return qr.getPublicKey(r,!0),r}catch(e){throw new za(String(e))}}function U8(r){try{return qr.Point.fromBytes(r),r}catch(e){throw new Nn(String(e))}}function F8(r){try{return qr.getPublicKey(r,!0)}catch(e){throw new za(String(e))}}function qI(){return qr.utils.randomSecretKey()}async function od(r,e){if(r==="Ed25519")return d8();if(r==="secp256k1")return $8();if(r==="RSA")return wm(WI(e));if(r==="ECDSA")return w5(zI(e));throw new Fr}function tt(r,e){let{Type:t,Data:n}=mn.decode(r),o=n??new Uint8Array;switch(t){case Be.RSA:return mm(o,e);case Be.Ed25519:return W2(o);case Be.secp256k1:return Im(o);case Be.ECDSA:return v2(o);default:throw new Fr}}function sd(r){let{Type:e,Data:t}=mn.decode(r.digest),n=t??new Uint8Array;switch(e){case Be.Ed25519:return W2(n);case Be.secp256k1:return Im(n);case Be.ECDSA:return v2(n);default:throw new Fr}}function ft(r){return mn.encode({Type:Be[r.type],Data:r.raw})}function K8(r){let e=Ic.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Be.RSA:return pm(t);case Be.Ed25519:return q2(t);case Be.secp256k1:return Am(t);case Be.ECDSA:return h5(t);default:throw new Fr}}function V8(r){if(r.byteLength===fr)return q2(r);if(r.byteLength===D8)return Am(r);let e=Ir(r),t=e[2]?.[0];if(t===o5||t===s5||t===i5)return x2(e);if(e.length>8)return td(e);throw new A("Could not extract private key from raw bytes")}function ks(r){return Ic.encode({Type:Be[r.type],Data:r.raw})}function WI(r){return r==null?2048:parseInt(r,10)}function zI(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 Pc=Uint32Array.from([1732584193,4023233417,2562383102,271733878,3285377520]),Do=new Uint32Array(80),Tm=class extends bs{A=Pc[0]|0;B=Pc[1]|0;C=Pc[2]|0;D=Pc[3]|0;E=Pc[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)Do[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)Do[c]=Hu(Do[c-3]^Do[c-8]^Do[c-14]^Do[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=qu(o,s,i),d=1518500249):c<40?(l=o^s^i,d=1859775393):c<60?(l=Wu(o,s,i),d=2400959708):(l=o^s^i,d=3395469782);let u=Hu(n,5)+l+a+d+Do[c]|0;a=i,i=s,s=Hu(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(){Nt(Do)}destroy(){this.set(0,0,0,0,0),Nt(this.buffer)}},H8=uc(()=>new Tm);function q8(r,e,t,n){Un(r);let o=S5({dkLen:32,asyncTick:10},n),{c:s,dkLen:i,asyncTick:a}=o;if(Dt(s,"c"),Dt(i,"dkLen"),Dt(a,"asyncTick"),s<1)throw new Error("iterations (c) must be >= 1");let c=S2(e,"password"),l=S2(t,"salt"),d=new Uint8Array(i),u=Ro.create(r,c),f=u._cloneInto().update(l);return{c:s,dkLen:i,asyncTick:a,DK:d,PRF:u,PRFSalt:f}}function W8(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),Nt(o),t}function z8(r,e,t,n){let{c:o,dkLen:s,DK:i,PRF:a,PRFSalt:c}=q8(r,e,t,n),l,d=new Uint8Array(4),u=ws(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 W8(a,c,i,l,f)}async function id(r,e,t,n){let{c:o,dkLen:s,asyncTick:i,DK:a,PRF:c,PRFSalt:l}=q8(r,e,t,n),d,u=new Uint8Array(4),f=ws(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 v5(o-1,i,()=>{c._cloneInto(d).update(h).digestInto(h);for(let w=0;w<m.length;w++)m[w]^=h[w]})}return W8(c,l,a,d,h)}var G8={sha1:H8,"sha2-256":Tr,"sha2-512":_o};function Rc(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(G8).join(" / ");throw new A(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let s=G8[o],i=z8(s,r,e,{c:t,dkLen:n});return rt.encode(i).substring(1)}var _m={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},Y8={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},j8=new globalThis.TextEncoder;function GI(r,e){let t=_m[e],n=Y8[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function YI(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=_m[e],o=Y8[e],s=r;for(;s.length>0;){let i=j8.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 Cm(r,{size:e=32,utf8Buffer:t}={}){if(!_m[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 YI(r,e,t);r=j8.encode(r)}return GI(r,e)}var Lc={hash:r=>Number(Cm(r,{size:32})),hashV:(r,e)=>jI(Lc.hash(r,e))};function jI(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),C(e,"base16")}var km=64,Wr=class{fp;h;seed;constructor(e,t,n,o=2){if(o>km)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 Ps(r,e){return Math.floor(Math.random()*(e-r))+r}var Rs=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof Wr))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof Wr))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 Wr))throw new TypeError("Invalid Fingerprint");let t=Ps(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof Wr))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var XI=500,Dc=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??Lc,this.seed=e.seed??Ps(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=C(e));let t=new Wr(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 Rs(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new Rs(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let s=[n,o],i=s[Ps(0,s.length-1)];this.buckets[i]==null&&(this.buckets[i]=new Rs(this.bucketSize));for(let a=0;a<XI;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 Rs(this.bucketSize)),this.buckets[i].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=C(e));let t=new Wr(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 Wr(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}},QI={1:.5,2:.84,4:.95,8:.98};function ZI(r=.001){return r>.002?2:r>1e-5?4:8}function X8(r,e=.001){let t=ZI(e),n=QI[t],o=Math.round(r/n),s=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),km);return{filterSize:o,bucketSize:t,fingerprintSize:s}}var ad=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??Lc,this.seed=e.seed??Ps(0,Math.pow(2,10)),this.filterSeries=[new Dc({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 Dc({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 Et(r,e=.001,t){return new ad({...X8(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 cd=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 Q8=45,JI=15,Fi=new cd;function ld(r){if(!(r.length>JI))return Fi.new(r).parseWith(()=>Fi.readIPv4Addr())}function ud(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>Q8))return Fi.new(r).parseWith(()=>Fi.readIPv6Addr())}function $i(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>Q8)return;let t=Fi.new(r).parseWith(()=>Fi.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 Z8(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 Pm(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 e7(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 t7(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,M$=parseInt("0xFFFF",16),eT=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function Nc(r,e){e.length===Ds&&r.length===Ls&&Z8(e,0,11)&&(e=e.slice(12)),e.length===Ls&&r.length===Ds&&J8(r,eT,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 r7(r,e){if(typeof e=="string"&&(e=$i(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 Rm(r){let[e,t]=r.split("/");if(!e||!t)throw new Error("Failed to parse given CIDR: "+r);let n=Ls,o=ld(e);if(o==null&&(n=Ds,o=ud(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=Lm(s,8*n);return{network:Nc(o,i),mask:i}}function Lm(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}=Rm(e));else{let n=$i(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=$i(t);if(s==null)throw new Error("Failed to parse mask");this.mask=s}else this.mask=Lm(o,8*n.length);this.network=Nc(n,this.mask)}}contains(e){return r7({network:this.network,mask:this.mask},e)}toString(){let e=e7(this.mask),t=e!==-1?String(e):t7(this.mask);return Pm(this.network)+"/"+t}};function n7(r,e){return new Ns(r).contains(e)}function dd(r){try{let e=oe(r);switch(e.type){case"ip6":return n7("2000::/3",e.host);default:return!1}}catch{return!1}}function o7(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 s7(r){return/^127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(r)||/^::1$/.test(r)}function Oc(r){try{let e=oe(r);switch(e.type){case"ip4":case"ip6":return s7(e.host);default:return!1}}catch{return!1}}function xt(r){try{return oe(r),!0}catch{return!1}}function zr(r){return!!ld(r)}function fd(r){return!!ud(r)}var a7=Ln(i7(),1),tT=["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"],rT=tT.map(r=>new a7.Netmask(r));function Dm(r){for(let e of rT)if(e.contains(r))return!0;return!1}function nT(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function oT(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 Dm(o)}function sT(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function iT(r){let e=r.split(":"),t=e[e.length-1];return Dm(t)}function aT(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 Ki(r){if(zr(r))return Dm(r);if(nT(r))return oT(r);if(sT(r))return iT(r);if(fd(r))return aT(r)}function Qe(r){try{let e=oe(r);switch(e.type){case"ip4":case"ip6":return Ki(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 hd=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}},Vi=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new hd(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 hd(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 Nm=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function vt(r={}){return cT(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 cT(r,e){e=e??{};let t=e.onEnd,n=new Vi,o,s,i,a=fe(),c=async()=>{try{return n.isEmpty()?i?{done:!0}:await new Promise((m,w)=>{s=T=>{s=null,n.push(T);try{m(r(n))}catch(I){w(I)}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 Vi,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 Vi,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 T,I;w!=null&&(T=new Promise((D,F)=>{I=()=>{F(new Nm)},w.addEventListener("abort",I)}));try{await Promise.race([a.promise,T])}finally{I!=null&&w!=null&&w?.removeEventListener("abort",I)}}},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 lT=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 uT(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}=lT(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=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function _r(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=uT(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}function Wn(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 pd=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}},md=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}},Os=class extends Error{static name="UnexpectedEOFError";name="UnexpectedEOFError"},gd=class extends Error{static name="MaxEarlyStreamsError";name="MaxEarlyStreamsError"},yd=class extends Error{static name="StreamClosedError";name="StreamClosedError"};function dT(r){return r.reason}async function Pe(r,e,t){if(e==null)return r;let n=t?.translateError??dT;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 wd=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 Vt)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function fT(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var bd=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=fT(),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 Vt),this.cleanup())}async join(e={}){let t=new wd(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 St=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=Wn(this.emitEmpty.bind(this),1),this.emitIdle=Wn(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 md;let n=new bd(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 Vt)}),this.clear()}async onEmpty(e){this.size!==0&&await _r(this,"empty",e)}async onSizeLessThan(e,t){this.size<e||await _r(this,"next",{...t,filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await _r(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=vt({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 Vt("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 hT=Math.pow(2,20)*4,No=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??hT,this.maxWriteBufferLength=e.maxWriteBufferLength,this.maxMessageSize=e.maxMessageSize,this.readBuffer=new X,this.writeBuffer=new X,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 yd)};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=vt(),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 cn(`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 _u(e))}}pause(){if(this.readStatus==="closed"||this.readStatus==="closing")throw new cn("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 cn("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 cn(`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 cn(`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 fi;this.dispatchEvent(new Cu(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 xo))}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 X(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 Tu(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 Ya(`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 Ya(`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 Oo=class extends No{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 _r(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 _r(this,"drain",{...e,rejectionEvents:["close"]})),await this.sendClose(e),this.onTransportClosed())}};function Ed(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Mo=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 Ed(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 gd(`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 Bo=class extends No{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 _r(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 _r(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 Hi=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 pT=1.2,mT=2,gT=5e3,yT=6e4,wT=5e3,Gr=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;maxTimeout;constructor(e={}){let t=e.interval??wT;this.success=new Hi(t),this.failure=new Hi(t),this.next=new Hi(t),this.failureMultiplier=e.failureMultiplier??mT,this.timeoutMultiplier=e.timeoutMultiplier??pT,this.minTimeout=e.minTimeout??gT,this.maxTimeout=e.maxTimeout??yT,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 At=class extends Error{static name="InvalidMultiaddrError";name="InvalidMultiaddrError"},zn=class extends Error{static name="ValidationError";name="ValidationError"},xd=class extends Error{static name="InvalidParametersError";name="InvalidParametersError"},vd=class extends Error{static name="UnknownProtocolError";name="UnknownProtocolError"};function Mm(r){return e=>R(e,r)}function Bm(r){return e=>C(e,r)}function qi(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 c7(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 Oe([t,o],t.length+o.length)}function l7(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=ut.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 Oe([t,o],t.length+o.length)}function Um(r){let e=r.subarray(0,r.length-2),t=r.subarray(r.length-2),n=R(e,"base32"),o=qi(t);return`${n}:${o}`}var Fm=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 At("Invalid byte value in IP address");e[n]=o}),e},u7=function(r){let e=0;r=r.toString().trim();let t=r.split(":",8),n;for(n=0;n<t.length;n++){let s=zr(t[n]),i;s&&(i=Fm(t[n]),t[n]=R(i.subarray(0,2),"base16")),i!=null&&++n<8&&t.splice(n,0,R(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 At("Invalid byte value in IP address");o[e++]=s>>8&255,o[e++]=s&255}return o},d7=function(r){if(r.byteLength!==4)throw new At("IPv4 address was incorrect length");let e=[];for(let t=0;t<r.byteLength;t++)e.push(r[t]);return e.join(".")},f7=function(r){if(r.byteLength!==16)throw new At("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 At(`Invalid IPv6 address "${t}"`)}};function h7(r){try{let e=new URL(`http://[${r}]`);return e.hostname.substring(1,e.hostname.length-1)}catch{throw new At(`Invalid IPv6 address "${r}"`)}}var Om=Object.values(ps).map(r=>r.decoder),bT=(function(){let r=Om[0].or(Om[1]);return Om.slice(2).forEach(e=>r=r.or(e)),r})();function p7(r){return bT.decode(r)}function m7(r){return e=>r.encoder.encode(e)}function ET(r){if(parseInt(r).toString()!==r)throw new zn("Value must be an integer")}function xT(r){if(r<0)throw new zn("Value must be a positive integer, or zero")}function vT(r){return e=>{if(e>r)throw new zn(`Value must be smaller than or equal to ${r}`)}}function ST(...r){return e=>{for(let t of r)t(e)}}var Bc=ST(ET,xT,vT(65535));var mt=-1,$m=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 vd(`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)}))}},jn=new $m,UT=[{code:4,name:"ip4",size:32,valueToBytes:Fm,bytesToValue:d7,validate:r=>{if(!zr(r))throw new zn(`Invalid IPv4 address "${r}"`)}},{code:6,name:"tcp",size:16,valueToBytes:Ms,bytesToValue:qi,validate:Bc},{code:273,name:"udp",size:16,valueToBytes:Ms,bytesToValue:qi,validate:Bc},{code:33,name:"dccp",size:16,valueToBytes:Ms,bytesToValue:qi,validate:Bc},{code:41,name:"ip6",size:128,valueToBytes:u7,bytesToValue:f7,stringToValue:h7,validate:r=>{if(!fd(r))throw new zn(`Invalid IPv6 address "${r}"`)}},{code:42,name:"ip6zone",size:mt},{code:43,name:"ipcidr",size:8,bytesToValue:Mm("base10"),valueToBytes:Bm("base10")},{code:53,name:"dns",size:mt},{code:54,name:"dns4",size:mt},{code:55,name:"dns6",size:mt},{code:56,name:"dnsaddr",size:mt},{code:132,name:"sctp",size:16,valueToBytes:Ms,bytesToValue:qi,validate:Bc},{code:301,name:"udt"},{code:302,name:"utp"},{code:400,name:"unix",size:mt,stringToValue:r=>decodeURIComponent(r),valueToString:r=>encodeURIComponent(r)},{code:421,name:"p2p",aliases:["ipfs"],size:mt,bytesToValue:Mm("base58btc"),valueToBytes:r=>r.startsWith("Q")||r.startsWith("1")?Bm("base58btc")(r):G.parse(r).multihash.bytes},{code:444,name:"onion",size:96,bytesToValue:Um,valueToBytes:c7},{code:445,name:"onion3",size:296,bytesToValue:Um,valueToBytes:l7},{code:446,name:"garlic64",size:mt},{code:447,name:"garlic32",size:mt},{code:448,name:"tls"},{code:449,name:"sni",size:mt},{code:454,name:"noise"},{code:460,name:"quic"},{code:461,name:"quic-v1"},{code:465,name:"webtransport"},{code:466,name:"certhash",size:mt,bytesToValue:m7(ec),valueToBytes:p7},{code:480,name:"http"},{code:481,name:"http-path",size:mt,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:mt}];UT.forEach(r=>{jn.addProtocol(r)});function g7(r){let e=[],t=0;for(;t<r.length;){let n=hr(r,t),o=jn.getProtocol(n),s=he(n),i=FT(o,r,t+s),a=0;i>0&&o.size===mt&&(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)??R(u)}e.push(l),t+=c}return e}function y7(r){let e=0,t=[];for(let n of r){if(n.bytes==null){let o=jn.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===mt&&(c=he(a)));let l=new Uint8Array(s+c+a),d=0;Oi(n.code,l,d),d+=s,i!=null&&(o.size===mt&&(Oi(a,l,d),d+=c),l.set(i,d)),n.bytes=l}t.push(n.bytes),e+=n.bytes.byteLength}return Oe(t,e)}function w7(r){if(r.charAt(0)!=="/")throw new At('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=jn.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 At(`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 At(`Component ${o} was missing value`);l.value=c.stringToValue?.(n)??n}e.push(l),n="",o="",t="protocol"}}}if(o!==""&&n!=="")throw new At("Incomplete multiaddr");return e}function b7(r){return`/${r.flatMap(e=>{if(e.value==null)return e.name;let t=jn.getProtocol(e.code);if(t==null)throw new At(`Unknown protocol code ${e.code}`);return[e.name,t.valueToString?.(e.value)??e.value]}).join("/")}`}function FT(r,e,t){return r.size==null||r.size===0?0:r.size>0?r.size/8:hr(e,t)}var $T=Symbol.for("nodejs.util.inspect.custom"),jm=Symbol.for("@multiformats/multiaddr");function KT(r){if(r==null&&(r="/"),yn(r))return r.getComponents();if(r instanceof Uint8Array)return g7(r);if(typeof r=="string")return r=r.replace(/\/(\/)+/,"/").replace(/(\/)+$/,""),r===""&&(r="/"),w7(r);if(Array.isArray(r))return r;throw new At("Must be a string, Uint8Array, Component[], or another Multiaddr")}var Td=class r{[jm]=!0;#e;#t;#r;constructor(e="/",t={}){this.#e=KT(e),t.validate!==!1&&VT(this)}get bytes(){return this.#r==null&&(this.#r=y7(this.#e)),this.#r}toString(){return this.#t==null&&(this.#t=b7(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 xd(`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)}[$T](){return`Multiaddr(${this.toString()})`}};function VT(r){r.getComponents().forEach(e=>{let t=jn.getProtocol(e.code);e.value!=null&&t.validate?.(e.value)})}function yn(r){return!!r?.[jm]}function q(r){return new Td(r)}var Xm=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 E7(){return new Xm}function HT(r){return r[Symbol.asyncIterator]!=null}async function qT(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*WT(r){let e=new AbortController,t=E7();qT(r,t,e.signal).catch(()=>{});try{yield*t}finally{e.abort()}}function*zT(r){for(let e of r)yield*e}function GT(...r){let e=[];for(let t of r)HT(t)||e.push(t);return e.length===r.length?zT(e):WT(r)}var jt=GT;function Yi(r,...e){if(r==null)throw new Error("Empty pipeline");if(Qm(r)){let n=r;r=()=>n.source}else if(v7(r)||x7(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&Qm(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++)Qm(t[n])&&(t[n]=jT(t[n]));return YT(...t)}var YT=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},x7=r=>r?.[Symbol.asyncIterator]!=null,v7=r=>r?.[Symbol.iterator]!=null,Qm=r=>r==null?!1:r.sink!=null&&r.source!=null,jT=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=vt({objectMode:!0});t.then(()=>{n.end()},i=>{n.end(i)});let o,s=r.source;if(x7(s))o=async function*(){yield*s,n.end()};else if(v7(s))o=function*(){yield*s,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return jt(n,o())}return r.source};var XT=4194304,_d=class extends Error{static name="UnwrappedError";name="UnwrappedError"},Hc=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Jm=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},eg=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function QT(r){return typeof r?.closeRead=="function"}function ZT(r){return typeof r?.close=="function"}function Zm(r){return QT(r)?r.remoteWriteStatus!=="writable"&&r.readBufferLength===0:ZT(r)?r.status!=="open":!1}function JT(r){return r?.addEventListener!=null&&r?.removeEventListener!=null&&r?.send!=null&&r?.push!=null&&r?.log!=null}function Cd(r,e){let t=e?.maxBufferSize??XT,n=new X,o,s=!1;if(!JT(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 _d("Stream was unwrapped");if(Zm(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 Os(`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),Zm(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(Zm(r))throw r.log.error("closed while reading %d/%d bytes",n.byteLength,f),new Os(`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 _d("Stream was unwrapped");r.send(d)||await _r(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 Fo(r,e={}){let t=Cd(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 X;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 Hc("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new eg(`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 Os(`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 Os(`Unexpected EOF - read ${l.byteLength}/${a} bytes before the stream closed`);return l},async write(i,a){await t.write(new X(o(i.byteLength),i),a)},async writeV(i,a){let c=new X(...i.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap(){return t.unwrap()}}}function Ue(r,e){let t=Fo(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 e_=1024*1024*4,t_=1024*1024*4,kd=class{buffer;maxBufferSize;lengthDecoder;maxDataLength;encodingLength;constructor(e={}){this.buffer=new X,this.maxBufferSize=e.maxBufferSize??e_,this.maxDataLength=e.maxDataLength??t_,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 Hc("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 r_=["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 tg(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=n_(r);return t||"Object"}function n_(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(r_.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 qc=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",o_=new TextEncoder;function Pd(r){return qc&&globalThis.Buffer.isBuffer(r)}function Us(r){return r instanceof Uint8Array?Pd(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var s_=24,i_=200,ji=qc?r=>r.length>=s_?globalThis.Buffer.from(r):S7(r):r=>r.length>=i_?o_.encode(r):S7(r),wn=r=>Uint8Array.from(r),I7=qc?(r,e,t)=>Pd(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),T7=qc?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),Us(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},_7=qc?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function Rd(r,e){if(Pd(r)&&Pd(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 S7(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 A7=4096;function C7(r){let e=r.length;if(e<=A7)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=A7));return t}var a_=256,Wc=class{constructor(e=a_){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=_7(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=I7(n,0,this.cursor)}else t=T7(this.chunks,this.cursor);return e&&this.reset(),t}},Ld=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:",bn="CBOR encode error:",zc=[];zc[23]=1;zc[24]=2;zc[25]=3;zc[26]=5;zc[27]=9;function Xn(r,e,t){if(r.length-e<t)throw new Error(`${J} not enough data for type`)}var gt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function mr(r,e,t){Xn(r,e,1);let n=r[e];if(t.strict===!0&&n<gt[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<gt[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<gt[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<gt[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 k7(r,e,t,n){return new N(y.uint,mr(r,e+1,n),2)}function P7(r,e,t,n){return new N(y.uint,gr(r,e+1,n),3)}function R7(r,e,t,n){return new N(y.uint,yr(r,e+1,n),5)}function L7(r,e,t,n){return new N(y.uint,wr(r,e+1,n),9)}function Cr(r,e){return Ke(r,0,e.value)}function Ke(r,e,t){if(t<gt[0]){let n=Number(t);r.push([e|n])}else if(t<gt[1]){let n=Number(t);r.push([e|24,n])}else if(t<gt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<gt[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<gt[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`)}}Cr.encodedSize=function(e){return Ke.encodedSize(e.value)};Ke.encodedSize=function(e){return e<gt[0]?1:e<gt[1]?2:e<gt[2]?3:e<gt[3]?5:9};Cr.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function D7(r,e,t,n){return new N(y.negint,-1-mr(r,e+1,n),2)}function N7(r,e,t,n){return new N(y.negint,-1-gr(r,e+1,n),3)}function O7(r,e,t,n){return new N(y.negint,-1-yr(r,e+1,n),5)}var rg=BigInt(-1),M7=BigInt(1);function B7(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,rg-BigInt(o),9)}function Dd(r,e){let t=e.value,n=typeof t=="bigint"?t*rg-M7:t*-1-1;Ke(r,e.type.majorEncoded,n)}Dd.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*rg-M7:t*-1-1;return n<gt[0]?1:n<gt[1]?2:n<gt[2]?3:n<gt[3]?5:9};Dd.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function Gc(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 U7(r,e,t,n){return Gc(r,e,1,t)}function F7(r,e,t,n){return Gc(r,e,2,mr(r,e+1,n))}function $7(r,e,t,n){return Gc(r,e,3,gr(r,e+1,n))}function K7(r,e,t,n){return Gc(r,e,5,yr(r,e+1,n))}function V7(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 Gc(r,e,9,o)}function Nd(r){return r.encodedBytes===void 0&&(r.encodedBytes=y.equals(r.type,y.string)?ji(r.value):r.value),r.encodedBytes}function Xi(r,e){let t=Nd(e);Ke(r,e.type.majorEncoded,t.length),r.push(t)}Xi.encodedSize=function(e){let t=Nd(e);return Ke.encodedSize(t.length)+t.length};Xi.compareTokens=function(e,t){return l_(Nd(e),Nd(t))};function l_(r,e){return r.length<e.length?-1:r.length>e.length?1:Rd(r,e)}var H7=new TextDecoder,d_=32;function f_(r,e,t){if(t-e<d_){let o="";for(let s=e;s<t;s++){let i=r[s];if(i&128)return H7.decode(r.subarray(e,t));o+=String.fromCharCode(i)}return o}return H7.decode(r.subarray(e,t))}function Yc(r,e,t,n,o){let s=t+n;Xn(r,e,s);let i=new N(y.string,f_(r,e+t,e+s),s);return o.retainStringBytes===!0&&(i.byteValue=r.slice(e+t,e+s)),i}function q7(r,e,t,n){return Yc(r,e,1,t,n)}function W7(r,e,t,n){return Yc(r,e,2,mr(r,e+1,n),n)}function z7(r,e,t,n){return Yc(r,e,3,gr(r,e+1,n),n)}function G7(r,e,t,n){return Yc(r,e,5,yr(r,e+1,n),n)}function Y7(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 Yc(r,e,9,o,n)}var j7=Xi;function Qi(r,e,t,n){return new N(y.array,n,t)}function X7(r,e,t,n){return Qi(r,e,1,t)}function Q7(r,e,t,n){return Qi(r,e,2,mr(r,e+1,n))}function Z7(r,e,t,n){return Qi(r,e,3,gr(r,e+1,n))}function J7(r,e,t,n){return Qi(r,e,5,yr(r,e+1,n))}function ey(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 Qi(r,e,9,o)}function ty(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 Od(r,e){Ke(r,y.array.majorEncoded,e.value)}Od.compareTokens=Cr.compareTokens;Od.encodedSize=function(e){return Ke.encodedSize(e.value)};function Zi(r,e,t,n){return new N(y.map,n,t)}function ry(r,e,t,n){return Zi(r,e,1,t)}function ny(r,e,t,n){return Zi(r,e,2,mr(r,e+1,n))}function oy(r,e,t,n){return Zi(r,e,3,gr(r,e+1,n))}function sy(r,e,t,n){return Zi(r,e,5,yr(r,e+1,n))}function iy(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 Zi(r,e,9,o)}function ay(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${J} indefinite length items not allowed`);return Zi(r,e,1,1/0)}function Md(r,e){Ke(r,y.map.majorEncoded,e.value)}Md.compareTokens=Cr.compareTokens;Md.encodedSize=function(e){return Ke.encodedSize(e.value)};function cy(r,e,t,n){return new N(y.tag,t,1)}function ly(r,e,t,n){return new N(y.tag,mr(r,e+1,n),2)}function uy(r,e,t,n){return new N(y.tag,gr(r,e+1,n),3)}function dy(r,e,t,n){return new N(y.tag,yr(r,e+1,n),5)}function fy(r,e,t,n){return new N(y.tag,wr(r,e+1,n),9)}function Bd(r,e){Ke(r,y.tag.majorEncoded,e.value)}Bd.compareTokens=Cr.compareTokens;Bd.encodedSize=function(e){return Ke.encodedSize(e.value)};var ng=20,og=21,sg=22,ig=23;function hy(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 py(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 ag(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 my(r,e,t,n){return ag(cg(r,e+1),3,n)}function gy(r,e,t,n){return ag(lg(r,e+1),5,n)}function yy(r,e,t,n){return ag(xy(r,e+1),9,n)}function jc(r,e,t){let n=e.value;if(n===!1)r.push([y.float.majorEncoded|ng]);else if(n===!0)r.push([y.float.majorEncoded|og]);else if(n===null)r.push([y.float.majorEncoded|sg]);else if(n===void 0)r.push([y.float.majorEncoded|ig]);else{let o,s=!1;(!t||t.float64!==!0)&&(by(n),o=cg(jr,1),n===o||Number.isNaN(n)?(jr[0]=249,r.push(jr.slice(0,3)),s=!0):(Ey(n),o=lg(jr,1),n===o&&(jr[0]=250,r.push(jr.slice(0,5)),s=!0))),s||(y_(n),o=xy(jr,1),jr[0]=251,r.push(jr.slice(0,9)))}}jc.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){by(n);let o=cg(jr,1);if(n===o||Number.isNaN(n))return 3;if(Ey(n),o=lg(jr,1),n===o)return 5}return 9};var wy=new ArrayBuffer(9),kr=new DataView(wy,1),jr=new Uint8Array(wy,0);function by(r){if(r===1/0)kr.setUint16(0,31744,!1);else if(r===-1/0)kr.setUint16(0,64512,!1);else if(Number.isNaN(r))kr.setUint16(0,32256,!1);else{kr.setFloat32(0,r);let e=kr.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)kr.setUint16(0,31744,!1);else if(t===0)kr.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?kr.setUint16(0,0):o<-14?kr.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):kr.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function cg(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 Ey(r){kr.setFloat32(0,r,!1)}function lg(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 y_(r){kr.setFloat64(0,r,!1)}function xy(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)}jc.compareTokens=Cr.compareTokens;function xe(r,e,t){throw new Error(`${J} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function Ud(r){return()=>{throw new Error(`${J} ${r}`)}}var V=[];for(let r=0;r<=23;r++)V[r]=xe;V[24]=k7;V[25]=P7;V[26]=R7;V[27]=L7;V[28]=xe;V[29]=xe;V[30]=xe;V[31]=xe;for(let r=32;r<=55;r++)V[r]=xe;V[56]=D7;V[57]=N7;V[58]=O7;V[59]=B7;V[60]=xe;V[61]=xe;V[62]=xe;V[63]=xe;for(let r=64;r<=87;r++)V[r]=U7;V[88]=F7;V[89]=$7;V[90]=K7;V[91]=V7;V[92]=xe;V[93]=xe;V[94]=xe;V[95]=Ud("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)V[r]=q7;V[120]=W7;V[121]=z7;V[122]=G7;V[123]=Y7;V[124]=xe;V[125]=xe;V[126]=xe;V[127]=Ud("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)V[r]=X7;V[152]=Q7;V[153]=Z7;V[154]=J7;V[155]=ey;V[156]=xe;V[157]=xe;V[158]=xe;V[159]=ty;for(let r=160;r<=183;r++)V[r]=ry;V[184]=ny;V[185]=oy;V[186]=sy;V[187]=iy;V[188]=xe;V[189]=xe;V[190]=xe;V[191]=ay;for(let r=192;r<=215;r++)V[r]=cy;V[216]=ly;V[217]=uy;V[218]=dy;V[219]=fy;V[220]=xe;V[221]=xe;V[222]=xe;V[223]=xe;for(let r=224;r<=243;r++)V[r]=Ud("simple values are not supported");V[244]=xe;V[245]=xe;V[246]=xe;V[247]=hy;V[248]=Ud("simple values are not supported");V[249]=my;V[250]=gy;V[251]=yy;V[252]=xe;V[253]=xe;V[254]=xe;V[255]=py;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 ug(r){switch(r.type){case y.false:return wn([244]);case y.true:return wn([245]);case y.null:return wn([246]);case y.bytes:return r.value.length?void 0:wn([64]);case y.string:return r.value===""?wn([96]):void 0;case y.array:return r.value===0?wn([128]):void 0;case y.map:return r.value===0?wn([160]):void 0;case y.uint:return r.value<24?wn([Number(r.value)]):void 0;case y.negint:if(r.value>=-24)return wn([31-Number(r.value)])}}var b_={float64:!1,mapSorter:v_,quickEncodeToken:ug},Ty=Object.freeze({float64:!0,mapSorter:S_,quickEncodeToken:ug});function E_(){let r=[];return r[y.uint.major]=Cr,r[y.negint.major]=Dd,r[y.bytes.major]=Xi,r[y.string.major]=j7,r[y.array.major]=Od,r[y.map.major]=Md,r[y.tag.major]=Bd,r[y.float.major]=jc,r}var Ji=E_(),Fd=new Wc,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(`${bn} object contains circular references`);return new r(t,e)}},$o={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)},En={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?$o.true:$o.false},null(r,e,t,n){return $o.null},undefined(r,e,t,n){return $o.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?[$o.emptyArray,new N(y.break)]:$o.emptyArray;n=Qc.createCheck(n,r);let o=[],s=0;for(let i of r)o[s++]=$d(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++]=[$d(d,t,n),$d(u,t,n)])}l<i&&(a.length=l)}return a?.length?(x_(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?[$o.emptyMap,new N(y.break)]:$o.emptyMap}};En.Map=En.Object;En.Buffer=En.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))En[`${r}Array`]=En.DataView;function $d(r,e={},t){let n=tg(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||En[n];if(typeof o=="function"){let i=o(r,n,e,t);if(i!=null)return i}let s=En[n];if(!s)throw new Error(`${bn} unsupported type: ${n}`);return s(r,n,e,t)}function x_(r,e){e.mapSorter&&r.sort(e.mapSorter)}function v_(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 S_(r,e){if(r[0]instanceof N&&e[0]instanceof N){let t=r[0],n=e[0];return t._keyBytes||(t._keyBytes=vy(t.value)),n._keyBytes||(n._keyBytes=vy(n.value)),Rd(t._keyBytes,n._keyBytes)}throw new Error("rfc8949MapSorter: complex key types are not supported yet")}function vy(r){return Kd(r,Ji,Ty)}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 Sy=y.uint.majorEncoded,Ay=y.negint.majorEncoded,A_=y.bytes.majorEncoded,I_=y.string.majorEncoded,Iy=y.array.majorEncoded,T_=y.float.majorEncoded|ng,__=y.float.majorEncoded|og,C_=y.float.majorEncoded|sg,k_=y.float.majorEncoded|ig,P_=BigInt(-1),R_=BigInt(1);function L_(r){return r.addBreakTokens!==!0}function _y(r,e,t,n){let o=tg(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([C_]);return;case"undefined":r.push([k_]);return;case"boolean":r.push([e?__:T_]);return;case"number":!Number.isInteger(e)||!Number.isSafeInteger(e)?jc(r,new N(y.float,e),t):e>=0?Ke(r,Sy,e):Ke(r,Ay,e*-1-1);return;case"bigint":e>=BigInt(0)?Ke(r,Sy,e):Ke(r,Ay,e*P_-R_);return;case"string":{let i=ji(e);Ke(r,I_,i.length),r.push(i);return}case"Uint8Array":Ke(r,A_,e.length),r.push(e);return;case"Array":if(!e.length){r.push([Iy]);return}n=Qc.createCheck(n,e),Ke(r,Iy,e.length);for(let i of e)_y(r,i,t,n);return;case"Object":case"Map":{let i=En.Object(e,o,t,n);Xc(r,i,Ji,t)}return;default:{let i=En[o];if(!i)throw new Error(`${bn} unsupported type: ${o}`);let a=i(e,o,t,n);Xc(r,a,Ji,t)}}}function Kd(r,e,t,n){let o=n instanceof Uint8Array,s=o?new Ld(n):Fd,i=$d(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 Wc(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():Us(s.chunks[0])}}return s.reset(),Xc(s,i,e,t),s.toBytes(!0)}function Ko(r,e){return e=Object.assign({},b_,e),L_(e)?(Fd.reset(),_y(Fd,r,e,void 0),Fd.toBytes(!0)):Kd(r,Ji,e)}var D_={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},Vd=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t}pos(){return this._pos}done(){return this._pos>=this.data.length}next(){let e=this.data[this._pos],t=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}},Zc=Symbol.for("DONE"),Hd=Symbol.for("BREAK");function N_(r,e,t){let n=[];for(let o=0;o<r.value;o++){let s=ea(e,t);if(s===Hd){if(r.value===1/0)break;throw new Error(`${J} got unexpected break to lengthed array`)}if(s===Zc)throw new Error(`${J} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=s}return n}function O_(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=ea(e,t);if(c===Hd){if(r.value===1/0)break;throw new Error(`${J} got unexpected break to lengthed map`)}if(c===Zc)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=ea(e,t);if(l===Zc)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 ea(r,e){if(r.done())return Zc;let t=r.next();if(y.equals(t.type,y.break))return Hd;if(t.type.terminal)return t.value;if(y.equals(t.type,y.array))return N_(t,r,e);if(y.equals(t.type,y.map))return O_(t,r,e);if(y.equals(t.type,y.tag)){if(e.tags&&typeof e.tags[t.value]=="function"){let n=ea(r,e);return e.tags[t.value](n)}throw new Error(`${J} tag not supported (${t.value})`)}throw new Error("unsupported")}function dg(r,e){if(!(r instanceof Uint8Array))throw new Error(`${J} data to decode must be a Uint8Array`);e=Object.assign({},D_,e);let t=Us(r),n=e.tokenizer||new Vd(t,e),o=ea(n,e);if(o===Zc)throw new Error(`${J} did not find any content to decode`);if(o===Hd)throw new Error(`${J} got unexpected break`);return[o,r.subarray(n.pos())]}function br(r,e){let[t,n]=dg(r,e);if(n.length>0)throw new Error(`${J} too many terminals, data makes no sense`);return t}var qd=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},ta=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Wd=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},Jc=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function zd(r){return r[Symbol.asyncIterator]!=null}function Cy(r,e){if(r.byteLength>e)throw new ta("Message length too long")}var Yd=r=>{let e=he(r),t=Ge(e);return Mt(r,t),Yd.bytes=e,t};Yd.bytes=0;function Qn(r,e){e=e??{};let t=e.lengthEncoder??Yd,n=e?.maxDataLength??4194304;function*o(s){Cy(s,n);let i=t(s.byteLength);i instanceof Uint8Array?yield i:yield*i,s instanceof Uint8Array?yield s:yield*s}return zd(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??Yd,n=e?.maxDataLength??4194304;return Cy(r,n),new X(t(r.byteLength),r)};var $s;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})($s||($s={}));var hg=r=>{let e=hr(r);return hg.bytes=he(e),e};hg.bytes=0;function Ks(r,e){let t=new X,n=$s.LENGTH,o=-1,s=e?.lengthDecoder??hg,i=e?.maxLengthLength??8,a=e?.maxDataLength??4194304;function*c(){for(;t.byteLength>0;){if(n===$s.LENGTH)try{if(o=s(t),o<0)throw new qd("Invalid message length");if(o>a)throw new ta("Message length too long");let l=s.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=$s.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>i)throw new Wd("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 zd(r)?(async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Jc("Unexpected end of input")})():(function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Jc("Unexpected end of input")})()}Ks.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 Ks(n,{...e??{},onLength:s=>{t=s}})};function B_(r,e){if(typeof r=="string")return U_(r);if(typeof r=="number")return K_(r,e);throw Error(`Value provided to ms() must be a string or number. value=${JSON.stringify(r)}`)}var jd=B_;function U_(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 F_(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 $_(r){let e=Math.abs(r);return e>=315576e5?Vs(r,e,315576e5,"year"):e>=26298e5?Vs(r,e,26298e5,"month"):e>=6048e5?Vs(r,e,6048e5,"week"):e>=864e5?Vs(r,e,864e5,"day"):e>=36e5?Vs(r,e,36e5,"hour"):e>=6e4?Vs(r,e,6e4,"minute"):e>=1e3?Vs(r,e,1e3,"second"):`${r} ms`}function K_(r,e){if(typeof r!="number"||!Number.isFinite(r))throw Error("Value provided to ms.format() must be of type number.");return e?.long?$_(r):F_(r)}function Vs(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function pg(r){t.debug=t,t.default=t,t.coerce=c,t.disable=s,t.enable=o,t.enabled=i,t.humanize=jd,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 T=m,I=Number(new Date),D=I-(f||I);T.diff=D,T.prev=f,T.curr=I,f=I,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(T,L),w.splice(F,1),F--}return z}),t.formatArgs.call(T,w),u?.onLog!=null&&u.onLog(...w),(T.log||t.log).apply(T,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 Xd=Y_(),V_=["#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 H_(){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 q_(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+jd(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 W_=console.debug??console.log??(()=>{});function z_(r){try{r?Xd?.setItem("debug",r):Xd?.removeItem("debug")}catch{}}function G_(){let r;try{r=Xd?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function Y_(){try{return localStorage}catch{}}function j_(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var Py=pg({formatArgs:q_,save:z_,load:G_,useColors:H_,setupFormatters:j_,colors:V_,storage:Xd,log:W_});var rr=Py;rr.formatters.b=r=>r==null?"undefined":De.baseEncode(r);rr.formatters.t=r=>r==null?"undefined":ut.baseEncode(r);rr.formatters.m=r=>r==null?"undefined":rt.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 Ry(r,e=""){let t=Ly(r.message),n=Ly(r.stack);return t!=null&&n!=null?n.includes(t)?`${n.split(`
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(`
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 X_(r){return r instanceof AggregateError||r?.name==="AggregateError"&&Array.isArray(r.errors)}function Dy(r,e=""){if(X_(r)){let t=Ry(r,e);return r.errors.length>0?(e=`${e} `,t+=`
11
- ${e}${r.errors.map(n=>`${Dy(n,`${e}`)}`).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(`
12
12
  ${e}`)}`):t+=`
13
- ${e}[Error list was empty]`,t.trim()}return Ry(r,e)}rr.formatters.e=r=>r==null?"undefined":Dy(r);function Q_(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 ra(r){return{forComponent(e){return Pr(e,r)}}}function Pr(r,e){let t=Q_(`${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=>Pr(`${r}:${n}`,e)})}function Ly(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var Ny=Symbol.for("sindresorhus/unlimited-timeout#brand");function Oy(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={[Ny]:!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 My(r){!r||typeof r!="object"||!r[Ny]||(r.cleared=!0,r.id!==void 0&&(globalThis.clearTimeout(r.id),r.id=void 0))}var Z_=new WeakMap;function J_({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}),Z_.set(u,()=>{c(s),s=null,i()}),u}}var eC=J_({setTimeout:Oy,clearTimeout:My}),By=eC;var It=class extends St{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};var Qd=class extends St{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};var na=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 mg}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 pd("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)}},mg=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 oa(r,e,t){let n,o,s=!1;function i(){let l={signal:o.signal};if(t?.timeout!=null){let d=le([o.signal,AbortSignal.timeout(t.timeout)]);l.signal=d}s=!0,Promise.resolve().then(async()=>{await r(l)}).catch(()=>{}).finally(()=>{s=!1,!o.signal.aborted&&(n=setTimeout(i,e))})}let a=Wn(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 gg=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 ot(r){let{name:e,metrics:t}=r,n;return t!=null?n=new gg({name:e,metrics:t}):n=new Map,n}var Zn="/",Uy=new TextEncoder().encode(Zn),Zd=Uy[0],Fe=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]!==Zd)throw new Error("Invalid key")}toString(e="utf8"){return R(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Zn))}static random(){return new r(Math.random().toString().substring(2))}static asKey(e){return e instanceof Uint8Array||typeof e=="string"?new r(e):typeof e.uint8Array=="function"?new r(e.uint8Array()):null}clean(){if((this._buf==null||this._buf.byteLength===0)&&(this._buf=Uy),this._buf[0]!==Zd){let e=new Uint8Array(this._buf.byteLength+1);e.fill(Zd,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===Zd;)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(Zn).slice(1)}type(){return tC(this.baseNamespace())}name(){return rC(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Zn)||(e+=Zn),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Zn):new r(e.slice(0,-1).join(Zn))}child(e){return this.toString()===Zn?e:e.toString()===Zn?this:new r(this.toString()+e.toString(),!1)}isAncestorOf(e){return e.toString()===this.toString()?!1:e.toString().startsWith(this.toString())}isDecendantOf(e){return e.toString()===this.toString()?!1:this.toString().startsWith(e.toString())}isTopLevel(){return this.list().length===1}concat(...e){return r.withNamespaces([...this.namespaces(),...nC(e.map(t=>t.namespaces()))])}};function tC(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function rC(r){let e=r.split(":");return e[e.length-1]}function nC(r){return[].concat(...r)}function oC(r){return r[Symbol.asyncIterator]!=null}function sC(r){if(oC(r))return(async()=>{let n=new Uint8Array(0);for await(let o of r)n=Oe([n,o],n.length+o.length);return n})();let e=[],t=0;for(let n of r)e.push(n),t+=n.byteLength;return Oe(e,t)}var Jd=sC;function ef({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*iC(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*yg(n,o))}else{let t=G.asCID(e);t!=null?yield[r.join("/"),t]:yield*yg(e,r)}}function*yg(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*iC(s,o)}}function*aC(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*wg(n,o))}else yield*wg(e,r)}function*wg(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*aC(o,n))}}function cC(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 bg=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:ef(),bytes:ef(),value:ef(),asBlock:ef()})}links(){return yg(this.value,[])}tree(){return wg(this.value,[])}get(e="/"){return cC(this.value,e.split("/").filter(Boolean))}};function Fy({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 bg({cid:e,bytes:r,value:o})}var tf=class extends Error{static name="AlreadyPinnedError";name="AlreadyPinnedError"},el=class extends Error{static name="BlockPinnedError";name="BlockPinnedError"},rf=class extends Error{static name="InvalidDatastoreVersionError";name="InvalidDatastoreVersionError"},Hs=class extends Error{static name="InvalidConfigurationError";name="InvalidConfigurationError"},nf=class extends AggregateError{static name="GetFailedError";name="GetFailedError"},of=class extends AggregateError{static name="LoadBlockFailedError";name="LoadBlockFailedError"},tl=class extends Error{static name="BlockNotFoundWhileOfflineError";name="BlockNotFoundWhileOfflineError"};var Vy="/pin/",$y="/pinned-block/",Eg=Ar,Ky=1;function sf(r){return r.version===0&&(r=r.toV1()),new Fe(`${Vy}${r.toString(Eg)}`)}var af=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=sf(e);if(await this.datastore.has(n))throw new tf("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 St({concurrency:Ky});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,Ko(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=Fy({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 Fe(`${$y}${Eg.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,Ko(s),n),n.onProgress?.(new H("helia:pin:add",e))}}async*rm(e,t={}){let n=sf(e),o=await this.datastore.get(n,t),s=br(o);await this.datastore.delete(n,t);let i=new St({concurrency:Ky});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:Vy+(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 Fe(`${$y}${Eg.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=sf(e),o=await this.datastore.get(n,t);return br(o)}async setMetadata(e,t,n){let o=sf(e),s=await this.datastore.get(o,n),i=br(s);i.metadata=t??{},await this.datastore.put(o,Ko(i),n)}};var xg=1,vg=5,Sg=100;var rl=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},Vo=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},nl=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},ol=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}},Ag=class extends Error{static name="InvalidCodecError";constructor(e="Invalid codec"){super(e),this.name="InvalidCodecError"}};var lC=5,cf=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??lC,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 at(...this.routers)}async stop(){await lt(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new Vo("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=qs(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 jt(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 Vo("No content routers available");await Promise.all(qs(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){await Promise.all(qs(this.routers,"cancelReprovide").map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){await Promise.all(qs(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){let n=[],o;try{o=await Promise.any(qs(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 nf(n,`Failed to get value key ${R(e,"base58btc")}`);return o}async findPeer(e,t){if(this.routers.length===0)throw new Vo("No peer routers available");let n=this,o=jt(...qs(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 Le("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Vo("No peer routers available");for await(let n of jt(...qs(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function qs(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 Xt(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(){Tg(t,"abort",u),Tg(r,e,l),Tg(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)};Ig(t,"abort",u),Ig(r,e,l),Ig(r,s,d)})}function Ig(r,e,t){r!=null&&(Hy(r)?r.addEventListener(e,t):r.addListener(e,t))}function Tg(r,e,t){r!=null&&(Hy(r)?r.removeEventListener(e,t):r.removeListener(e,t))}function Hy(r){return typeof r.addEventListener=="function"&&typeof r.removeEventListener=="function"}var lf=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var uf=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 uC(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var df=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=uC(),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 uf(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 _g(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 sl=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=_g(this.emitEmpty.bind(this),1),this.emitIdle=_g(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 lf;let n=new df(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 Xt(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await Xt(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await Xt(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=vt({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 ff="lock:worker:request-read",hf="lock:worker:abort-read-request",pf="lock:worker:release-read",mf="lock:master:grant-read",gf="lock:master:error-read",yf="lock:worker:request-write",wf="lock:worker:abort-write-request",bf="lock:worker:release-write",Ef="lock:master:grant-write",xf="lock:master:error-write",vf="lock:worker:finalize",Sf="mortice",qy={singleProcess:!1};var Cg=(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===vf&&r.safeDispatchEvent("finalizeRequest",{detail:{name:d.name}})};var Wy=(r=10)=>Math.random().toString().substring(2,r+2);var Af=class{name;channel;constructor(e){this.name=e,this.channel=new BroadcastChannel(Sf)}readLock(e){return this.sendRequest(ff,hf,mf,gf,pf,e)}writeLock(e){return this.sendRequest(yf,wf,Ef,xf,bf,e)}finalize(){this.channel.postMessage({type:vf,name:this.name}),this.channel.close()}async sendRequest(e,t,n,o,s,i){i?.signal?.throwIfAborted();let a=Wy();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 zy=r=>{if(r=Object.assign({},qy,r),!!globalThis.document||r.singleProcess){let t=new BroadcastChannel(Sf),n=new ie;return t.addEventListener("message",Cg(n,t,"requestReadLock","abortReadLockRequest",ff,hf,gf,pf,mf)),t.addEventListener("message",Cg(n,t,"requestWriteLock","abortWriteLockRequest",yf,wf,xf,bf,Ef)),n}return new Af(r.name)};var Ws=new Map,il;function Gy(r){return typeof r?.readLock=="function"&&typeof r?.writeLock=="function"}function dC(r){if(il==null&&(il=zy(r),!Gy(il))){let e=il;e.addEventListener("requestReadLock",t=>{let n=t.detail.name,o=t.detail.identifier,s=Ws.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=Ws.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=Ws.get(n);o?.finalize()})}return il}async function kg(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 Yy=(r,e)=>{let t=Ws.get(r);if(t!=null)return t;let n=dC(e);if(Gy(n))return t=n,Ws.set(r,t),t;let o=new sl({concurrency:1}),s;return t={async readLock(i){if(s!=null)return kg(s,i);s=new sl({concurrency:e.concurrency,autoStart:!1});let a=s,c=kg(s,i);return o.add(async()=>{a.start(),await a.onIdle().then(()=>{s===a&&(s=null)})}),c},async writeLock(i){return s=null,kg(o,i)},finalize:()=>{Ws.delete(r)},queue:o},Ws.set(r,t),e.autoFinalize===!0&&o.addEventListener("idle",()=>{t.finalize()},{once:!0}),t};var fC={name:"lock",concurrency:1/0,singleProcess:!1,autoFinalize:!1};function al(r){let e=Object.assign({},fC,r);return Yy(e.name,e)}var If=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=al({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await at(this.child),this.started=!0}async stop(){await lt(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 el("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 el("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 Pg=new Fe("/version"),jy=1;async function Xy(r){if(!await r.has(Pg)){await r.put(Pg,C(`${jy}`));return}let e=await r.get(Pg),t=R(e);if(parseInt(t,10)!==jy)throw new rf("Invalid datastore version, a datastore migration may be required")}var Dg={};et(Dg,{code:()=>Lg,decode:()=>vC,decodeOptions:()=>bC,encode:()=>xC,encodeOptions:()=>yC,name:()=>EC,toByteView:()=>Zy});var Qy=42;function Zy(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function hC(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,Qy),new N(y.bytes,t)]}function pC(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function mC(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 gC(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 Rg={float64:!0,typeEncoders:{Map:gC,Object:hC,undefined:pC,number:mC}},yC={...Rg,typeEncoders:{...Rg.typeEncoders}};function wC(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return G.decode(r.subarray(1))}var Tf={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Tf.tags[Qy]=wC;var bC={...Tf,tags:Tf.tags.slice()},EC="dag-cbor",Lg=113,xC=r=>Ko(r,Rg),vC=r=>br(Zy(r),Tf);var $g={};et($g,{code:()=>Fg,decode:()=>e9,encode:()=>Jy,format:()=>DC,name:()=>LC,parse:()=>OC,stringify:()=>DC});var Ng=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(`${bn} unsupported type: Uint8Array`)}[y.string.major](e,t){this.prefix(e);let n=ji(JSON.stringify(t.value));e.push(n.length>32?Us(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(`${bn} 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 SC(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${bn} 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(`${bn} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${bn} unexpected duplicate map keys, this is not supported`)}var AC={addBreakTokens:!0,mapSorter:SC};function Og(r,e){return e=Object.assign({},AC,e),Kd(r,new Ng,e)}var sa=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,C7(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 Mg(r,e){return e=Object.assign({tokenizer:new sa(r,e)},e),br(r,e)}function TC(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function _C(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 _f(r){let e=rt.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 _f(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function CC(r){return _f(new Uint8Array(r))}function kC(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function PC(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 RC={typeEncoders:{Object:_C,Buffer:_f,Uint8Array:_f,Int8Array:Qr,Uint16Array:Qr,Int16Array:Qr,Uint32Array:Qr,Int32Array:Qr,Float32Array:Qr,Float64Array:Qr,Uint8ClampedArray:Qr,BigInt64Array:Qr,BigUint64Array:Qr,DataView:Qr,ArrayBuffer:CC,undefined:kC,number:PC}},Bg=class extends sa{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=rt.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}},Ug={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Ug.tags[42]=G.parse;var LC="dag-json",Fg=297,Jy=r=>Og(r,RC),e9=r=>{let e=TC(r),t=Object.assign(Ug,{tokenizer:new Bg(e,Ug)});return Mg(e,t)},DC=r=>NC.decode(Jy(r));var NC=new TextDecoder,OC=r=>e9(MC.encode(r)),MC=new TextEncoder;var zg={};et(zg,{code:()=>Wg,createLink:()=>u9,createNode:()=>l9,decode:()=>jC,encode:()=>YC,name:()=>GC,prepare:()=>Hg,validate:()=>qg});var BC=new TextDecoder;function Kg(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 Cf(r,e){let t;[t,e]=Kg(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 t9(r,e){let t;return[t,e]=Kg(r,e),[t&7,t>>3,e]}function UC(r){let e={},t=r.length,n=0;for(;n<t;){let o,s;if([o,s,n]=t9(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]=Cf(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]=Cf(r,n),e.Name=BC.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]=Kg(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 r9(r){let e=r.length,t=0,n,o=!1,s;for(;t<e;){let a,c;if([a,c,t]=t9(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]=Cf(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]=Cf(r,t),n.push(UC(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 o9=new TextEncoder,n9=2**32,FC=2**31;function $C(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=cl(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=o9.encode(r.Name);t-=n.length,e.set(n,t),t=cl(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=cl(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function s9(r){let e=VC(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=cl(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let s=$C(r.Links[o],t.subarray(0,n));n-=s,n=cl(t,n,s)-1,t[n]=18}return t}function KC(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+ia(t)}if(typeof r.Name=="string"){let t=o9.encode(r.Name).length;e+=1+t+ia(t)}return typeof r.Tsize=="number"&&(e+=1+ia(r.Tsize)),e}function VC(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+ia(t)}if(r.Links)for(let t of r.Links){let n=KC(t);e+=1+n+ia(n)}return e}function cl(r,e,t){e-=ia(t);let n=e;for(;t>=FC;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function ia(r){return r%2===0&&r++,Math.floor((HC(r)+6)/7)}function HC(r){let e=0;return r>=n9&&(r=Math.floor(r/n9),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+qC[r]}var qC=[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 WC=["Data","Links"],zC=["Hash","Name","Tsize"],Vg=new TextEncoder;function a9(r,e){if(r===e)return 0;let t=r.Name?Vg.encode(r.Name):[],n=e.Name?Vg.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 i9(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function c9(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 Hg(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=Vg.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(c9),e.Links.sort(a9);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function qg(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!i9(r,WC))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(!i9(t,zC))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&&a9(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function l9(r,e=[]){return Hg({Data:r,Links:e})}function u9(r,e,t){return c9({Hash:t,Name:r,Tsize:e})}function d9(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var GC="dag-pb",Wg=112;function YC(r){qg(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),s9(e)}function jC(r){let e=d9(r),t=r9(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 aa(r){return r?.then!=null}function f9(r=[],e){let t={[Wg]:zg,[Mn]:fs,[Lg]:Dg,[Fg]:$g,[l2]:Nu};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let s=e(n);aa(s)?o=await s:o=s,t[o.code]=o}if(o!=null)return o;throw new ol(`Could not load codec for ${n}`)}}function h9(r=[],e){let t={[ze.code]:ze,[Mu.code]:Mu,[dt.code]:dt};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let s=e(n);aa(s)?o=await s:o=s,t[o.code]=o}if(o!=null)return o;throw new nl(`No hasher configured for multihash code 0x${n.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`)}}var Rr=class r extends Error{static name="NotFoundError";static code="ERR_NOT_FOUND";name=r.name;code=r.code;constructor(e="Not Found"){super(e)}};var Jn=class{has(e,t){return Promise.reject(new Error(".has is not implemented"))}put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}async*putMany(e,t){for await(let{cid:n,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 kf=0,ca=class extends Error{static name="IdentityHashDigestTooLongError";name="IdentityHashDigestTooLongError"},Pf=class extends Jn{child;maxDigestLength;constructor(e,t){super(),this.child=e,this.maxDigestLength=t?.maxDigestLength}put(e,t,n){if(e.multihash.code===kf){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ca(`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===kf){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ca(`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===kf){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ca(`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===kf){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ca(`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 XC(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 la=XC;function QC(r){return r[Symbol.asyncIterator]!=null}function ZC(r,e){let t=0;if(QC(r))return(async function*(){for await(let c of r)await e(c,t++)&&(yield c)})();let n=la(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 Zr=ZC;function JC(r){return r[Symbol.asyncIterator]!=null}function p9(r){return r?.then!=null}function ek(r,e){let t=0;if(JC(r))return(async function*(){for await(let c of r){let l=e(c,t++);p9(l)&&await l,yield c}})();let n=la(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++);p9(l)&&await l,yield c}})();let a=e;return(function*(){yield o;for(let c of n)a(c,t++),yield c})()}var Gg=ek;var tk=128,ua=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 Pf(e.blockstore,{maxDigestLength:t.maxIdentityHashDigestLength??tk}),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=Zr(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=Gg(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 tl("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 m9(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(Gg(e,async n=>{let o=await this.child.has(n,t),s=t.offline===!0;if(!o){if(s)throw new tl("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 m9(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 m9(r,e,t,n){let o=nk(r,t),s=new AbortController,i=le([s.signal,n.signal]);s.signal;let a=[];for(let c of e)rk(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,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 of(c.errors,`Failed to load block for ${r}`)}finally{s.abort(),i.clear()}}function rk(r){return typeof r.retrieve=="function"}var nk=(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(aa(o)?n=await o:n=o,!ee(n.digest,r.multihash.digest))throw new bo("Hash of downloaded block did not match multihash from passed CID")}};var Rf=class extends ua{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 Lf=class extends ua{started;constructor(e,t={}){super(e,t),this.started=!1}isStarted(){return this.started}async start(){await at(this.child,...this.blockBrokers),this.started=!0}async stop(){await lt(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 Rf({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}};var zs=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=Et(this.maxProviders),this.initialProviders=[...t.providers??[]]}async retrieve(e,t={}){let n=rt.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:Et(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 St({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 Vt(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 rl(`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 Df=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=h9(e.hashers,e.loadHasher),this.getCodec=f9(e.codecs,e.loadCodec),this.dns=e.dns??$u(),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 cf(t,{routers:(e.routers??[]).flatMap(o=>{typeof o=="function"&&(o=o(t));let s=[o],i=ok(o);i!=null&&s.push(i);let a=sk(o);return a!=null&&s.push(a),s}),providerLookupConcurrency:e.providerLookupConcurrency}),t.blockBrokers=e.blockBrokers.map(o=>o(t));let n=new Lf(t,e);this.pins=new af(e.datastore,n,this.getCodec),this.blockstore=new If(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore}async start(){await Xy(this.datastore),await at(this.blockstore,this.datastore,this.routing,this.libp2p),this.events.dispatchEvent(new CustomEvent("start",{detail:this}))}async stop(){await lt(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 ok(r){return r?.[Dn]}function sk(r){return r?.[On]}function ik(r){return r[Symbol.asyncIterator]!=null}function ak(r,e){let t=0;if(ik(r))return(async function*(){for await(let c of r)yield e(c,t++)})();let n=la(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 Lr=ak;function ck(r){return r[Symbol.asyncIterator]!=null}function lk(r,e){return ck(r)?(async function*(){let t=0;if(!(e<1)){for await(let n of r)if(yield n,t++,t===e)return}})():(function*(){let t=0;if(!(e<1)){for(let n of r)if(yield n,t++,t===e)return}})()}var Ho=lk;var ll="/ipfs/bitswap/1.2.0";var Ye;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(Ye||(Ye={}));var Yg;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(Yg||(Yg={}));(function(r){r.codec=()=>We(Yg)})(Ye||(Ye={}));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.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),Ye.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=Ye.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)})(da||(da={}));var Nf;(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),da.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 Ne('Decode error - map field "entries" had too many elements');s.entries.push(da.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)})(Nf||(Nf={}));var fa;(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)})(fa||(fa={}));var Dr;(function(r){r.HaveBlock="HaveBlock",r.DoNotHaveBlock="DoNotHaveBlock"})(Dr||(Dr={}));var Of;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DoNotHaveBlock=1]="DoNotHaveBlock"})(Of||(Of={}));(function(r){r.codec=()=>We(Of)})(Dr||(Dr={}));var ha;(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&&Of[t.type]!==0&&(n.uint32(16),Dr.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={cid:ae(0),type:Dr.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=Dr.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)})(ha||(ha={}));var Gs;(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),Nf.codec().encode(t.wantlist,n)),t.blocks!=null)for(let s of t.blocks)n.uint32(26),fa.codec().encode(s,n);if(t.blockPresences!=null)for(let s of t.blockPresences)n.uint32(34),ha.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=Nf.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 Ne('Decode error - map field "blocks" had too many elements');s.blocks.push(fa.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 Ne('Decode error - map field "blockPresences" had too many elements');s.blockPresences.push(ha.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)})(Gs||(Gs={}));function g9(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 Mf=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var uk=4193648,dk=uk+16;function*y9(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=Gs.encode(l).byteLength,{added:u,hasMore:f,newSize:h}=jg(o,l.blocks,a,e,d,fk);a+=u,d=h;let p=f;({added:u,hasMore:f,newSize:h}=jg(n,l.blockPresences,i,e,d,hk)),i+=u,d=h;let g=f;if({added:u,hasMore:f,newSize:h}=jg(t,l.wantlist.entries,s,e,d,pk),s+=u,d=h,c=!p&&!g&&!f,c||(l.wantlist.full=!1),yield Gs.encode(l),c)break}}function jg(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>dk)throw new Mf("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 fk(r){return Xg(3,fa.encode(r))}function hk(r){return Xg(4,ha.encode(r))}function pk(r){return Xg(1,da.encode(r))}function Xg(r,e){let t=he(r),n=he(e.byteLength);return t+n+e.byteLength}var Bf=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??[ll],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 un(`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=vt();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 Ks(s,{maxDataLength:this.maxIncomingMessageSize}))try{let a=Gs.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(Lr(Ho(this.findProviders(e,t),t?.maxProviders??3),async n=>this.connectTo(n.id,t))).catch(n=>{this.log.error(n)})}async sendMessage(e,t,n){if(!this.running)throw new Error("network isn't running");let o=this.sendQueue.queue.find(s=>e.equals(s.options.peerId)&&s.status==="queued");if(o!=null){o.options.message=g9(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,ll,s);await a.closeRead();try{for(let c of y9(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 Ur("Network isn't running");t?.onProgress?.(new H("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),Xt(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(ll))return!0;throw new pi(`${e} did not support ${ll}`)}})]);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 w9=Symbol.for("nodejs.util.inspect.custom"),Sk=114,ul=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()})`}[ku]=!0;toString(){return this.string==null&&(this.string=De.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return G.createV1(Sk,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")}[w9](){return`PeerId(${this.toString()})`}},dl=class extends ul{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},fl=class extends ul{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},hl=class extends ul{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},Ak=2336,pl=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=dt.digest(C(this.url))}[w9](){return`PeerId(${this.url})`}[ku]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return G.createV1(Ak,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=R(e)),e.toString()===this.toString())}};var Ik=114,b9=2336;function Me(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=ke(De.decode(`z${r}`));else{if(r.startsWith("k51qzi5uqu5")||r.startsWith("kzwfwjn5ji4")||r.startsWith("k2k4r8")||r.startsWith("bafz"))return Jr(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=ke(e.decode(r))}return Ze(t)}function xn(r){if(r.type==="Ed25519")return new fl({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new hl({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new dl({multihash:r.toCID().multihash,publicKey:r});throw new Fr}function E9(r){return xn(r.publicKey)}function Ze(r){if(_k(r))return new dl({multihash:r});if(Tk(r))try{let e=sd(r);if(e.type==="Ed25519")return new fl({multihash:r,publicKey:e});if(e.type==="secp256k1")return new hl({multihash:r,publicKey:e})}catch{let t=R(r.digest);return new pl(new URL(t))}throw new bo("Supplied PeerID Multihash is invalid")}function Jr(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==Ik&&r.code!==b9)throw new Au("Supplied PeerID CID is invalid");if(r.code===b9){let e=R(r.multihash.digest);return new pl(new URL(e))}return Ze(r.multihash)}function Tk(r){return r.code===dt.code}function _k(r){return r.code===ze.code}function Ys(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 Uf(r){let e=ke(De.decode(`z${r}`));return Ze(e)}var Ut=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 Ys(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 Ys(this.map.values(),e=>e.key)}values(){return Ys(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 Ys(this.set.entries(),e=>{let t=Uf(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=Uf(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return Ys(this.set.values(),e=>Uf(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 Qg(){return new xr}var Ff=class{filter;constructor(e,t){this.filter=Et(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 Zg(r,e=.001){return new Ff(r,e)}var Jg=class extends Ut{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 eo(r){let{name:e,metrics:t}=r,n;return t!=null?n=new Jg({name:e,metrics:t}):n=new Ut,n}var to=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=rt.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=rt.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=rt.encode(e.multihash.bytes);this.blocks.set(n,t)}};function Ck(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 x9=Ck;function e3(r){return x9([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var $f=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=R(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===Ye.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===Ye.WantHave&&(n.wantType==null||n.wantType===Ye.WantBlock);a&&c&&(i.status="want"),i.priority=n.priority,i.wantType=n.wantType??Ye.WantBlock,i.sendDontHave=n.sendDontHave??!1;continue}this.wants.set(s,{cid:o,priority:n.priority,wantType:n.wantType??Ye.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=R(e.multihash.bytes,"base64");return this.wants.has(t)}async sendBlocksToPeer(e){let t=new to,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===Ye.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:e3(i.cid)})):(this.log("sending have for %c",i.cid),t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Dr.HaveBlock})):(this.log("sending block for %c",i.cid),n.add(s),t.addBlock(i.cid,{data:a,prefix:e3(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:Dr.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 Kf=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=eo({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 $f({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 t3=class extends zs{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}}toFilterKey(e){return e.peerId.toMultihash().bytes}equals(e,t){return e.peerId.equals(t.peerId)}async convertToProvider(e,t,n){if(Rt(e))return{peerId:e,routing:t};if(await this.libp2p.isDialable(e)!==!1)try{return{peerId:(await this.libp2p.dial(e,n)).remotePeer,routing:t}}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 v9(r,e){return new t3(r,e)}var Vf=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 kk(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 S9=kk;var Hf=class extends ie{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),this.peers=eo({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=ot({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=R(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,priority:t.priority??1,wantType:t.wantType??Ye.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,o)),o.wantType===Ye.WantHave&&t.wantType===Ye.WantBlock&&(o.wantType=Ye.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===Ye.WantBlock?(await Xt(this,"block",t?.signal,{filter:a=>ee(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await Xt(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 to;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=R(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new to;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Ye.WantHave,priority:1}),await this.network.sendMessage(t,o),(await Xt(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:Ye.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new to;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Ye.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await Xt(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=R(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=S9(o.prefix),i=s[0],a=s[1],c=s[2],l=s[3],d=c===ze.code?ze: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=R(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===Dr.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new to(!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:Ye.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 qf=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 Vf(e),this.network=new Bf(e,t),this.peerWantLists=new Kf({...e,network:this.network},t),this.wantList=new Hf({...e,network:this.network},t)}createSession(e={}){return v9({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 A9=(r,e={})=>new qf(r,e);var r3=class{name="bitswap";bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=A9(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 n3(r={}){return e=>new r3(e,r)}var Pk=[6,53,56,54,55];function I9(r){return C9("sni",r)?.value}function T9(r){let e=C9("tcp",r)?.value;return e==null?"":`:${e}`}function C9(r,e){return e.find(t=>t.name===r)}function _9(r){return r.some(({code:e})=>e===448)}function en(r,e){let t=k9[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 k9={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://${en(t,e)}:${r.value}`},udp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`udp://${en(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`${en(t,e)}`},p2p:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${en(t,e)}`},http:(r,e)=>{let t=_9(e),n=I9(e),o=T9(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=en(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=en(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 en(t,e)},sni:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return en(t,e)},https:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=en(t,e);return n=n?.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=_9(e),n=I9(e),o=T9(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=en(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=en(t,e);return n=n?.replace("tcp://",""),`wss://${n}`}};function qo(r,e){let n=q(r).getComponents(),o=n.pop();if(o==null)throw new Error("Unexpected end of multiaddr");let s=k9[o.name];if(s==null)throw new Error(`No interpreter found for ${o.name}`);let i=s(o,n)??"";return e?.assumeHttp!==!1&&Pk.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 _e=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)}}),P9=r=>({match:e=>r.match(e)===!1?e:!1}),ge=r=>({match:e=>{let t=r.match(e);return t===!1?e:t}}),Ft=(...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}}),ve=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e}});function Ce(...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 Rk=se(421),R9=Ce(Rk),zf=se(54),Gf=se(55),Yf=se(56),s3=se(53),pX=Ce(zf,ge(se(421))),mX=Ce(Gf,ge(se(421))),gX=Ce(Yf,ge(se(421))),jf=Ce(Ft(s3,Yf,zf,Gf),ge(se(421))),L9=ve(se(4),ge(se(43))),D9=ve(ge(se(42)),se(41),ge(se(43))),i3=Ft(L9,D9),js=Ft(i3,s3,zf,Gf,Yf),N9=Ce(Ft(i3,ve(Ft(s3,Yf,zf,Gf),ge(se(421))))),a3=Ce(L9),c3=Ce(D9),O9=Ce(i3),l3=ve(js,se(6)),ml=ve(js,se(273)),Xs=Ce(ve(l3,ge(se(421)))),yX=Ce(ml),u3=ve(ml,_e(460),ge(se(421))),Xf=ve(ml,_e(461),ge(se(421))),Lk=Ft(u3,Xf),wX=Ce(u3),M9=Ce(Xf),o3=Ft(js,l3,ml,u3,Xf),B9=Ft(ve(o3,_e(477),ge(se(421)))),ro=Ce(B9),U9=Ft(ve(o3,_e(478),ge(se(421))),ve(o3,_e(448),ge(se(449)),_e(477),ge(se(421)))),Qs=Ce(U9),F9=ve(ml,_e(280),ge(se(466)),ge(se(466)),ge(se(421))),gl=Ce(F9),$9=ve(Xf,_e(465),ge(se(466)),ge(se(466)),ge(se(421))),d3=Ce($9),Wf=Ft(B9,U9,ve(l3,ge(se(421))),ve(Lk,ge(se(421))),ve(js,ge(se(421))),F9,$9,se(421)),pa=Ce(Wf),Dk=ve(ge(Wf),_e(290),P9(_e(281)),ge(se(421))),yt=Ce(Dk),Nk=Ft(ve(Wf,_e(290),_e(281),ge(se(421))),ve(Wf,_e(281),ge(se(421))),ve(_e(281),ge(se(421)))),yl=Ce(Nk),Ok=Ft(ve(js,se(6),_e(480),ge(se(421))),ve(js,_e(480),ge(se(421)))),K9=Ce(Ok),Mk=ve(js,Ft(ve(se(6,"443"),_e(480)),ve(se(6),_e(443)),ve(se(6),_e(448),_e(480)),ve(_e(448),_e(480)),_e(448),_e(443)),ge(se(421))),V9=Ce(Mk),Bk=Ft(ve(se(777),ge(se(421)))),bX=Ce(Bk),Uk=Ft(ve(se(400),ge(se(421)))),EX=Ce(Uk);function f3(r,e,t){return r.filter(n=>{if(V9.matches(n)||e&&K9.matches(n))return t||jf.matches(n)?!0:Qe(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*Qf(r,e,t,n,o,s={}){for await(let i of e.findProviders(r,s)){let a=f3(i.multiaddrs,n,o);if(a.length===0)continue;let c=new URL(qo(a[0]));yield new ma(c,{logger:t,transformRequestInit:s.transformRequestInit,routing:i.routing})}}async function H9(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 X;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 ma=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 rt.encode(t)}async getRawBlock(e,{signal:t,maxSize:n=q9}={}){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 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
14
14
  %s %s HTTP/1.1
15
15
  %s
16
16
  `,d.method??"GET",o,[...u.entries()].map(([f,h])=>`${f}: ${h}`).join(`
@@ -18,51 +18,51 @@ ${e}[Error list was empty]`,t.trim()}return Ry(r,e)}rr.formatters.e=r=>r==null?"
18
18
  HTTP/1.1 %d %s
19
19
  %s
20
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 H9(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 h3=class extends zs{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??Zf,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*Qf(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(Rt(e))return;let o=f3(Array.isArray(e)?e:[e],this.allowInsecure,this.allowLocal);if(o.length===0)return;let s=qo(o[0]);return new ma(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 W9(r,e){return new h3(r,e)}var eh=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??Zf,this.allowLocal=t.allowLocal??Jf,this.transformRequestInit=t.transformRequestInit}async retrieve(e,t={}){let n=[];for await(let o of Qf(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 W9({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure,transformRequestInit:this.transformRequestInit})}};var Zf=!1,Jf=!1,q9=2097152;function p3(r={}){return e=>new eh(e,r)}async function*wl(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 qk=Ln(th(),1);var tn=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},rh=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},ga=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},nh=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},oh=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},sh=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},bl=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=()=>We(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 Fk=Pr("ipns:utils"),z9=C("/ipns/");var $k=0,Kk=18;function G9(r){let e;if(r.pubKey!=null)try{e=tt(r.pubKey)}catch(t){throw Fk.error(t),t}if(e!=null)return e}function Y9(r){let e=C("ipns-signature:");return Oe([e,r])}function El(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 vn(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 tn("Missing data or signatureV2");let t=j9(e.data),n=Vk(t.Value),o=R(t.Validity);if(e.value!=null&&e.signatureV1!=null)return Hk(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 xl(r){return Oe([z9,r.bytes])}function ya(r){let e=ke(r.slice(z9.length));if(!ih(e,$k)&&!ih(e,Kk))throw new bo("Multihash in IPNS key was not identity or sha2-256");return e}function j9(r){let e=br(r);if(e.ValidityType===0)e.ValidityType=or.ValidityType.EOL;else throw new ga("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 Vk(r){let e=R(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 oh("Value must be a valid content path starting with /")}function Hk(r){if(r.data==null)throw new sh("Record data is missing");let e=j9(r.data);if(!ee(e.Value,r.value??new Uint8Array(0)))throw new tn('Field "value" did not match between protobuf and CBOR');if(!ee(e.Validity,r.validity??new Uint8Array(0)))throw new tn('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new tn('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new tn('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new tn('Field "ttl" did not match between protobuf and CBOR')}function ih(r,e){return r.code===e}var mQ=Pr("ipns"),gQ=300*1e9,Wk="/ipns/",yQ=Wk.length;var X9=Ln(th(),1);var ah=Pr("ipns:validator"),zk=1024*10;async function Gk(r,e){let t=vn(e),n;try{let o=Y9(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw ah.error("record signature verification failed"),new tn("Record signature verification failed");if(t.validityType===or.ValidityType.EOL){if(X9.default.fromString(t.validity).toDate().getTime()<Date.now())throw ah.error("record has expired"),new rh("record has expired")}else if(t.validityType!=null)throw ah.error("the validity type is unsupported"),new ga("The validity type is unsupported");ah("ipns record for %s is valid",t.value)}async function ch(r,e){if(e.byteLength>zk)throw new nh("The record is too large");let t=ya(r),n;ih(t,0)&&(n=sd(t));let o=vn(e),s=G9(o)??n;if(s==null)throw new bl("Could not extract public key from IPNS record or routing key");let i=xl(s.toMultihash());if(!ee(i,r))throw new bl("Embedded public key did not match routing key");await Gk(s,e)}var lh=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*wa(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)),bi(s)&&(s=s.subarray()),o+=n.decode(s,{stream:!0}),o.length>(e?.maxMessageLength??o.length))throw new lh("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 Zs=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},Nr=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function Yk(r){return r[Symbol.asyncIterator]!=null}function jk(r){if(Yk(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var Q9=jk;var Z9=C("/ipns/");function J9(r){return ee(r.subarray(0,Z9.byteLength),Z9)}var uh=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){try{yield*Lr(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[],routing:"delegated-http-routing-v1"}))}catch(n){if(n instanceof Le)return;throw n}}async provide(){}async cancelReprovide(){}async put(e,t,n){if(!J9(e))return;let o=ya(e),s=G.createV1(114,o),i=vn(t);await this.client.putIPNS(s,i,n)}async get(e,t){if(!J9(e))throw new Le("Not found");let n=ya(e),o=G.createV1(114,n);try{let s=await this.client.getIPNS(o,t);return El(s)}catch(s){throw s.name==="BadResponseError"?new Le("Not found"):s}}toString(){return`DelegatedRoutingV1HttpApiClientContentRouting(${this.client.url})`}},dh=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await Q9(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new Le("Not found")}async*getClosestPeers(e,t={}){let n;try{n=G.decode(e)}catch{try{n=Ze(He.decode(e))}catch{n=G.createV1(Mn,dt.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 fh={concurrentRequests:4,timeout:3e4,cacheTTL:300*1e3,cacheName:"delegated-routing-v1-cache"},hh=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 ds({concurrency:t.concurrentRequests??fh.concurrentRequests}),this.inFlightRequests=new Map,this.url=t.url instanceof URL?t.url:new URL(t.url),this.timeout=t.timeout??fh.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new uh(this),this.peerRouting=new dh(this),this.cacheName=t.cacheName??fh.cacheName,this.cacheTTL=t.cacheTTL??fh.cacheTTL}get[Dn](){return this.contentRouting}get[On](){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 Zs("Request does not conform to schema or semantic constraints"):new Nr(`Unexpected status code: ${d.status}`)}let u=d.headers.get("Content-Type");if(u==null)throw new Nr("No Content-Type header received");if(d.body==null){if(u!=="application/x-ndjson")throw new Nr("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 wa(wl(d.body))){let h=this.#e(f);h!=null&&(a++,yield h)}else throw new Nr(`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 Zs("Request does not conform to schema or semantic constraints");if(l.body==null)throw new Nr("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 wa(wl(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(Rt(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 Zs("Request does not conform to schema or semantic constraints");if(d.body==null)throw new Nr("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 wa(wl(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 Le("No matching records found");if(l.status===422)throw new Zs("Request does not conform to schema or semantic constraints");if(!l.ok)throw new Nr(`Unexpected status code: ${l.status}`);let d=l.headers.get("Content-Type");if(d==null||!d.includes("application/vnd.ipfs.ipns-record"))throw new Le("No matching records found");if(l.body==null)throw new Nr("GET ipns response had no body");let u=await l.arrayBuffer(),f=new Uint8Array(u,0,u.byteLength);return t.validate!==!1&&await ch(xl(e.multihash),f),vn(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=El(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 Nr("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 ew(r){return e=>new hh(e,r)}function g3(r){return{url:"https://delegated-ipfs.dev",filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var tw="[a-fA-F\\d:]",Wo=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${tw})|(?<=${tw})(?=\\s|$))`:"",rn="(?: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}",st="[a-fA-F\\d]{1,4}",ph=`
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
22
  (?:
23
- (?:${st}:){7}(?:${st}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
24
- (?:${st}:){6}(?:${rn}|:${st}|:)| // 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
- (?:${st}:){5}(?::${rn}|(?::${st}){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
- (?:${st}:){4}(?:(?::${st}){0,1}:${rn}|(?::${st}){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
- (?:${st}:){3}(?:(?::${st}){0,2}:${rn}|(?::${st}){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
- (?:${st}:){2}(?:(?::${st}){0,3}:${rn}|(?::${st}){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
- (?:${st}:){1}(?:(?::${st}){0,4}:${rn}|(?::${st}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
30
- (?::(?:(?::${st}){0,5}:${rn}|(?::${st}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
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
31
  )(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
32
- `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),Xk=new RegExp(`(?:^${rn}$)|(?:^${ph}$)`),Qk=new RegExp(`^${rn}$`),Zk=new RegExp(`^${ph}$`),y3=r=>r&&r.exact?Xk:new RegExp(`(?:${Wo(r)}${rn}${Wo(r)})|(?:${Wo(r)}${ph}${Wo(r)})`,"g");y3.v4=r=>r&&r.exact?Qk:new RegExp(`${Wo(r)}${rn}${Wo(r)}`,"g");y3.v6=r=>r&&r.exact?Zk:new RegExp(`${Wo(r)}${ph}${Wo(r)}`,"g");var w3=y3;function b3(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function rw(){return!1}var{toString:Jk}=Object.prototype;function E3(r){return Jk.call(r)==="[object RegExp]"}var nw={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function x3(r,e={}){if(!E3(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(nw).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?nw[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function v3(r,e,{timeout:t}={}){try{return b3(()=>x3(r).test(e),{timeout:t})()}catch(n){if(rw(n))return!1;throw n}}var eP=15,tP=45,ow={timeout:400};function S3(r){return r.length>tP?!1:v3(w3.v6({exact:!0}),r,ow)}function sw(r){return r.length>eP?!1:v3(w3.v4({exact:!0}),r,ow)}var iw={http:"80",https:"443",ws:"80",wss:"443"},rP=["http","https","ws","wss"];function mh(r,e){e=e??{};let t=e.defaultDnsType??"dns",{scheme:n,hostname:o,port:s,path:i}=nP(r),a=[oP(o,t),sP(s,n),iP(n)];i!=null&&a.push(aP(i));let c="/"+a.filter(l=>!!l).reduce((l,d)=>l.concat(d),[]).join("/");return q(c)}function nP(r){let[e]=r.split(":");rP.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=cP(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 oP(r,e){if(!(r==null||r==="")){if(sw(r))return["ip4",r];if(S3(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(S3(t))return["ip6",t]}return[e,r]}}function sP(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function iP(r){if(r.match(/^tcp$|^udp$/)==null)return r==="https"?["/tls/http"]:r==="wss"?["/tls/ws"]:[r]}function aP(r){if(!(r==null||r===""))return["http-path",encodeURIComponent(r)]}function cP(r){if(!(r==null||r===""||iw[r]==null))return iw[r]}var lP=["https://trustless-gateway.link","https://4everland.io"],uP=2336;function dP(r){return r=r.toString(),{id:Jr(G.createV1(uP,dt.digest(C(r)))),multiaddrs:[mh(r)]}}function fP(r){return new URL(R(r.id.toMultihash().digest))}var A3=class{gateways;shuffle;constructor(e={}){this.gateways=(e.gateways??lP).map(t=>dP(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=>fP(e)).join(", ")}])`}};function I3(r={}){return new A3(r)}var T3=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 _3(r){return new T3(r)}function hP(r){return r[Symbol.asyncIterator]!=null}function pP(r){if(hP(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 no=pP;function mP(r){return typeof r?.then=="function"}var vl=class extends Jn{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=no(t);if(mP(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(ut.encode(e.multihash.bytes),t),e}*get(e,t){t?.signal?.throwIfAborted();let n=this.data.get(ut.encode(e.multihash.bytes));if(n==null)throw new Rr;yield*n}has(e,t){return t?.signal?.throwIfAborted(),this.data.has(ut.encode(e.multihash.bytes))}async delete(e,t){t?.signal?.throwIfAborted(),this.data.delete(ut.encode(e.multihash.bytes))}*getAll(e){e?.signal?.throwIfAborted();for(let[t,n]of this.data.entries())yield{cid:G.createV1(Mn,ke(ut.decode(t))),bytes:(async function*(){yield*n})()},e?.signal?.throwIfAborted()}};var sJ=Pr("blockstore:core:tiered");var aw="SHARDING";function yP(r){return r[Symbol.asyncIterator]!=null}function wP(r,e){return yP(r)?(async function*(){yield*(await no(r)).sort(e)})():(function*(){yield*no(r).sort(e)})()}var gh=wP;var oo=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=Zr(n,s=>s.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>Zr(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>gh(o,s),n)),e.offset!=null){let o=0,s=e.offset;n=Zr(n,()=>o++>=s)}return e.limit!=null&&(n=Ho(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=Zr(n,s=>s.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>Zr(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>gh(o,s),n)),e.offset!=null){let o=e.offset,s=0;n=Zr(n,()=>s++>=o)}return e.limit!=null&&(n=Ho(n,e.limit)),n}};var Js=class extends oo{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 Fe(n),value:o},t?.signal?.throwIfAborted()}*_allKeys(e,t){t?.signal?.throwIfAborted();for(let n of this.data.keys())yield new Fe(n),t?.signal?.throwIfAborted()}};var BJ=new Fe(aw);var QJ=Pr("datastore:core:tiered");async function lw(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 Sl;(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)})(Sl||(Sl={}));var yh=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var vr=class r{static createFromProtobuf=e=>{let t=Sl.decode(e),n=tt(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t,n)=>{if(t==null)throw new Error("Missing private key");let o=e.domain,s=e.codec,i=e.marshal(),a=uw(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 yh("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=Sl.encode({publicKey:ft(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=uw(e,this.payloadType,this.payload);return this.publicKey.verify(n.subarray(),this.signature,t)}},uw=(r,e,t)=>{let n=C(r),o=Mt(n.byteLength),s=Mt(e.length),i=Mt(t.length);return new X(o,n,s,e,i,t)};var dw="libp2p-peer-record",fw=Uint8Array.from([3,1]);var Al;(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 Ne('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)})(Al||(Al={}));function hw(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 Qt=class r{static createFromProtobuf=e=>{let t=Al.decode(e),n=Ze(ke(t.peerId)),o=(t.addresses??[]).map(i=>q(i.multiaddr)),s=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:s})};static DOMAIN=dw;static CODEC=fw;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=Al.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||!hw(this.multiaddrs,e.multiaddrs))}};var so;(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),bh.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=bh.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),wh.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 Ne('Decode error - map field "addresses" had too many elements');a.addresses.push(wh.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 Ne('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 Ac('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 Ac('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)})(so||(so={}));var wh;(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)})(wh||(wh={}));var bh;(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)})(bh||(bh={}));function bP(r,e){if(r.publicKey!=null||e.publicKey==null)return r;let t;r.type==="RSA"&&(t=r.toMultihash());let n=tt(e.publicKey,t);return xn(n)}function pw(r,e,t){let n=so.decode(e);return ba(r,n,t)}function ba(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:bP(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 mw(r,e){return EP(r.addresses,e.addresses)&&xP(r.protocols,e.protocols)&&vP(r.publicKey,e.publicKey)&&SP(r.peerRecordEnvelope,e.peerRecordEnvelope)&&AP(r.metadata,e.metadata)&&IP(r.tags,e.tags)}function EP(r,e){return yw(r,e,(t,n)=>!(t.isCertified!==n.isCertified||!ee(t.multiaddr,n.multiaddr)))}function xP(r,e){return yw(r,e,(t,n)=>t===n)}function vP(r,e){return gw(r,e)}function SP(r,e){return gw(r,e)}function AP(r,e){return ww(r,e,(t,n)=>ee(t,n))}function IP(r,e){return ww(r,e,(t,n)=>t.value===n.value&&t.expiry===n.expiry)}function gw(r,e){return r==null&&e==null?!0:r!=null&&e!=null?ee(r,e):!1}function yw(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 ww(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 C3="/peers/";function Il(r){if(!Rt(r)||r.type==null)throw new A("Invalid PeerId");let e=r.toCID().toString();return new Fe(`${C3}${e}`)}async function bw(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)),!yn(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 xh(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=Eh(f,{validate:Ew})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=Eh(f,{validate:xw,map:vw})}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=Eh([...a.entries()],{validate:Ew})}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=Eh([...h.entries()],{validate:xw,map:vw})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let d;o?.id.publicKey!=null?d=ft(o.id.publicKey):e.publicKey!=null?d=ft(e.publicKey):r.publicKey!=null&&(d=ft(r.publicKey));let u={addresses:await bw(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 Eh(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 Ew(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 xw(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 vw(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 Sw(r){let e=r.toString().split("/")[2],t=G.parse(e,ut);return Jr(t)}function k3(r,e,t){let n=Sw(r);return pw(n,e,t)}function TP(r,e){return{prefix:C3,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(k3(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(k3(n.key,n.value,e),k3(o.key,o.value,e)))}}var vh=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=eo({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:al({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(Il(e),t)}async load(e,t){let n=Il(e),o=await this.datastore.get(n,t),s=so.decode(o);if(this.#r(e,s))throw await this.datastore.delete(n,t),new Le;return ba(e,s,this.peerId.equals(e)?1/0:this.maxAddressAge)}async save(e,t,n){let o=await this.#e(e,n),s=await xh(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 xh(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 xh(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(TP(e??{},this.maxAddressAge),e)){let o=Sw(t);if(o.equals(this.peerId))continue;let s=so.decode(n);if(this.#r(o,s)){await this.datastore.delete(t,e);continue}yield ba(o,s,this.peerId.equals(o)?1/0:this.maxAddressAge)}}async#e(e,t){try{let n=Il(e),o=await this.datastore.get(n,t),s=so.decode(o);if(this.#r(e,s))throw await this.datastore.delete(n,t),new Le;return{peerPB:s,peer:ba(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=so.encode(t);return await this.datastore.put(Il(e),s,o),{peer:ba(e,t,this.maxAddressAge),previous:n?.peer,updated:n==null||!mw(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 P3=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 vh(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 no(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=Rt(t)?t:Rt(t?.expectedPeer)?t.expectedPeer:void 0,s=Rt(t)||t===void 0?n:t,i=await vr.openAndCertify(e,Qt.DOMAIN,s),a=Jr(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=Qt.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=Qt.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 Aw(r,e={}){return new P3(r,e)}var Iw=864e13;var Sh=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:dns-mappings"),this.mappings=ot({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=Ki(n)===!0;this.mappings.set(n,{domain:e,verified:o,expires:o?Iw-Date.now():0,lastVerified:o?Iw-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(!xt(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 Ah=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:ip-mappings"),this.mappings=ot({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:zr(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(!xt(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(!xt(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(!xt(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 _P={maxObservedAddresses:10},Ih=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=ot({name:"libp2p_address_manager_observed_addresses",metrics:e.metrics}),this.maxObservedAddresses=t.maxObservedAddresses??_P.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&&(Qe(e)||o7(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 CP={maxObservedAddresses:10},Th=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=ot({name:"libp2p_address_manager_transport_addresses",metrics:e.metrics}),this.maxObservedAddresses=t.maxObservedAddresses??CP.maxObservedAddresses}get(e,t){if(Qe(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:!xt(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(!xt(e))return e.toString();let t=oe(e);return`${t.host}-${t.port}-${t.protocol}`}};var Tw=6e4,_w={maxObservedAddresses:10,addressVerificationTTL:Tw*10,addressVerificationRetry:Tw*5},kP=r=>r;function R3(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 _h=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 Ih(e,t),this.dnsMappings=new Sh(e,t),this.ipMappings=new Ah(e,t),this.transportAddresses=new Th(e,t),this.announceFilter=t.announceFilter??kP,this.observedAddressFilter=Et(1024),this.addressVerificationTTL=t.addressVerificationTTL??_w.addressVerificationTTL,this.addressVerificationRetry=t.addressVerificationRetry??_w.addressVerificationRetry,this._updatePeerStoreAddresses=Wn(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=R3(e,this.components.peerId),!this.ipMappings.has(e)&&(this.dnsMappings.has(e)||this.observed.add(e)))}confirmObservedAddr(e,t){e=R3(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=R3(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${zr(n)?4:6}/${n}/${s}/${o}`)}removePublicAddressMapping(e,t,n,o=t,s="tcp"){this.ipMappings.remove(q(`/ip${zr(n)?4:6}/${n}/${s}/${o}`))&&this._updatePeerStoreAddresses()}maybeUpgradeToIPMapping(e){if(this.ipMappings.has(e)||!xt(e))return!1;let t=oe(e);if(t.type!=="ip4"||Ki(t.host)===!0)return!1;let n=this.components.transportManager.getListeners(),o=[s=>ro.exactMatch(s)||Qs.exactMatch(s),s=>Xs.exactMatch(s),s=>M9.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=>!Oc(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 Cw;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(Cw||(Cw={}));var Ch=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},kh=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},Ea=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"}},Ph=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},Rh=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},Lh=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},_l=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},Dh=class extends Error{constructor(e="No transport was configured to listen on this address"){super(e),this.name="UnsupportedListenAddressError"}},Nh=class extends Error{constructor(e="Configured listen addresses could not be listened on"){super(e),this.name="UnsupportedListenAddressesError"}},Oh=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},Mh=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},Bh=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},zo=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},ei=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},Uh=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}},Fh=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}};var L3=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=ra())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>Pu(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")}},PP=["metrics","connectionProtector","dns"],RP=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function kw(r={}){let e=new L3(r);return new Proxy(e,{get(n,o,s){if(typeof o=="string"&&!RP.includes(o)){let i=e.components[o];if(i==null&&!PP.includes(o))throw new Ch(`${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 Pw(r){let e={};for(let t of Object.values(r.components))for(let n of LP(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of DP(t))if(e[n]!==!0)throw new kh(`Service "${NP(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function LP(r){return Array.isArray(r?.[me])?r[me]:[]}function DP(r){return Array.isArray(r?.[ur])?r[ur]:[]}function NP(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}function Rw(r={}){return r.denyDialMultiaddr==null&&(r.denyDialMultiaddr=e=>ro.matches(e)?!0:Qe(e)),r}var OP=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 MP(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}=OP(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=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function Cl(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=MP(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}function $h(r){if(Rt(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(!yn(o))throw new ln("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=>!R9.exactMatch(n)),{peerId:t,multiaddrs:e}}var BP=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function Lw(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??BP;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}function kl(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 Ns(e.host,t)}function D3(r){return!yt.exactMatch(r)}function Kh(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=>D3(s)))return n}var Vh=class{connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.allow=(t.allow??[]).map(n=>kl(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 Ut;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(xt(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 Lw(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 Dw="last-dial-failure",Nw="last-dial-success";var Ow=100,Hh=50;function UP(r,e){let t=Xs.exactMatch(r.multiaddr),n=Xs.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=Qs.exactMatch(r.multiaddr),s=Qs.exactMatch(e.multiaddr);if(o&&!s)return-1;if(!o&&s)return 1;let i=ro.exactMatch(r.multiaddr),a=ro.exactMatch(e.multiaddr);if(i&&!a)return-1;if(!i&&a)return 1;let c=yl.exactMatch(r.multiaddr),l=yl.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let d=gl.exactMatch(r.multiaddr),u=gl.exactMatch(e.multiaddr);if(d&&!u)return-1;if(!d&&u)return 1;let f=d3.exactMatch(r.multiaddr),h=d3.exactMatch(e.multiaddr);return f&&!h?-1:!f&&h?1:0}function FP(r,e){let t=Oc(r.multiaddr),n=Oc(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function $P(r,e){let t=Qe(r.multiaddr),n=Qe(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function KP(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function VP(r,e){let t=yt.exactMatch(r.multiaddr),n=yt.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Mw(r){return r.sort(UP).sort(KP).sort(VP).sort($P).sort(FP)}var N3=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=$u()),this.dns)}},Pl=new N3;async function O3(r,e,t){let n=t.depth??0;if(n>(t.maxRecursiveDepth??32))throw new Fh("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 O3(c,e,{...t,depth:n+1}))}return o===!1&&s.push(r),s}var Rl={maxParallelDials:Hh,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:1e4,resolvers:{dnsaddr:Pl}},qh=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;resolvers;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??Rl.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??Rl.maxDialQueueLength,this.dialTimeout=t.dialTimeout??Rl.dialTimeout,this.connections=t.connections??new Ut,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.resolvers=t.resolvers??Rl.resolvers,this.shutDownController=new AbortController,this.shutDownController.signal,this.queue=new Qd({concurrency:t.maxParallelDials??Rl.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("failure",n=>{n.detail?.error.name!==Vt.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}=$h(e);if(n!=null&&t.force!==!0){let i=Kh(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 Eo("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??F3,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 Eo("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:{[Nw]: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:{[Dw]: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 un(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 Eo("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new _l("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 O3(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 Oh("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?Mw(l):l.sort(this.addressSorter);if(d.length===0)throw new _l("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=>!yt.matches(o.multiaddr))!=null:!0}catch{}return!1}};var HP=Object.prototype.toString,qP=r=>HP.call(r)==="[object Error]",WP=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 $3(r){if(!(r&&qP(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:WP.has(t)}function zP(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 Wh(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 K3=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 GP(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 Bw(r,e){return Number.isFinite(e)?e-(performance.now()-r):e}async function YP({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 K3)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),Bw(n,a)<=0)throw s;let l=await o.shouldConsumeRetry(c),d=Bw(n,a);if(d<=0||i<=0)throw s;if(s instanceof TypeError&&!$3(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=GP(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 V3(r,e={}){if(e={...e},zP(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,Wh("factor",e.factor,{min:0,allowInfinity:!1}),Wh("minTimeout",e.minTimeout,{min:0,allowInfinity:!1}),Wh("maxTimeout",e.maxTimeout,{min:0,allowInfinity:!0}),Wh("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 YP({error:s,attemptNumber:t,retriesConsumed:n,startTime:o,options:e})&&n++}}throw new Error("Retry attempts exhausted without throwing an error.")}var zh=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);Uw(t)&&(this.queue.has(e)||this.queue.add(async n=>{await V3(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(us)&&(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=>Uw(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 Uw(r){for(let e of r.tags.keys())if(e.startsWith(us))return!0;return!1}var F3=50,H3={maxConnections:Ow,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},Gh=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??H3.maxConnections,this.maxConnections<1)throw new A("Connection Manager maxConnections must be greater than 0");this.connections=new Ut,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=>kl(q(n))),this.deny=(t.deny??[]).map(n=>kl(q(n))),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??H3.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new na({points:t.inboundConnectionThreshold??H3.inboundConnectionThreshold,duration:1}),this.connectionPruner=new Vh({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{allow:t.allow?.map(n=>q(n))}),this.dialQueue=new qh(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??Hh,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??1e4,resolvers:t.resolvers??{dnsaddr:Pl},connections:this.connections}),this.reconnectQueue=new zh({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 at(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 lt(this.reconnectQueue,this.dialQueue,this.connectionPruner);let e=[];for(let t of this.connections.values())for(let n of t)e.push(Promise.all([Cl(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 Ur("Not started");this.outboundPendingConnections++;try{t.signal?.throwIfAborted();let{peerId:n,multiaddrs:o}=$h(e);if(this.peerId.equals(n))throw new hi("Can not dial self");if(n!=null&&t.force!==!0){this.log("dial %p",n);let c=Kh(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??F3});if(s.status!=="open")throw new is("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 ln("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([Cl(o,"close",t),o.close(t)])}catch(s){o.abort(s)}}))}acceptIncomingConnection(e){if(this.deny.some(o=>{if(xt(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(xt(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(xt(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 QP=1e4,ZP="1.0.0",JP="ping",eR="ipfs",Fw=32,tR=!0,Yh=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??eR}/${JP}/${ZP}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??QP,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??tR,this.timeout=new Gr({...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=Cd(o);t=Date.now(),await Promise.all([s.write(Yt(Fw),{signal:n}),s.read({bytes:Fw,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 jh=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e,this.findProviders=e.metrics?.traceFunction("libp2p.contentRouting.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()}),getAttributesFromYieldedValue:(n,o)=>({...o,providers:[...Array.isArray(o.providers)?o.providers:[],n.id.toString()]})})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.contentRouting.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("libp2p.contentRouting.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.cancelReprovide,this.put=e.metrics?.traceFunction("libp2p.contentRouting.put",this.put.bind(this),{optionsIndex:2,getAttributesFromArgs:([n])=>({key:R(n,"base36")})})??this.put,this.get=e.metrics?.traceFunction("libp2p.contentRouting.get",this.get.bind(this),{optionsIndex:1,getAttributesFromArgs:([n])=>({key:R(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 Ea("No content routers available");let n=this,o=new xr;for await(let s of jt(...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 Ea("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 Ea("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 Ur;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 Ur;return Promise.any(this.routers.filter(n=>n.get instanceof Function).map(async n=>n.get(e,t)))}};var Xh=globalThis.CustomEvent??Event;async function*io(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 Xh("task-complete"))},m=>{g.done=!0,g.err=m,o.dispatchEvent(new Xh("task-complete"))})}c=!0,o.dispatchEvent(new Xh("task-complete"))}catch(p){l=p,o.dispatchEvent(new Xh("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 Qh=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:R(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 Ph("Should not try to find self");let n=this,o=jt(...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 Le}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Tl("No peer routers available");let n=this,o=Et(1024);for await(let s of io((async function*(){let i=jt(...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 Zh=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 Cl(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 q3=32,W3=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=ot({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 Rh(`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 Lh(`Handler already registered for protocol ${e}`);this.handlers.set(e,{handler:t,options:{maxInboundStreams:q3,maxOutboundStreams:W3,...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?.has(t)!==!1&&(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?.has(t.id)!==!1&&(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 e1=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=ot({name:"libp2p_transport_manager_transports",metrics:this.components.metrics}),this.listeners=ot({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??Xa.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 Uh(`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 Ur("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 Dh)});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})}),a3.matches(c)?t.ipv4.attempts++:c3.matches(c)&&t.ipv6.attempts++,n.push(l.listen(c).then(()=>{t.errors.delete(c.toString()),a3.matches(c)&&t.ipv4.success++,c3.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===Xa.NO_FATAL){this.log("failed to listen on any address but fault tolerance allows this");return}throw new Nh(`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:
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
33
  ${[...t.errors.entries()].map(([s,i])=>`
34
- ${s}: ${`${rR(i)}`.split(`
34
+ ${s}: ${`${XR(i)}`.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 rR(r){return r.stack!=null&&r.stack.trim()!==""?r.stack:r.message!=null?r.message:r.toString()}var Sn="/multistream/1.0.0";var nR=C(`
38
- `);async function Ll(r,e){let n=(await r.read(e)).subarray();if(n.byteLength===0||n[n.length-1]!==nR[0])throw new de("Missing newline");return R(n).trimEnd()}async function xa(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=Fo(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"]',Sn,i);let c=C(`${Sn}
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
39
  `),l=C(`${i}
40
- `);if(await o.writeV([c,l],t),n.trace("reading multistream-select header"),a=await Ll(o,t),n.trace('read "%s"',a),a!==Sn){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 Ll(o,t),n.trace('read "%s"',a),a===i)return n.trace('selected "%s" after negotiation',a),o.unwrap(),i}throw new pi(`Protocol selection failed - could not negotiate ${e}`)}async function va(r,e,t={}){e=Array.isArray(e)?e:[e];let n=r.log.newScope("mss:handle"),o=Fo(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){n.trace("reading incoming string");let s=await Ll(o,t);if(n.trace('read "%s"',s),s===Sn){n.trace('respond with "%s" for "%s"',Sn,s),await o.write(C(`${Sn}
42
- `),t),n.trace('responded with "%s" for "%s"',Sn,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 X(...e.map(a=>Qn.single(C(`${a}
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}
44
44
  `))),C(`
45
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 G3=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=D3(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 xo(n.local,n.error))})}[Symbol.toStringTag]="Connection";[I6]=!0;get streams(){return this.muxer?.streams??[]}get status(){return this.maConn.status}newStream=async(e,t={})=>{if(this.muxer==null)throw new zo("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 ja("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 xa(n,e,t),n.log("negotiated protocol %s",n.protocol)):n.log("pre-negotiated protocol %s",n.protocol);let o=iR(n.protocol,this.components.registrar,t),s=Vw(n.protocol,"outbound",this);if(s>o){let a=new mi(`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 va(t,l,{signal:n}),t.log("negotiated protocol %s",t.protocol)}else t.log("pre-negotiated protocol %s",t.protocol);let o=sR(t.protocol,this.components.registrar);if(Vw(t.protocol,"inbound",this)>o)throw new Iu(`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 ja("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 Hw(r,e){return new G3(r,e)}function sR(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 q3}function iR(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??W3}function Vw(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var t1=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;connectionCloseTimeout;constructor(e,t){this.components=e,this.connectionEncrypters=ot({name:"libp2p_upgrader_connection_encrypters",metrics:this.components.metrics}),t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=ot({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 Mh(`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 Bh("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(aR(n)){if(n.remotePeer==null)throw new ln(`${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 hi("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=Hw(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 va(e,n,t),s=this.connectionEncrypters.get(o);if(s==null)throw new ei(`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 ei(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 xa(e,n,t),s=this.connectionEncrypters.get(o);if(s==null)throw new ei(`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 ei(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 xa(e,o,n),i=t.get(s);if(i==null)throw new zo(`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 zo(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 va(e,o,n),i=t.get(s);if(i==null)throw new zo(`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 aR(r){return r.skipEncryption===!0}var r1="3.1.5",n1="js-libp2p";function o1(r,e){return`${r??n1}/${e??r1} browser/${globalThis.navigator.userAgent}`}var Dl=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??ra(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=e.nodeInfo?.name??n1,s=e.nodeInfo?.version??r1,i=this.components=kw({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:o,version:s,userAgent:e.nodeInfo?.userAgent??o1(o,s)},logger:this.logger,events:t,datastore:e.datastore??new Js,connectionGater:Rw(e.connectionGater),dns:e.dns});e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),this.peerStore=this.configureComponent("peerStore",Aw(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 t1(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 e1(this.components,e.transportManager)),this.configureComponent("connectionManager",new Gh(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new Yh(this.components,e.connectionMonitor)),this.configureComponent("registrar",new Jh(this.components)),this.configureComponent("addressManager",new _h(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 Qh(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 jh(this.components,{routers:c})),this.configureComponent("randomWalk",new Zh(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[Dn]!=null&&(this.log("registering service %s for content routing",l),c.push(u[Dn])),u[On]!=null&&(this.log("registering service %s for peer routing",l),a.push(u[On])),u[ls]!=null&&(this.log("registering service %s for peer discovery",l),u[ls].addEventListener?.("peer",f=>{this.#e(f)}))}Pw(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={}){yn(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=Oe([C("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),s=tt(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 Ww(r={}){r.privateKey??=await od("Ed25519");let e=new Dl({...await lw(r),peerId:E9(r.privateKey)});return r.start!==!1&&await e.start(),e}var cR=["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"];function zw(r){return r==null?!1:r instanceof Dl?!0:cR.every(e=>typeof r[e]=="function")}var Wb=Ln(tb(),1);var Y3={keyLength:64,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"};var Sa={};et(Sa,{create:()=>xR,derivedEmptyPasswordKey:()=>s1});var s1={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function xR(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=nt.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",s1,{name:"AES-GCM"},!0,["encrypt"]);try{let T={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},I=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(T,I,{name:e,length:t},!0,["encrypt"])}catch{m=await a.subtle.importKey("jwk",s1,{name:"AES-GCM"},!0,["encrypt"])}}else{let T={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},I=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(T,I,{name:e,length:t},!0,["encrypt"])}let w=await a.subtle.encrypt(g,m,u);return Oe([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 I={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(I,D,{name:e,length:t},!0,["decrypt"])}catch{w=await a.subtle.importKey("jwk",s1,{name:"AES-GCM"},!0,["decrypt"])}else{let I={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(I,D,{name:e,length:t},!0,["decrypt"])}let T=await a.subtle.decrypt(m,w,g);return new Uint8Array(T)}return{encrypt:c,decrypt:l}}var ye=Ln(rb());function ti(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 Go(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 c1(...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 X3(){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=ti(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,ti(s,8)-n}function nb(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=Go(i,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=Go(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 ob(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 Tse=Math.log(2);function l1(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function Q3(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 ho(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 Ml=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return Q3(this.items)}},Nl=[new Uint8Array([1])],sb="0123456789";var Ia="",Tn=new ArrayBuffer(0),Z3=new Uint8Array(0),Bl="EndOfContent",ab="OCTET STRING",cb="BIT STRING";function po(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):Z3}fromBER(n,o,s){let i=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!ho(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 co=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=Ia,warnings:n=[],valueBeforeDecode:o=Z3}={}){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)}}};co.NAME="baseBlock";var $t=class extends co{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'")}};$t.NAME="valueBlock";var u1=class extends po(co){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):Z3,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=Go(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(!ho(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=ti(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}}};u1.NAME="identificationBlock";var d1=class extends co{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(!ho(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=ti(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=Go(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}}};d1.NAME="lengthBlock";var Q={},Tt=class extends co{constructor({name:e=Ia,optional:t=!1,primitiveSchema:n,...o}={},s){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new u1(o),this.lenBlock=new d1(o),this.valueBlock=s?new s(o):new $t(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 Ml;t||lb(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 ob(t,n)}};Tt.NAME="BaseBlock";function lb(r){var e;if(r instanceof Q.Constructed)for(let t of r.valueBlock.value)lb(t)&&(r.lenBlock.isIndefiniteForm=!0);return!!(!((e=r.lenBlock)===null||e===void 0)&&e.isIndefiniteForm)}var f1=class extends Tt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor({value:e=Ia,...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}'`}};f1.NAME="BaseStringBlock";var h1=class extends po($t){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};h1.NAME="PrimitiveValueBlock";var ub,p1=class extends Tt{constructor(e={}){super(e,h1),this.idBlock.isConstructed=!1}};ub=p1;Q.Primitive=ub;p1.NAME="PRIMITIVE";function PR(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 Y1(r,e=0,t=r.length){let n=e,o=new Tt({},$t),s=new co;if(!ho(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=Tt;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=Q.EndOfContent;break;case 1:c=Q.Boolean;break;case 2:c=Q.Integer;break;case 3:c=Q.BitString;break;case 4:c=Q.OctetString;break;case 5:c=Q.Null;break;case 6:c=Q.ObjectIdentifier;break;case 10:c=Q.Enumerated;break;case 12:c=Q.Utf8String;break;case 13:c=Q.RelativeObjectIdentifier;break;case 14:c=Q.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=Q.Sequence;break;case 17:c=Q.Set;break;case 18:c=Q.NumericString;break;case 19:c=Q.PrintableString;break;case 20:c=Q.TeletexString;break;case 21:c=Q.VideotexString;break;case 22:c=Q.IA5String;break;case 23:c=Q.UTCTime;break;case 24:c=Q.GeneralizedTime;break;case 25:c=Q.GraphicString;break;case 26:c=Q.VisibleString;break;case 27:c=Q.GeneralString;break;case 28:c=Q.UniversalString;break;case 29:c=Q.CharacterString;break;case 30:c=Q.BmpString;break;case 31:c=Q.DATE;break;case 32:c=Q.TimeOfDay;break;case 33:c=Q.DateTime;break;case 34:c=Q.Duration;break;default:{let l=o.idBlock.isConstructed?new Q.Constructed:new Q.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?Q.Constructed:Q.Primitive}return o=PR(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 j1(r){if(!r.byteLength){let e=new Tt({},$t);return e.error="Input buffer has zero length",{offset:-1,result:e}}return Y1(ye.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function RR(r,e){return r?1:e}var An=class extends $t{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(!ho(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(;RR(this.isIndefiniteForm,n)>0;){let i=Y1(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===Bl)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===Bl?this.value.pop():this.warnings.push("No EndOfContent block encoded")),s}toBER(e,t){let n=t||new Ml;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}};An.NAME="ConstructedValueBlock";var db,Yo=class extends Tt{constructor(e={}){super(e,An),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(`
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(`
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} :`}};db=Yo;Q.Constructed=db;Yo.NAME="CONSTRUCTED";var m1=class extends $t{fromBER(e,t,n){return t}toBER(e){return Tn}};m1.override="EndOfContentValueBlock";var fb,g1=class extends Tt{constructor(e={}){super(e,m1),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};fb=g1;Q.EndOfContent=fb;g1.NAME=Bl;var hb,ri=class extends Tt{constructor(e={}){super(e,$t),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}`}};hb=ri;Q.Null=hb;ri.NAME="NULL";var y1=class extends po($t){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 ho(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,X3.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};y1.NAME="BooleanValueBlock";var pb,w1=class extends Tt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor(e={}){super(e,y1),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};pb=w1;Q.Boolean=pb;w1.NAME="BOOLEAN";var b1=class extends po(An){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=An.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===Bl){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(i!==ab)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?An.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};b1.NAME="OctetStringValueBlock";var J3,lo=class extends Tt{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},b1),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=Y1(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 Yo.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 J3&&e.push(t.valueBlock.valueHexView);return ye.BufferSourceConverter.concat(e)}};J3=lo;Q.OctetString=J3;lo.NAME=ab;var E1=class extends po(An){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=An.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===Bl){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==cb)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(!ho(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=Y1(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 An.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}}};E1.NAME="BitStringValueBlock";var mb,x1=class extends Tt{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},E1),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 Yo.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}`}}};mb=x1;Q.BitString=mb;x1.NAME=cb;var gb;function LR(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=c1(new Uint8Array([l%10]),s);break;default:s[i-u]=l%10}}return t[0]>0&&(s=c1(t,s)),s}function ib(r){if(r>=Nl.length)for(let e=Nl.length;e<=r;e++){let t=new Uint8Array([0]),n=Nl[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=c1(t,n)),Nl.push(n)}return Nl[r]}function DR(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 Ul=class extends po($t){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=X3.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(nb(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=DR(ib(n),t),i="-";break;default:t=LR(t,ib(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(i+=sb.charAt(t[c]));return a===!1&&(i+=sb.charAt(0)),i}};gb=Ul;Ul.NAME="IntegerValueBlock";Object.defineProperty(gb.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var Ol,uo=class extends Tt{constructor(e={}){super(e,Ul),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return l1(),BigInt(this.valueBlock.toString())}static fromBigInt(e){l1();let t=BigInt(e),n=new Ml,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 Ol({valueHex:n.final()})}convertToDER(){let e=new Ol({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new Ol({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};Ol=uo;Q.Integer=Ol;uo.NAME="INTEGER";var yb,v1=class extends uo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};yb=v1;Q.Enumerated=yb;v1.NAME="ENUMERATED";var Fl=class extends po($t){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(!ho(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=ti(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){l1();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=Go(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}}};Fl.NAME="sidBlock";var S1=class extends $t{constructor({value:e=Ia,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new Fl;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 Q3(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 Fl;if(o>Number.MAX_SAFE_INTEGER){l1();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}};S1.NAME="ObjectIdentifierValueBlock";var wb,In=class extends Tt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,S1),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};wb=In;Q.ObjectIdentifier=wb;In.NAME="OBJECT IDENTIFIER";var $l=class extends po(co){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(!ho(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=ti(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=Go(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}}};$l.NAME="relativeSidBlock";var A1=class extends $t{constructor({value:e=Ia,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new $l;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 Q3(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 $l;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}};A1.NAME="RelativeObjectIdentifierValueBlock";var bb,I1=class extends Tt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,A1),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};bb=I1;Q.RelativeObjectIdentifier=bb;I1.NAME="RelativeObjectIdentifier";var Eb,ir=class extends Yo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};Eb=ir;Q.Sequence=Eb;ir.NAME="SEQUENCE";var xb,T1=class extends Yo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};xb=T1;Q.Set=xb;T1.NAME="SET";var _1=class extends po($t){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=Ia}toJSON(){return{...super.toJSON(),value:this.value}}};_1.NAME="StringValueBlock";var C1=class extends _1{};C1.NAME="SimpleStringValueBlock";var Zt=class extends f1{constructor({...e}={}){super(e,C1)}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 k1=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}};k1.NAME="Utf8StringValueBlock";var vb,fo=class extends k1{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};vb=fo;Q.Utf8String=vb;fo.NAME="UTF8String";var P1=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))}};P1.NAME="BmpStringValueBlock";var Sb,R1=class extends P1{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};Sb=R1;Q.BmpString=Sb;R1.NAME="BMPString";var L1=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=Go(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}};L1.NAME="UniversalStringValueBlock";var Ab,D1=class extends L1{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};Ab=D1;Q.UniversalString=Ab;D1.NAME="UniversalString";var Ib,N1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};Ib=N1;Q.NumericString=Ib;N1.NAME="NumericString";var Tb,O1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};Tb=O1;Q.PrintableString=Tb;O1.NAME="PrintableString";var _b,M1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};_b=M1;Q.TeletexString=_b;M1.NAME="TeletexString";var Cb,B1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};Cb=B1;Q.VideotexString=Cb;B1.NAME="VideotexString";var kb,U1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};kb=U1;Q.IA5String=kb;U1.NAME="IA5String";var Pb,F1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};Pb=F1;Q.GraphicString=Pb;F1.NAME="GraphicString";var Rb,Kl=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};Rb=Kl;Q.VisibleString=Rb;Kl.NAME="VisibleString";var Lb,$1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};Lb=$1;Q.GeneralString=Lb;$1.NAME="GeneralString";var Db,K1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};Db=K1;Q.CharacterString=Db;K1.NAME="CharacterString";var Nb,Vl=class extends Kl{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}}};Nb=Vl;Q.UTCTime=Nb;Vl.NAME="UTCTime";var Ob,V1=class extends Vl{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}}};Ob=V1;Q.GeneralizedTime=Ob;V1.NAME="GeneralizedTime";var Mb,H1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};Mb=H1;Q.DATE=Mb;H1.NAME="DATE";var Bb,q1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};Bb=q1;Q.TimeOfDay=Bb;q1.NAME="TimeOfDay";var Ub,W1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};Ub=W1;Q.DateTime=Ub;W1.NAME="DateTime";var Fb,z1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};Fb=z1;Q.Duration=Fb;z1.NAME="Duration";var $b,G1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};$b=G1;Q.TIME=$b;G1.NAME="TIME";async function X1(r,e){let n=await Sa.create().encrypt(r,e);return rt.encode(n)}async function e4(r,e,t){if(r.type==="RSA")return BR(r,e,t);if(r.type==="Ed25519")return NR(r,e,t);if(r.type==="secp256k1")return OR(r,e,t);if(r.type==="ECDSA")return MR(r,e,t);throw new Fr}async function NR(r,e,t="libp2p-key"){if(t==="libp2p-key")return X1(ks(r),e);throw new A(`export format '${t}' is not supported`)}async function OR(r,e,t="libp2p-key"){if(t==="libp2p-key")return X1(ks(r),e);throw new A("Export format is not supported")}async function MR(r,e,t="libp2p-key"){if(t==="libp2p-key")return X1(ks(r),e);throw new A(`export format '${t}' is not supported`)}async function BR(r,e,t="pkcs-8"){if(t==="pkcs-8")return UR(r,e);if(t==="libp2p-key")return X1(ks(r),e);throw new A("Export format is not supported")}async function UR(r,e){let t=nt.get(),o=new ir({value:[new uo({value:0}),new ir({value:[new In({value:"1.2.840.113549.1.1.1"}),new ri]}),new lo({valueHex:r.raw})]}).toBER(),s=new Uint8Array(o,0,o.byteLength),i=Yt(16),a=await id(_o,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 lo({valueHex:i}),new uo({value:1e4}),new uo({value:32}),new ir({value:[new In({value:"1.2.840.113549.2.11"}),new ri]})]}),f=new ir({value:[new In({value:"1.2.840.113549.1.5.13"}),new ir({value:[new ir({value:[new In({value:"1.2.840.113549.1.5.12"}),u]}),new ir({value:[new In({value:"2.16.840.1.101.3.4.1.42"}),new lo({valueHex:c})]})]})]}),p=new ir({value:[f,new lo({valueHex:d})]}).toBER(),g=new Uint8Array(p,0,p.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...R(g,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
51
- `)}async function t4(r,e){try{let t=await FR(r,e);return K8(t)}catch{}if(!r.includes("BEGIN"))throw new A("Encrypted key was not a libp2p-key or a PEM file");return $R(r,e)}async function FR(r,e){let t=rt.decode(r);return Sa.create().decrypt(t,e)}async function $R(r,e){let t=nt.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}=j1(s),{iv:a,salt:c,iterations:l,keySize:d,cipherText:u}=KR(i),f=await id(_o,e,c,{c:l,dkLen:d}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=Hl(await t.subtle.decrypt({name:"AES-CBC",iv:a},h,u)),{result:g}=j1(p);n=qb(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}=j1(s);n=qb(i)}else throw new A("Could not parse private key from PEM data");let o=V8(n);if(o.type!=="RSA")throw new A("Could not parse RSA private key from PEM data");return o}function KR(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=Hl(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=Hl(l.valueBlock.value[1].getValue());return{cipherText:Hl(r.valueBlock.value[1].getValue()),salt:i,iterations:a,keySize:c,iv:u}}function qb(r){return Hl(r.valueBlock.value[2].getValue())}function Hl(r){return new Uint8Array(r,0,r.byteLength)}var VR="/pkcs8/",r4="/info/",ql=new WeakMap,ni={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3};function Ta(r){return r==null||typeof r!="string"?!1:r===(0,Wb.default)(r.trim())&&r.length>0}async function _t(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function oi(r){return new Fe(VR+r)}function _a(r){return new Fe(r4+r)}async function HR(r){let e=ks(r),t=await ze.digest(e);return De.encode(t.bytes).substring(1)}var Q1=class{components;init;log;self;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init={...t,dek:{...Y3,...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<ni.minKeyLength)throw new Error(`dek.keyLength must be least ${ni.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<ni.minSaltLength)throw new Error(`dek.saltLength must be least ${ni.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<ni.minIterationCount)throw new Error(`dek.iterationCount must be least ${ni.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):"";ql.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[me]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},this.options),t=Math.ceil(ni.minSaltLength/3)*3;return e.dek!=null&&(e.dek.salt=R(Yt(t),"base64")),e}static get options(){return{dek:{...Y3}}}async findKeyByName(e){if(!Ta(e))throw await _t(),new A(`Invalid key name '${e}'`);let t=_a(e);try{let n=await this.components.datastore.get(t);return JSON.parse(R(n))}catch(n){throw await _t(),this.log.error("could not read key from datastore - %e",n),new Le(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:r4};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(R(n.value));if(o.id===e)return o}throw new A(`Key with id '${e}' does not exist.`)}catch(t){throw await _t(),t}}async importKey(e,t){if(!Ta(e))throw await _t(),new A(`Invalid key name '${e}'`);if(t==null)throw await _t(),new A("Key is required");let n=oi(e);if(await this.components.datastore.has(n))throw await _t(),new A(`Key '${e}' already exists`);let s,i;try{s=await HR(t);let l=ql.get(this);if(l==null)throw new A("dek missing");let d=l.dek;i=await e4(t,d,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await _t(),l}let a={name:e,id:s},c=this.components.datastore.batch();return c.put(n,C(i)),c.put(_a(e),C(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!Ta(e))throw await _t(),new A(`Invalid key name '${e}'`);let t=oi(e);try{let n=await this.components.datastore.get(t),o=R(n),s=ql.get(this);if(s==null)throw new A("dek missing");let i=s.dek;return await t4(o,i)}catch(n){throw await _t(),n}}async removeKey(e){if(!Ta(e)||e===this.self)throw await _t(),new A(`Invalid key name '${e}'`);let t=oi(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(_a(e)),await o.commit(),n}async listKeys(){let e={prefix:r4},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(R(n.value)));return t}async renameKey(e,t){if(!Ta(e)||e===this.self)throw await _t(),new A(`Invalid old key name '${e}'`);if(!Ta(t)||t===this.self)throw await _t(),new A(`Invalid new key name '${t}'`);let n=oi(e),o=oi(t),s=_a(e),i=_a(t);if(await this.components.datastore.has(o))throw await _t(),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(R(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 _t(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await _t(),new A(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await _t(),new A(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await _t(),new A(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=ql.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):"";ql.set(this,{dek:s});let i=await this.listKeys();for(let a of i){let c=await this.components.datastore.get(oi(a.name)),l=R(c),d=await t4(l,o),u=s.toString(),f=await e4(d,u,d.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(oi(a.name),C(f)),h.put(_a(a.name),C(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function Z1(r={}){return e=>new Q1(e,r)}async function n4(r,e={}){let t=e.selfKey??"self",n=Z1(e)({datastore:r,logger:ra()}),o;return await r.has(new Fe(`/pkcs8/${t}`))?o=await n.exportKey(t):(o=await od(e.keyType??"Ed25519"),await n.importKey(t,o)),o}var Ca=!!globalThis.process?.env?.DUMP_SESSION_KEYS,o4=16;function qR(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 ep(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function wt(r,e,t=""){let n=qR(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 s4(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 zb(r,e){wt(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 mo(r){return new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4))}function go(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function WR(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}var zR=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Gb(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function Yb(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 i4=(r,e)=>{function t(n,...o){if(wt(n,void 0,"key"),!zR)throw new Error("Non little-endian hardware is not yet supported");if(r.nonceLength!==void 0){let d=o[0];wt(d,r.varSizeNonce?void 0:r.nonceLength,"nonce")}let s=r.tagLength;s&&o[1]!==void 0&&wt(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");wt(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,wt(d),a(i.encrypt.length,u),i.encrypt(d,u)},decrypt(d,u){if(wt(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 a4(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&&!GR(e))throw new Error("invalid output, must be aligned");return e}function jb(r,e,t){J1(t);let n=new Uint8Array(16),o=WR(n);return o.setBigUint64(0,BigInt(e),t),o.setBigUint64(8,BigInt(r),t),n}function GR(r){return r.byteOffset%4===0}function ka(r){return Uint8Array.from(r)}var Qb=r=>Uint8Array.from(r.split(""),e=>e.charCodeAt(0)),YR=Qb("expand 16-byte k"),jR=Qb("expand 32-byte k"),XR=mo(YR),QR=mo(jR);function Z(r,e){return r<<e|r>>>32-e}function c4(r){return r.byteOffset%4===0}var tp=64,ZR=16,Zb=2**32-1,Xb=Uint32Array.of();function JR(r,e,t,n,o,s,i,a){let c=o.length,l=new Uint8Array(tp),d=mo(l),u=c4(o)&&c4(s),f=u?mo(o):Xb,h=u?mo(s):Xb;for(let p=0;p<c;i++){if(r(e,t,n,d,i,a),i>=Zb)throw new Error("arx: counter overflow");let g=Math.min(tp,c-p);if(u&&g===tp){let m=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let w=0,T;w<ZR;w++)T=m+w,h[T]=f[T]^d[w];p+=tp;continue}for(let m=0,w;m<g;m++)w=p+m,s[w]=o[w]^l[m];p+=g}}function l4(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:s,rounds:i}=Gb({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return ep(o),ep(i),J1(s),J1(t),(a,c,l,d,u=0)=>{wt(a,void 0,"key"),wt(c,void 0,"nonce"),wt(l,void 0,"data");let f=l.length;if(d===void 0&&(d=new Uint8Array(f)),wt(d,void 0,"output"),ep(u),u<0||u>=Zb)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=ka(a)),m=QR;else if(p===16&&t)g=new Uint8Array(32),g.set(a),g.set(a,16),m=XR,h.push(g);else throw wt(a,32,"arx key"),new Error("invalid key size");c4(c)||h.push(c=ka(c));let w=mo(g);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(m,w,mo(c.subarray(0,16)),w),c=c.subarray(16)}let T=16-o;if(T!==c.length)throw new Error(`arx: nonce must be ${T} or 16 bytes`);if(T!==12){let D=new Uint8Array(12);D.set(c,s?0:12-c.length),c=D,h.push(c)}let I=mo(c);return JR(r,m,w,I,l,d,u,i),go(...h),d}}function Ct(r,e){return r[e++]&255|(r[e++]&255)<<8}var u4=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=ka(wt(e,32,"key"));let t=Ct(e,0),n=Ct(e,2),o=Ct(e,4),s=Ct(e,6),i=Ct(e,8),a=Ct(e,10),c=Ct(e,12),l=Ct(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]=Ct(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=Ct(e,t+0),T=Ct(e,t+2),I=Ct(e,t+4),D=Ct(e,t+6),F=Ct(e,t+8),$=Ct(e,t+10),z=Ct(e,t+12),S=Ct(e,t+14),x=s[0]+(w&8191),L=s[1]+((w>>>13|T<<3)&8191),B=s[2]+((T>>>10|I<<6)&8191),P=s[3]+((I>>>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),M=s[8]+((z>>>8|S<<8)&8191),O=s[9]+(S>>>5|o),k=0,U=k+x*a+L*(5*m)+B*(5*g)+P*(5*p)+v*(5*h);k=U>>>13,U&=8191,U+=E*(5*f)+b*(5*u)+_*(5*d)+M*(5*l)+O*(5*c),k+=U>>>13,U&=8191;let K=k+x*c+L*a+B*(5*m)+P*(5*g)+v*(5*p);k=K>>>13,K&=8191,K+=E*(5*h)+b*(5*f)+_*(5*u)+M*(5*d)+O*(5*l),k+=K>>>13,K&=8191;let W=k+x*l+L*c+B*a+P*(5*m)+v*(5*g);k=W>>>13,W&=8191,W+=E*(5*p)+b*(5*h)+_*(5*f)+M*(5*u)+O*(5*d),k+=W>>>13,W&=8191;let we=k+x*d+L*l+B*c+P*a+v*(5*m);k=we>>>13,we&=8191,we+=E*(5*g)+b*(5*p)+_*(5*h)+M*(5*f)+O*(5*u),k+=we>>>13,we&=8191;let pe=k+x*u+L*d+B*l+P*c+v*a;k=pe>>>13,pe&=8191,pe+=E*(5*m)+b*(5*g)+_*(5*p)+M*(5*h)+O*(5*f),k+=pe>>>13,pe&=8191;let ue=k+x*f+L*u+B*d+P*l+v*c;k=ue>>>13,ue&=8191,ue+=E*a+b*(5*m)+_*(5*g)+M*(5*p)+O*(5*h),k+=ue>>>13,ue&=8191;let be=k+x*h+L*f+B*u+P*d+v*l;k=be>>>13,be&=8191,be+=E*c+b*a+_*(5*m)+M*(5*g)+O*(5*p),k+=be>>>13,be&=8191;let Re=k+x*p+L*h+B*f+P*u+v*d;k=Re>>>13,Re&=8191,Re+=E*l+b*c+_*a+M*(5*m)+O*(5*g),k+=Re>>>13,Re&=8191;let Je=k+x*g+L*p+B*h+P*f+v*u;k=Je>>>13,Je&=8191,Je+=E*d+b*l+_*c+M*a+O*(5*m),k+=Je>>>13,Je&=8191;let Ee=k+x*m+L*g+B*p+P*h+v*f;k=Ee>>>13,Ee&=8191,Ee+=E*u+b*d+_*l+M*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]=Re,s[8]=Je,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;go(n)}update(e){s4(this),wt(e),e=ka(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(){go(this.h,this.r,this.buffer,this.pad)}digestInto(e){s4(this),zb(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 eL(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=eL(r=>new u4(r));function rE(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],T=o,I=t[0],D=t[1],F=t[2],$=i,z=a,S=c,x=l,L=d,B=u,P=f,v=h,E=p,b=g,_=m,M=w,O=T,k=I,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+B|0,k=Z(k^z,16),b=b+k|0,B=Z(B^b,12),z=z+B|0,k=Z(k^z,8),b=b+k|0,B=Z(B^b,7),S=S+P|0,U=Z(U^S,16),_=_+U|0,P=Z(P^_,12),S=S+P|0,U=Z(U^S,8),_=_+U|0,P=Z(P^_,7),x=x+v|0,K=Z(K^x,16),M=M+K|0,v=Z(v^M,12),x=x+v|0,K=Z(K^x,8),M=M+K|0,v=Z(v^M,7),$=$+B|0,K=Z(K^$,16),_=_+K|0,B=Z(B^_,12),$=$+B|0,K=Z(K^$,8),_=_+K|0,B=Z(B^_,7),z=z+P|0,O=Z(O^z,16),M=M+O|0,P=Z(P^M,12),z=z+P|0,O=Z(O^z,8),M=M+O|0,P=Z(P^M,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+B|0,n[W++]=f+P|0,n[W++]=h+v|0,n[W++]=p+E|0,n[W++]=g+b|0,n[W++]=m+_|0,n[W++]=w+M|0,n[W++]=T+O|0,n[W++]=I+k|0,n[W++]=D+U|0,n[W++]=F+K|0}function tL(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],T=t[2],I=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,T=Z(T^i,16),p=p+T|0,d=Z(d^p,12),i=i+d|0,T=Z(T^i,8),p=p+T|0,d=Z(d^p,7),a=a+u|0,I=Z(I^a,16),g=g+I|0,u=Z(u^g,12),a=a+u|0,I=Z(I^a,8),g=g+I|0,u=Z(u^g,7),o=o+l|0,I=Z(I^o,16),p=p+I|0,l=Z(l^p,12),o=o+l|0,I=Z(I^o,8),p=p+I|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,T=Z(T^a,16),h=h+T|0,c=Z(c^h,12),a=a+c|0,T=Z(T^a,8),h=h+T|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++]=T,n[D++]=I}var rL=l4(rE,{counterRight:!1,counterLength:4,allowShortKeys:!1}),nL=l4(rE,{counterRight:!1,counterLength:8,extendNonceFn:tL,allowShortKeys:!1});var oL=new Uint8Array(16),eE=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(oL.subarray(t))},sL=new Uint8Array(32);function tE(r,e,t,n,o){o!==void 0&&wt(o,void 0,"AAD");let s=r(e,t,sL),i=jb(n.length,o?o.length:0,!0),a=Jb.create(s);o&&eE(a,o),eE(a,n),a.update(i);let c=a.digest();return go(s,i),c}var nE=r=>(e,t,n)=>({encrypt(s,i){let a=s.length;i=a4(a+16,i,!1),i.set(s);let c=i.subarray(0,-16);r(e,t,c,c,1);let l=tE(r,e,t,c,n);return i.set(l,a),go(l),i},decrypt(s,i){i=a4(s.length-16,i,!1);let a=s.subarray(0,-16),c=s.subarray(-16),l=tE(r,e,t,a,n);if(!Yb(c,l))throw new Error("invalid tag");return i.set(s.subarray(0,-16)),r(e,t,i,i,1),go(l),i}}),d4=i4({blockSize:64,nonceLength:12,tagLength:16},nE(rL)),Pie=i4({blockSize:64,nonceLength:24,tagLength:16},nE(nL));function sE(r,e,t){return Un(r),t===void 0&&(t=new Uint8Array(r.outputLen)),Ro(r,t,e)}var f4=Uint8Array.of(0),oE=Uint8Array.of();function iE(r,e,t,n=32){Un(r),Dt(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=oE:ce(t,void 0,"info");let i=new Uint8Array(s*o),a=Ro.create(r,e),c=a._cloneInto(),l=new Uint8Array(a.outputLen);for(let d=0;d<s;d++)f4[0]=d+1,c.update(d===0?oE:l).update(t).update(f4).digestInto(l),i.set(l,o*d),a._cloneInto(c);return a.destroy(),c.destroy(),Nt(l,f4),i.slice(0,n)}var h4={hashSHA256(r){return Tr(r.subarray())},getHKDF(r,e){let t=sE(Tr,e,r),o=iE(Tr,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=Ec.utils.randomSecretKey();return{publicKey:Ec.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:Ec.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return Ec.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return d4(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return d4(n,e,t).decrypt(r.subarray(),o)}};var aE=h4;function cE(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 Pa=r=>{let e=Ge(2);return e[0]=r>>8,e[1]=r,e};Pa.bytes=2;var Ra=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)};Ra.bytes=2;function lE(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 p4(r,e){!e.enabled||!Ca||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${R(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${R(r.privateKey,"hex")}`)):e("Missing local static keys."))}function m4(r,e){!e.enabled||!Ca||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${R(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${R(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function uE(r,e){!e.enabled||!Ca||e(r?`REMOTE_STATIC_PUBLIC_KEY ${R(r.subarray(),"hex")}`:"Missing remote static public key.")}function g4(r,e){!e.enabled||!Ca||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${R(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function y4(r,e,t){!t.enabled||!Ca||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&R(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&R(e.k,"hex")}`))}function nn(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=Ge(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var La=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var iL=0,aL=4294967295,cL="Cipherstate has reached maximum n, a new handshake must be performed",rp=class{n;bytes;view;constructor(e=iL){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>aL)throw new Error(cL)}};var si=ae(0),Da=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new rp(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}},w4=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=C(t,"utf-8");this.h=lL(e,n),this.ck=this.h,this.cs=new Da(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new Da(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new X(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,si);return[new Da(this.crypto,e),new Da(this.crypto,t)]}},b4=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 w4(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()}},Wl=class extends b4{writeMessageA(e){return new X(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new X(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new X(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new La(`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 La(`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 La(`handshake stage 2 validation fail: ${t.message}`)}}};function lL(r,e){if(e.length<=32){let t=ae(32);return t.set(e),t}else return r.hash(e)}var np;(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 Ne('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 Ne('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)})(np||(np={}));var zl;(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),np.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=np.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)})(zl||(zl={}));async function x4(r,e,t){let n=await r.sign(fE(e));return zl.encode({identityKey:ft(r.publicKey),identitySig:n,extensions:t})}async function v4(r,e,t){try{let n=zl.decode(r),o=tt(n.identityKey);if(t?.equals(o)===!1)throw new Error(`Payload identity key ${o} does not match expected remote identity key ${t}`);if(!e)throw new Error("Remote static does not exist");let s=fE(e);if(!await o.verify(s,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new vu(n.message)}}function fE(r){let e=C("noise-libp2p-static-key:");return r instanceof Uint8Array?Oe([e,r],e.length+r.length):(r.prepend(e),r)}var E4=class extends No{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 kd({lengthDecoder:Ra,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 X;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(Pa(s.byteLength)),t.append(s)}return t}decrypt(e){let t=new X;for(let n=0;n<e.byteLength;n+=65535){let o=n+65535;if(o>e.byteLength&&(o=e.byteLength),o-o4<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-o4);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 S4(r,e,t){return new E4(r,e,t)}async function hE(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await x4(s,a.publicKey,l),u=new Wl({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:i,s:a});p4(u.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(u.writeMessageA(si),e),t.trace("Stage 0 - Initiator finished sending first message."),m4(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."),g4(u.re,t),uE(u.rs,t),t.trace("Initiator going to check remote's signature...");let h=await v4(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 y4(p,g,t),{payload:h,encrypt:m=>p.encryptWithAd(si,m),decrypt:(m,w)=>g.decryptWithAd(si,m,w)}}async function pE(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await x4(s,a.publicKey,l),u=new Wl({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:i,s:a});p4(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."),g4(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."),m4(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 v4(f,u.rs,c),[p,g]=u.ss.split();return y4(p,g,t),{payload:h,encrypt:m=>g.encryptWithAd(si,m),decrypt:(m,w)=>p.decryptWithAd(si,m,w)}}var op=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??aE;this.crypto=cE(c),this.extensions={webtransportCerthashes:[],...o},this.metrics=a?lE(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=Fo(e,{lengthEncoder:Pa,lengthDecoder:Ra,maxDataLength:65535}),s=await this.performHandshakeInitiator(o,this.components.privateKey,n,t?.remotePeer?.publicKey,t),i=tt(s.payload.identityKey);return{connection:S4(o.unwrap(),s,this.metrics),remoteExtensions:s.payload.extensions,remotePeer:xn(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 Su("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=Fo(e,{lengthEncoder:Pa,lengthDecoder:Ra,maxDataLength:65535}),s=await this.performHandshakeResponder(o,this.components.privateKey,n,t?.remotePeer?.publicKey,t),i=tt(s.payload.identityKey);return{connection:S4(o.unwrap(),s,this.metrics),remoteExtensions:s.payload.extensions,remotePeer:xn(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 hE({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 pE({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 sp(r={}){return e=>new op(e,r)}var je;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(je||(je={}));var Se;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(Se||(Se={}));var Xae=Object.values(Se).filter(r=>typeof r!="string"),mE=0,ct;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(ct||(ct={}));var _n=12;var yo=class extends Error{static name="ProtocolError";reason;constructor(e,t){super(e),this.name="ProtocolError",this.reason=t}};function gE(r){return r?.reason!==null}var Sr=class extends yo{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e,ct.ProtocolError),this.name="InvalidFrameError"}},Na=class extends yo{static name="UnRequestedPingError";constructor(e="Un-requested ping error"){super(e,ct.ProtocolError),this.name="UnRequestedPingError"}},Oa=class extends yo{static name="NotMatchingPingError";constructor(e="Not matching ping error"){super(e,ct.ProtocolError),this.name="NotMatchingPingError"}};var ip=class extends yo{static name="StreamAlreadyExistsError";constructor(e="Stream already exists"){super(e,ct.ProtocolError),this.name="StreamAlreadyExistsError"}},ap=class extends yo{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e,ct.ProtocolError),this.name="DecodeInvalidVersionError"}},cp=class extends yo{static name="BothClientsError";constructor(e="Both clients"){super(e,ct.ProtocolError),this.name="BothClientsError"}},Ma=class extends yo{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e,ct.ProtocolError),this.name="ReceiveWindowExceededError"}};var tce=new Set([Sr.name,Na.name,Oa.name,ip.name,ap.name,cp.name,Ma.name]),Yl=256*1024,lp=16*1024*1024;var jl={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,maxMessageSize:64*1024,maxEarlyStreams:10,streamOptions:{initialStreamWindowSize:Yl,maxStreamWindowSize:lp,inactivityTimeout:12e4,maxReadBufferLength:4194304,maxWriteBufferLength:1/0}};function yE(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<Yl)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 bE(r){return r.header.type===je.Data&&r.data!==null}var wE=2**24;function uL(r){if(r[0]!==mE)throw new Sr("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*wE+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*wE+(r[9]<<16)+(r[10]<<8)+r[11]}}var up=class{buffer;constructor(){this.buffer=new X}*emitFrames(e){for(this.buffer.append(e);;){let t=this.readFrame();if(t===void 0)break;yield t}}readFrame(){let e=_n;if(this.buffer.byteLength<_n)return;let t=uL(this.buffer.subarray(0,_n));if(t.type===je.Data){if(e+=t.length,this.buffer.byteLength<e)return;let n=this.buffer.sublist(_n,e);return this.buffer.consume(e),{header:t,data:n}}return this.buffer.consume(e),{header:t}}};function A4(r){let e=new Uint8Array(_n);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 dp=class extends Bo{streamId;state;sendWindowCapacity;recvWindow;recvWindowCapacity;maxStreamWindowSize;epochStart;getRTT;sendFrame;constructor(e){let t=e.initialStreamWindowSize??Yl;super({...e,maxMessageSize:t-_n}),this.streamId=e.streamId,this.state=e.state,this.sendWindowCapacity=t,this.recvWindow=t,this.recvWindowCapacity=this.recvWindow,this.maxStreamWindowSize=e.maxStreamWindowSize??lp,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:je.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:je.WindowUpdate,flag:Se.RST,streamID:this.streamId,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|Se.FIN;this.sendFrame({type:je.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-_n,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(!bE(e))throw new Sr("Frame was not data frame");if(this.processFlags(e.header.flag),this.recvWindowCapacity<e.header.length)throw new Ma("Receive window exceeded");this.recvWindowCapacity-=e.header.length,this.onData(e.data),this.sendWindowUpdate()}processFlags(e){(e&Se.ACK)===Se.ACK&&this.state===Jt.SYNSent&&(this.state=Jt.Established),(e&Se.FIN)===Se.FIN&&this.onRemoteCloseWrite(),(e&Se.RST)===Se.RST&&this.onRemoteReset()}getSendFlags(){switch(this.state){case Jt.Init:return this.state=Jt.SYNSent,Se.SYN;case Jt.SYNReceived:return this.state=Jt.Established,Se.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:je.WindowUpdate,flag:e,streamID:this.streamId,length:o})}};function EE(r){return{type:je[r.type],flags:[(r.flag&Se.SYN)===Se.SYN?"SYN":void 0,(r.flag&Se.ACK)===Se.ACK?"ACK":void 0,(r.flag&Se.FIN)===Se.FIN?"FIN":void 0,(r.flag&Se.RST)===Se.RST?"RST":void 0].filter(Boolean),streamID:r.streamID,length:r.length}}var xE="/yamux/1.0.0",fp=class{protocol=xE;_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[me]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new I4(e,{...this._init})}},I4=class extends Mo{nextStreamID;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;decoder;keepAlive;enableKeepAlive;keepAliveInterval;maxInboundStreams;maxOutboundStreams;constructor(e,t={}){super(e,{...t,protocol:xE,name:"yamux"}),this.client=e.direction==="outbound",yE(t),this.enableKeepAlive=t.enableKeepAlive??jl.enableKeepAlive,this.keepAliveInterval=t.keepAliveInterval??jl.keepAliveInterval,this.maxInboundStreams=t.maxInboundStreams??jl.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??jl.maxOutboundStreams,this.decoder=new up,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=oa(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 mi("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??ct.NormalTermination;this.log.trace("muxer close reason=%s",ct[t]),await super.close(e),this.sendGoAway(t)}finally{this.keepAlive?.stop()}}abort(e){if(this.status==="open")try{super.abort(e);let t=ct.InternalError;gE(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 dp({...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",EE(e.header)),t===0)switch(n){case je.Ping:{this.handlePing(e.header);return}case je.GoAway:{this.handleGoAway(o);return}default:throw new Sr("Invalid frame type")}else switch(e.header.type){case je.Data:case je.WindowUpdate:{this.handleStreamMessage(e);return}default:throw new Sr("Invalid frame type")}}handlePing(e){if(e.flag===Se.SYN)this.log.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,Se.ACK);else if(e.flag===Se.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 Na("ping not requested");if(this.activePing.id!==e)throw new Oa("ping doesn't match our id");this.activePing.resolve(Date.now()-this.activePing.start)}handleGoAway(e){this.log.trace("received GoAway reason=%s",ct[e]??"unknown"),this.remoteGoAway=e,e===ct.NormalTermination?this.onTransportClosed():this.abort(new Error("Remote sent GoAway"))}handleStreamMessage(e){let{streamID:t,flag:n,type:o}=e.header;(n&Se.SYN)===Se.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 je.WindowUpdate:{s.handleWindowUpdate(e);return}case je.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:je.WindowUpdate,flag:Se.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.maxInboundStreams){this.log("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:je.WindowUpdate,flag:Se.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===je.Data){if(t==null)throw new Sr("Invalid frame");n=new X(A4(e),t)}else n=A4(e);return this.log.trace("sending frame %o",EE(e)),this.send(n)}sendPing(e,t=Se.SYN){t===Se.SYN?this.log.trace("sending ping request pingId=%s",e):this.log.trace("sending ping response pingId=%s",e),this.sendFrame({type:je.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=ct.NormalTermination){this.log("sending GoAway reason=%s",ct[e]),this.localGoAway=e,this.sendFrame({type:je.GoAway,flag:0,streamID:0,length:e})}};function vE(r={}){return()=>new fp(r)}var SE="libp2p",AE="autonat",IE="1.0.0";var Ve;(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=()=>We(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=()=>We(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 Ne('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)})(Ve||(Ve={}));var gL=4,yL=8,hp=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??SE}/${AE}/${IE}`,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=ot({name:"libp2p_autonat_dial_results",metrics:e.metrics}),this.findPeers=oa(this.findRandomPeers.bind(this),6e4),this.addressFilter=Et(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=Ue(e,{maxDataLength:this.maxMessageSize}).pb(Ve),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:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.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:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let u=ke(a.id);i=Ze(u)}catch(u){return this.log.error("invalid PeerId - %e",u),{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.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:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(u=>q(u)).filter(u=>{try{let f=oe(u);return Qe(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:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.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:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.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:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.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||!dd(o.multiaddr))||Qe(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:Qg(),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=Ue(i).pb(Ve),[,c]=await Promise.all([a.write({type:Ve.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:s}),a.read({signal:s})]);if(c.type!==Ve.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!==Ve.ResponseStatus.OK&&l!==Ve.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===Ve.ResponseStatus.OK){if(o.success++,o.type!=="observed"){this.confirmAddress(o);return}}else l===Ve.ResponseStatus.E_DIAL_ERROR&&o.failure++;this.log("%a success %d failure %d",o.multiaddr,o.success,o.failure),o.success===gL&&this.confirmAddress(o),o.failure===yL&&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 TE(r={}){return e=>new hp(e,r)}var wL="bootstrap",bL=50,EL=1e3,T4=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??EL,this.list=t.list.map(n=>q(n)).filter(n=>pa.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}[ls]=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??wL]:{value:this._init.tagValue??bL,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 _E(r){return e=>new T4(e,r)}var _4=1e3,CE=60*_4;var tle=120*CE,kE=1,pp=5e3,PE=100;var Xl=`${us}-circuit-relay`,rle=2*CE,nle=BigInt(1<<17),ii="/libp2p/circuit/relay/0.2.0/hop",C4="/libp2p/circuit/relay/0.2.0/stop",ole=30*_4,sle=30*_4,k4=300,RE=4096,LE=.001;var jo;(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=()=>We(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),Ba.codec().encode(o.peer,s)),o.reservation!=null&&(s.uint32(26),mp.codec().encode(o.reservation,s)),o.limit!=null&&(s.uint32(34),Ua.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(40),kt.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=Ba.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.reservation=mp.codec().decode(o,o.uint32(),{limits:i.limits?.reservation});break}case 4:{a.limit=Ua.codec().decode(o,o.uint32(),{limits:i.limits?.limit});break}case 5:{a.status=kt.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)})(jo||(jo={}));var Cn;(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=()=>We(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),Ba.codec().encode(o.peer,s)),o.limit!=null&&(s.uint32(26),Ua.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(32),kt.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=Ba.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.limit=Ua.codec().decode(o,o.uint32(),{limits:i.limits?.limit});break}case 4:{a.status=kt.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)})(Cn||(Cn={}));var Ba;(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 Ne('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)})(Ba||(Ba={}));var mp;(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),yp.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 Ne('Decode error - map field "addrs" had too many elements');s.addrs.push(t.bytes());break}case 3:{s.voucher=yp.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)})(mp||(mp={}));var Ua;(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)})(Ua||(Ua={}));var kt;(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"})(kt||(kt={}));var P4;(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"})(P4||(P4={}));(function(r){r.codec=()=>We(P4)})(kt||(kt={}));var gp;(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)})(gp||(gp={}));var yp;(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),gp.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=gp.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)})(yp||(yp={}));var Ql=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},wp=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},bp=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function R4(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var Zl=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}},Ep=Ce(ve(pa.matchers[0],_e(290))),xp=Ce(_e(290));var vp=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(ii,{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(ii)],orders:[()=>Math.random()<.5?1:-1,(n,o)=>{let s=DE(n),i=DE(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 DE(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(R(e)).getTime()}var L4=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??pp,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(xp.exactMatch(e))this.log("searching for circuit relay servers"),this.reservationId=this.reservationStore.reserveRelay();else if(Ep.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 cs(`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 NE(r){return new L4(r)}var OE="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var ME=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=OE[t[r]&63];return e};var xL=60*1e3*10,vL=60*1e3*5,SL=30*1e3,Sp=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 Ut,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??PE,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??pp,this.started=!1,this.relayFilter=Et(100),this.reserveQueue=new It({concurrency:t?.reservationConcurrency??kE,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(Xl)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[Xl]: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=ME();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 cs("Cannot use self as relay");if(this.reserveQueue.size>this.maxReservationQueueLength)throw new bp("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 cs("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&&R4(s.reservation.expire)>xL)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 Ql("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(yt.matches(a.remoteAddr))throw new wp("not creating reservation over relayed connection");let c=await this.#e(a,{signal:i}),l=R4(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-vL,SL),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 Ql("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:{[Xl]:{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(ii,t),s=Ue(n).pb(jo);this.log.trace("send RESERVE to %p",e.remotePeer),await s.write({type:jo.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===kt.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:{[Xl]: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=Et(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var D4=class extends Oo{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 N4(r){return new D4(r)}var AL=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(q)}catch{return!1}return!0},BE={maxInboundStopStreams:k4,maxOutboundStopStreams:k4,stopTimeout:3e4},Ap=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??BE.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??BE.maxOutboundStopStreams,this.shutdownController=new AbortController,this.discovery=new vp(e,{filter:t.discoveryFilter??Zg(RE,LE)}),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 Sp(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"]:[]}[vo]=!0;isStarted(){return this.started}async start(){this.shutdownController=new AbortController,this.shutdownController.signal,await this.components.registrar.handle(C4,this.onStop,{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await at(this.discovery,this.reservationStore),this.started=!0}async stop(){this.shutdownController.abort(),await lt(this.discovery,this.reservationStore),await this.components.registrar.unhandle(C4),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 Eo(`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(ii,t);let h=Ue(f).pb(jo);t.onProgress?.(new H("circuit-relay:write-connect-message")),await h.write({type:jo.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!==kt.OK)throw new de(`failed to connect via relay with status ${p?.status?.toString()??"undefined"}`);let g=new Zl(p.limit),m=N4({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 NE({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=>Ep.exactMatch(t)||xp.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>yt.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=Ue(e).pb(Cn),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:Cn.Type.STATUS,status:kt.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(s.type!==Cn.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await o.write({type:Cn.Type.STATUS,status:kt.UNEXPECTED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(!AL(s)){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await o.write({type:Cn.Type.STATUS,status:kt.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}let i=Ze(ke(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:Cn.Type.STATUS,status:kt.PERMISSION_DENIED},{signal:n}),await e.close({signal:n});return}this.log.trace("sending success response to %p",t.remotePeer),await o.write({type:Cn.Type.STATUS,status:kt.OK},{signal:n});let a=new Zl(s.limit),c=t.remoteAddr.encapsulate(`/p2p-circuit/p2p/${i.toString()}`),l=this.components.addressManager.getAddresses()[0],d=N4({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 UE(r={}){return e=>new Ap(e,r)}var on;(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=()=>We(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 Ne('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)})(on||(on={}));function O4(r,e){return yt.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:jf.matches(r)?!0:O9.matches(r)?!Qe(r):!1}var FE=1024*4,$E=100,Ip={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},Tp=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??Ip.timeout,this.retries=t.retries??Ip.retries,this.maxInboundStreams=t.maxInboundStreams??Ip.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Ip.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)=>{yt.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=Ue(t,{maxDataLength:FE}).pb(on);this.log("B sending connect to %p",e.remotePeer);let i=Date.now();await s.write({type:on.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!==on.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:on.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await By(l/2),this.log("B dialing",c);let d=await this.connectionManager.openConnection(c,{signal:o.signal,priority:$E,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=>O4(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(yt.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=Ue(e,{maxDataLength:FE}).pb(on);this.log("A receiving connect");let s=await o.read(n);if(s.type!==on.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:on.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==on.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:$E,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(!O4(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Jl="/libp2p/dcutr";function KE(r={}){return e=>new Tp(e,r)}function j(r){if(r!==void 0&&r!==j.REQUEST&&r!==j.RESPONSE)throw new Error("type must be REQUEST or RESPONSE");r===void 0||this.initialize(r),this.maxHeaderSize=j.maxHeaderSize}j.prototype.initialize=function(r,e){if(r!==j.REQUEST&&r!==j.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};j.encoding="ascii";j.maxHeaderSize=80*1024;j.REQUEST="REQUEST";j.RESPONSE="RESPONSE";var VE=j.kOnHeaders=1,M4=j.kOnHeadersComplete=2,_p=j.kOnBody=3,B4=j.kOnMessageComplete=4;j.prototype[VE]=j.prototype[M4]=j.prototype[_p]=j.prototype[B4]=function(){};var HE=!0;Object.defineProperty(j,"kOnExecute",{get:function(){return HE=!1,99}});var qE=j.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"],WE=qE.indexOf("CONNECT");j.prototype.reinitialize=j;j.prototype.close=j.prototype.pause=j.prototype.resume=j.prototype.remove=j.prototype.free=function(){};j.prototype._compatMode0_11=!1;j.prototype.getAsyncId=function(){return 0};var IL={REQUEST_LINE:!0,RESPONSE_LINE:!0,HEADER:!0};j.prototype.execute=function(r,e,t){if(!(this instanceof j))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,IL[this.state]&&(this.headerSize+=t,this.headerSize>(this.maxHeaderSize||j.maxHeaderSize))?new Error("max header size exceeded"):t};var TL={REQUEST_LINE:!0,RESPONSE_LINE:!0,BODY_RAW:!0};j.prototype.finish=function(){if(!this.hadError){if(!TL[this.state])return new Error("invalid state for EOF");this.state==="BODY_RAW"&&this.userCall()(this[B4]())}};j.prototype.consume=j.prototype.unconsume=j.prototype.getCurrentBuffer=function(){};j.prototype.userCall=function(){this.isUserCall=!0;var r=this;return function(e){return r.isUserCall=!1,e}};j.prototype.nextRequest=function(){this.userCall()(this[B4]()),this.reinitialize(this.type)};j.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+R(e.subarray(this.offset,t),j.encoding);return n.charAt(n.length-1)==="\r"&&(n=n.substr(0,n.length-1)),this.line="",this.offset=t+1,n}this.line+=R(e.subarray(this.offset,this.end),j.encoding),this.offset=this.end};var _L=/^([^: \t]+):[ \t]*((?:.*[^ \t])|)/,CL=/^[ \t]+(.*[^ \t])/;j.prototype.parseHeader=function(r,e){if(r.indexOf("\r")!==-1)throw Cp("HPE_LF_EXPECTED");var t=_L.exec(r),n=t&&t[1];if(n)e.push(n),e.push(t[2]);else{var o=CL.exec(r);o&&e.length&&(e[e.length-1]&&(e[e.length-1]+=" "),e[e.length-1]+=o[1])}};var kL=/^([A-Z-]+) ([^ ]+) HTTP\/(\d)\.(\d)$/;j.prototype.REQUEST_LINE=function(){var r=this.consumeLine();if(r){var e=kL.exec(r);if(e===null)throw Cp("HPE_INVALID_CONSTANT");if(this.info.method=this._compatMode0_11?e[1]:qE.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 PL=/^HTTP\/(\d)\.(\d) (\d{3}) ?(.*)$/;j.prototype.RESPONSE_LINE=function(){var r=this.consumeLine();if(r){var e=PL.exec(r);if(e===null)throw Cp("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"}};j.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)};j.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 Cp("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===j.REQUEST||e.statusCode===101:e.upgrade=e.method===WE,this.isChunked&&e.upgrade&&(this.isChunked=!1),e.shouldKeepAlive=this.shouldKeepAlive();var a;if(HE?a=this.userCall()(this[M4](e)):a=this.userCall()(this[M4](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"}}}};j.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")};j.prototype.BODY_CHUNK=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[_p](this.chunk.slice(this.offset,this.offset+r),0,r)),this.offset+=r,this.body_bytes-=r,this.body_bytes||(this.state="BODY_CHUNKEMPTYLINE")};j.prototype.BODY_CHUNKEMPTYLINE=function(){var r=this.consumeLine();if(r!==void 0){if(r!=="")throw new Error("Expected empty line");this.state="BODY_CHUNKHEAD"}};j.prototype.BODY_CHUNKTRAILERS=function(){var r=this.consumeLine();r!==void 0&&(r?this.parseHeader(r,this.trailers):(this.trailers.length&&this.userCall()(this[VE](this.trailers,"")),this.nextRequest()))};j.prototype.BODY_RAW=function(){this.userCall()(this[_p](this.chunk.slice(this.offset,this.end),0,this.end-this.offset)),this.offset=this.end};j.prototype.BODY_SIZED=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[_p](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=j["kOn"+r];Object.defineProperty(j.prototype,"on"+r,{get:function(){return this[e]},set:function(t){return this._compatMode0_11=!0,WE="CONNECT",this[e]=t}})});function Cp(r){var e=new Error("Parse Error");return e.code=r,e}function zE(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 U4(r,e={}){let t=zE(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 RL=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),GE=nc({name:"sha-1",code:17,encode:RL("SHA-1")});var kp=class extends globalThis.Request{constructor(e,t={}){let n=t.method??"GET",o=kn(t),s=t.body;Pp(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 YE={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 Pn=class extends globalThis.Response{constructor(e,t={}){let n=kn(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:YE[o],writable:!1},headers:{value:n,writable:!1}})}};var LL=["dns","dns4","dns6","dnsaddr"];function tu(r,e){if(r instanceof URL)return r;let t=Lp(r,e),{httpPath:n}=Dp(r);return new URL(`http://${t}${n}`)}function ru(r){return r instanceof Uint8Array?r:r instanceof DataView?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):new Uint8Array(r,0,r.byteLength)}function XE(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=NL(e,r.headers.get("content-length"))),t.body=U4(n),t.duplex="half"}return new kp(F4(r).toString(),t)}async function QE(r,e){if(e.send(C([`HTTP/1.1 ${r.status} ${r.statusText}`,...Rp(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 ZE=C(["HTTP/1.1 404 Not Found","Connection: close","",""].join(`\r
53
- `)),DL=C(["HTTP/1.1 400 Bad Request","Connection: close","",""].join(`\r
54
- `)),rde=C(["HTTP/1.1 500 Internal Server Error","Connection: close","",""].join(`\r
55
- `)),nde=C(["HTTP/1.1 501 Not Implemented","Connection: close","",""].join(`\r
56
- `));function Rp(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*NL(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 Fa(r,e){if(typeof r=="string"&&(r.startsWith("/")?r=q(r):r=new URL(r)),Rt(r)&&(r=q(`/p2p/${r}`)),r instanceof URL&&r.protocol==="multiaddr:"&&(r=mh(r.toString())),yn(r)&&(r=[r]),Array.isArray(r)){for(let t of r)if(t.getComponents().some(({name:o})=>o==="http")){let o=qo(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 kn(r={}){return r.headers instanceof Headers||(r.headers=new Headers(r.headers)),r.headers}function eu(r){return r!=null&&r!==""}function Lp(r,e){let t,n=80,o="http:";if(r instanceof URL&&(t=r.hostname,n=parseInt(r.port,10),o=r.protocol),eu(t)||(t=e.get("host")??void 0),!eu(t)&&Array.isArray(r))for(let s of r){let a=s.getComponents().filter(({name:c})=>LL.includes(c))?.[0]?.value;if(a!=null){t=a;break}}if(!eu(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(!eu(t)&&Array.isArray(r))for(let s of r)try{let i=oe(s);i.host!=null&&(t=i.host);break}catch{}if(eu(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 Dp(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 Np(r,e=["GET"]){return r==null?e:(typeof r=="string"&&(r=[r]),r.map(t=>t.toUpperCase()))}function F4(r){let e=r.url??"/";if(e.startsWith("http"))return new URL(e);let t=OL(r);return new URL(`http://${t}${e}`)}function OL(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 Pp(r,e){return r==="GET"&&e.get("connection")?.toLowerCase()==="upgrade"&&e.get("upgrade")?.toLowerCase()==="websocket"}function jE(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 $4(r){if(jE(r,"sec-websocket-version")!=="13")throw new as("Invalid version");let e=jE(r,"sec-websocket-key");if(e==null)throw new as("Missing sec-websocket-key");let t=`${e}258EAFA5-E914-47DA-95CA-C5AB0DC85B11`,n=await GE.digest(C(t)),o=Ja.encode(n.digest).substring(1);return new Headers({Upgrade:"websocket",Connection:"upgrade","Sec-WebSocket-Accept":o})}async function JE(r,e){let t=new j("REQUEST"),n=new X,o;t[j.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:j.methods[s.method]}};try{for(;;){let{data:s}=await Xt(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 Op=class extends Error{static name="InvalidResponseError";name="InvalidResponseError"};var ML=[101,204,205,304];async function ex(r,e,t){let n=Promise.withResolvers(),o=new TransformStream,s=o.writable.getWriter(),i=!1,a=new j("RESPONSE");a.maxHeaderSize=t.maxHeaderSize??j.maxHeaderSize,a[j.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;ML.includes(l.statusCode)&&(o.writable.close().catch(()=>{}),o.readable.cancel().catch(()=>{}),u=null);let f=new Pn(u,{status:l.statusCode,statusText:l.statusMessage,headers:d});n.resolve(f)},a[j.kOnBody]=l=>{t.log("response read body %d bytes",l.byteLength),s.write(l).catch(d=>{n.reject(d)})},a[j.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 Op(`Response ended before headers were received, read ${c} bytes`)),a.finish()}),n.promise}function tx(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 rx(r,e){return e.set("Content-Length",`${r.byteLength}`),e.set("Content-Type","application/octet-stream"),new ReadableStream({start(t){t.enqueue(ru(r)),t.close()}})}function BL(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 nx(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+=BL(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
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
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 ox(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
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
60
  `)),n.enqueue(s),n.enqueue(C(`\r
61
61
  `))),o&&(n.enqueue(C(`0\r
62
62
  \r
63
- `)),n.close())}})}function K4(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 sx(r,e){if(r!=null){if(typeof r=="string")return K4(r,e);if(r instanceof Blob)return tx(r,e);if(UL(r))return rx(r,e);if(r instanceof URLSearchParams)return K4(r.toString(),e);if(r instanceof ReadableStream)return ox(r,e);if(r instanceof FormData)return nx(r,e);throw new Error("Unsupported body type")}}function UL(r){return r==null?!1:r.byteLength!=null}async function ix(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=sx(t.body,n),i=[`${t?.method?.toUpperCase()??"GET"} ${e.pathname??"/"} HTTP/1.1`,...Rp(n),"",""];r.send(C(i.join(`\r
64
- `)))||await r.onDrain({signal:t.signal??void 0}),s!=null&&(t.log("request sending body"),await FL(r,s,t))}async function FL(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 ax(r,e,t={}){let n=r.log.newScope("http-fetch");e=typeof e=="string"?new URL(e):e;let[o]=await Promise.all([ex(r,e,{...t,log:n}),ix(r,e,{...t,log:n})]);return await r.close({signal:t.signal??void 0}),o}var Mp=class extends Event{message;error;filename="";lineno=0;colno=0;constructor(e){super("error"),this.error=e,this.message=e.message}},nu=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 $L={CONTINUATION:0,TEXT:1,BINARY:2,CONNECTION_CLOSE:8,PING:9,PONG:10},V4={0:"CONTINUATION",1:"TEXT",2:"BINARY",8:"CONNECTION_CLOSE",9:"PING",10:"PONG"};var ou={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 cx(r){let e=0;if(r.byteLength<e+1)return;let n=r.get(e)&15;if(e++,V4[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:V4[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=lx(c,a)),r.consume(e),{type:V4[n],data:c}}function lx(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 ux(r,e,t){let o=new X(Uint8Array.from([128|$L[r]])),s=e?.byteLength??0;if(s<126)o.append(Uint8Array.from([s|(t===!0?128:0)]));else if(s<65535){let i=new X(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 X(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=lx(e,i)}return e!=null&&o.append(e),o}function dx(r){if(r instanceof Uint8Array||r instanceof ArrayBuffer||r instanceof DataView)return ru(r);if(typeof r=="string")return C(r);if(r instanceof Blob)return r.arrayBuffer().then(e=>ru(e));throw new A("Unsupported data type")}async function fx(r,e){return new Promise((t,n)=>{let o=!1,s=new j("RESPONSE");s[j.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 Pn(null,{status:i.statusCode,statusText:i.statusMessage,headers:new Headers(a)}))},Promise.resolve().then(async()=>{for(;;){let{data:i}=await Xt(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*hx(r,e=[],t){let n=Ja.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 KL=["BINARY","TEXT","CONTINUATION"],VL=10485760;var HL="/http/1.1",Bp=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 X,this.closeController=new AbortController,this.maxMessageSize=t.maxMessageSize??VL}send(e){if(this.readyState!==this.OPEN)throw new Error("WebSocket was not open");let t=dx(e);Ed(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=ux(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 Mp(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(ou.MESSAGE_TOO_BIG,"Max message size exceeded");return}for(;;){let t=cx(this.buffer);if(t==null)break;if(KL.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 nu("close"))}))}}_remoteClosed(e){this.readyState=this.CLOSING,this._close(e,()=>{this.readyState=this.CLOSED,this.dispatchEvent(new nu("close"))})}};var su=class extends Bp{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()})}},iu=class extends Bp{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,HL,{...o,signal:s});for await(let a of hx(t,o.protocols,kn(o)))this.stream.send(a)||await this.stream.onDrain({signal:s});let i=await fx(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 au="/http/1.1";var Up=Symbol.for("@libp2p/http/websocket-handler");var Ex=Ln(wx(),1),$p=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=tu(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"){bx(n);return}let s=t.headers.get("origin");if(s==null||s==="null")return;let i=tu(e,t.headers);for(let a of n.headers.getSetCookie()){let c=[...this.cookies.get(i.hostname)??[],...ZL(Ex.default.parse(a))];this.cookies.set(i.hostname,c)}bx(n)}};function bx(r){return r.headers.has("set-cookie")&&r.headers.delete("set-cookie"),r}function ZL(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),!JL.includes(n.toLowerCase())&&o!=null&&t.push({name:n,value:o})}),t.map(n=>({...n,...e}))}var JL=["domain","expires","httponly","max-age","partitioned","path","samesite","secure"];var Kp=class{async prepareRequest(e,t){if(t.headers.get("origin")!=null||t.mode==="no-cors")return;let n=tu(e,t.headers);t.headers.set("origin",`${n.protocol}//${n.host}`)}};function eD(r){return typeof r.init=="function"}function Vp(r,e){if(eD(r)){let t=r;return t.handler=r.init(e),delete t.init,t}return r}function xx(r){let e=Np(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=Vp(r,n);return t[Up]=o.handler,async s=>{if(!Pp(s.method,s.headers))return r?.fallback!=null?r.fallback(s):new Pn(null,{status:400});let i=new TransformStream;try{let a=new Pn(i.readable,{status:101,headers:await $4(s.headers)}),c=new su(s,i.writable,r);return o.handler(c),a}catch{return new Pn(null,{status:500})}}}};return t}var Hp="/.well-known/libp2p/protocols";function vx(r){return xx({path:Hp,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 qp=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("",vx(this))}async start(){await this.components.registrar.handle(au,this.onStream.bind(this))}async stop(){await this.components.registrar.unhandle(au)}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(XE(n,e));await QE(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(ZE),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=F4(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}),tD(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[Up];if(n!=null){n(e);return}}e.close(ou.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=Np(t.method),t=Vp(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 tD(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 Sx(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function Ax(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function Ix(r,e,t){for(let n of e.middleware)await n.processResponse?.(r,e,t);return t}var Wp=class{log;components;httpRegistrar;origin;cookies;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:http"),this.httpRegistrar=new qp(e,t),this.origin=new Kp,this.cookies=new $p(e,t)}[Symbol.toStringTag]="@libp2p/http";[me]=["@libp2p/http"];async start(){await at(this.httpRegistrar)}async stop(){await lt(this.httpRegistrar)}agent(...e){throw new Ga("This method is not supported in browsers")}dispatcher(...e){throw new Ga("This method is not supported in browsers")}async connect(e,t={}){let n=Fa(e),o=kn(t),s={...t,headers:o,method:"GET",middleware:t.middleware?.map(i=>i(this.components))??[]};return o.set("connection","upgrade"),o.set("upgrade","websocket"),Ax(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}=Dp(n);return new iu(i,new URL(`http://${Lp(n,s.headers)}${decodeURIComponent(a)}`),this.components.connectionManager,s)})}async fetch(e,t={}){let n=Fa(e),o={...t,headers:kn(t),method:"GET",middleware:[this.origin,this.cookies,...t.middleware?.map(i=>i(this.components))??[]]},s=await Sx(n,o,async()=>this.sendRequest(n,t));return Ix(n,o,s)}async connectProtocol(e,t,n){let o=await this.getProtocolPath(e,t,n),s=Fa(e,o);return this.connect(s,n)}async fetchProtocol(e,t,n={}){let o=await this.getProtocolPath(e,t,n),s=Fa(e,o);return this.fetch(s,n)}async getSupportedProtocols(e,t={}){let n=Fa(e,Hp),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=Lp(e,kn(t)),{addresses:o,httpPath:s}=Dp(e),a=await(await this.components.connectionManager.openConnection(o,{signal:t.signal??void 0})).newStream(au,{signal:t.signal??void 0});return ax(a,new URL(`http://${n}${decodeURIComponent(s)}`),t)}};function Tx(r={}){return e=>new Wp(e,r)}var _x="0.1.0";var Cx="id/push",kx="1.0.0",Px="1.0.0";var Qo;(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 Ne('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 Ne('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)})(Qo||(Qo={}));var ar={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function Rx(r){if(r!=null&&r.length>0)try{return q(r)}catch{}}async function zp(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=tt(o.publicKey);if(!xn(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,Qt.DOMAIN),d=Qt.createFromProtobuf(l.payload),u=Jr(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=Qt.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 $a=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}/${_x}`,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 Gp=class extends $a{connectionManager;concurrency;_push;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ar.protocolPrefix}/${Cx}/${Px}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??ar.concurrency,this._push=Wn(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 Qt({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=R(s.metadata.get("AgentVersion")??C(this.host.agentVersion)),a=R(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 Ue(f,{maxDataLength:c.maxMessageSize}).pb(Qo).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(io(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 Ue(e,{maxDataLength:this.maxMessageSize}).pb(Qo).read(o);await e.close(o),await zp(this.components.peerStore,this.components.events,n,t,i),n.trace("handled push from %p",t.remotePeer)}};var Yp=class extends $a{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ar.protocolPrefix}/${"id"}/${kx}`,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=Ue(n,{maxDataLength:this.maxMessageSize}).pb(Qo),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=tt(o),c=Jr(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),zp(this.components.peerStore,this.components.events,this.log,e,n)}maybeAddObservedAddress(e){let t=Rx(e);if(t==null||(this.log.trace("our observed address was %a",t),Qe(t)))return;let n=t.getComponents();if((n[0].code===41||n[0].code===42&&n[1].code===41)&&!dd(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}Xs.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 Qt({peerId:this.components.peerId,multiaddrs:i});a=(await vr.seal(d,this.components.privateKey,{signal:o})).marshal().subarray()}let c=t.remoteAddr.bytes;N9.matches(t.remoteAddr)||(c=void 0);let l=Ue(e).pb(Qo);n("send response"),await l.write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:ft(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 Lx(r={}){return e=>new Yp(e,r)}function Dx(r={}){return e=>new Gp(e,r)}var ai=1e3,W4=60*ai,jp=60*W4,Nx="/ipfs/kad/1.0.0",Xp=48*jp;var Ox=24*jp,Mx=10,Bx=16384,Ux=jp,z4=jp,khe=10*ai,Fx=10*ai;var Qp=20,Zo=10,$x=5*W4,Kx=ai,Vx=5*ai,Hx=5*W4,qx=30*ai,Wx=180*ai,G4=`${us}-kad-dht`;var cu;(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)})(cu||(cu={}));function zx(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 Gx(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 cu.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:zx(this.timeReceived)}}static deserialize(e){let t=cu.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=Gx(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"}},Zp=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 Yx;(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)})(Yx||(Yx={}));var Ae;(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"})(Ae||(Ae={}));var e0;(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"})(e0||(e0={}));(function(r){r.codec=()=>We(e0)})(Ae||(Ae={}));var Va;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(Va||(Va={}));var Y4;(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"})(Y4||(Y4={}));(function(r){r.codec=()=>We(Y4)})(Va||(Va={}));var Ka;(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),Va.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 Ne('Decode error - map field "multiaddrs" had too many elements');s.multiaddrs.push(t.bytes());break}case 3:{s.connection=Va.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)})(Ka||(Ka={}));var es;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&e0[t.type]!==0&&(n.uint32(8),Ae.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),Ka.codec().encode(s,n);if(t.providers!=null)for(let s of t.providers)n.uint32(74),Ka.codec().encode(s,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={type:Ae.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=Ae.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 Ne('Decode error - map field "closer" had too many elements');s.closer.push(Ka.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 Ne('Decode error - map field "providers" had too many elements');s.providers.push(Ka.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)})(es||(es={}));function j4(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 lu(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 t0(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function sn(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function X4(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function uu(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function Q4(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function jx(r,e={}){let t={...r,name:"PATH_ENDED",type:8};return e.onProgress?.(new CustomEvent("kad-dht:query:path-ended",{detail:t})),t}function Xx(r,e,t){if(t.length===0)throw new A("No records given");let o=R(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 aD(r,e){return 0}var Qx={pk:aD};async function Ha(r,e,t){let n=e.key,s=R(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 cD=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(R(r.subarray(0,4))!=="/pk/")throw new A("key was not prefixed with /pk/");let o=tt(e),s=r.slice(4);if(!ee(s,o.toMultihash().bytes))throw new A("public key does not match passed in key")},Zx={pk:cD};var lD=C("/pk/");function Jx(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>!Qe(e))}}async function ts(r,e){let t=await ze.digest(r);return e?.signal?.throwIfAborted(),t.digest}async function cr(r,e){return ts(r.toMultihash().bytes,e)}function rs(r,e){return new Fe(`${r}/${R(e,"base32")}`,!1)}function ev(r){return Oe([lD,r.toMultihash().bytes])}function tv(r){return R(r.subarray(0,4))==="/pk/"}function rv(r){let e=ke(r.subarray(4));return Ze(e)}function Z4(r,e){let t=new Date;return new Pt(r,e,t).serialize()}function r0(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(Mn,ke(C(n,"base32"))),peerId:Me(t)}}function n0(r,e,t){let n=typeof e=="string"?e:R(e.multihash.bytes,"base32"),o=[r,n];return t!=null&&o.push(t.toString()),new Fe(o.join("/"))}function o0(r){return new Date(hr(r))}function ci(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 s0(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 i0=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=rs(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 Ha(this.validators,s,t),s}async*sendCorrectionRecord(e,t,n,o){this.log("sendCorrection for %b",e);let s=Z4(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=rs(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:Ae.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=Z4(e,t),s=rs(this.datastorePrefix,e);this.log(`storing record for key ${s.toString()}`),await this.components.datastore.put(s,o.subarray(),n),yield*Yi(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),i=>Lr(i,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:Ae.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(sn({from:a.peer.id,error:new Jo("Value not put correctly"),path:d.path},n)));return c}),i=>io(i,{ordered:!1,concurrency:Zo}),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=Xx(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 Le("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 uu({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 uu({from:s.id,value:c.record.value,path:a},t))};yield*this.queryManager.run(e,o,t)}};function nv(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function du(r){if(r.id==null)throw new Error("Invalid peer in message");let e=ke(r.id);return{id:Ze(e),multiaddrs:(r.multiaddrs??[]).map(t=>q(t))}}var a0=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:Ae.ADD_PROVIDER,key:o,providers:[nv({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 sn({from:u.peer.id,error:f,path:u.path},n)}}let l=vt({objectMode:!0}),d=new St({concurrency:Zo});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 lu({from:this.components.peerId,messageType:Ae.GET_PROVIDERS,providers:d,path:{index:-1,queued:0,running:0,total:0}},t),yield X4({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:Ae.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 X4({from:d.from,providers:u,path:d.path},t),o+=u.length,o>=n))return}}};var c0=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 Gr({...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 Q4({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 j4({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 lu({from:e,messageType:a.type,closer:a.closer.map(du),providers:a.providers.map(du),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 sn({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 Q4({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 j4({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 lu({from:e,messageType:o,path:n.path},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),s?.abort(a),yield sn({from:e,error:a,path:n.path},n)}finally{this.timeout.cleanUp(i)}}async _writeMessage(e,t,n){await Ue(e).write(t,es,n)}async _writeReadMessage(e,t,n){let o=Ue(e);await o.write(t,es,n);let s=await o.read(es,n);return s.closer.forEach(i=>{this.safeDispatchEvent("peer",{detail:du(i)})}),s.providers.forEach(i=>{this.safeDispatchEvent("peer",{detail:du(i)})}),s}};function li(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 ns=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:nn(this.originDhtKey,t),path:n};if(this.peerDistances.length===this.capacity){let i=this.peerDistances[this.peerDistances.length-1];if(i!=null&&li(o.distance,i.distance)!==-1)return}let s=!1;for(let i=0;i<this.peerDistances.length;i++){let a=li(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=nn(n,this.originDhtKey),s=this.peerDistances[this.peerDistances.length-1].distance;return li(o,s)===-1}async anyCloser(e,t){return e.length===0?!1:Promise.any(e.map(async n=>this.isCloser(n,t)))}};var l0=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:Ae.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=ev(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=tt(s.record.value),a=xn(i);if(!a.equals(e))throw new Nn("public key does not match id");if(a.publicKey==null)throw new Nn("public key missing");yield uu({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 t0({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:Ae.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 t0({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 Le("Not found")}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await ts(e,t),o=new ns(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:Ae.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 t0({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 sn({from:o.from,error:new Jo(i),path:n.path},n);continue}yield o}}async _verifyRecordOnline(e,t){if(e.timeReceived==null)throw new Zp("invalid record received");await Ha(this.validators,new Pt(e.key,e.value,e.timeReceived),t)}async getClosestPeersOffline(e,t){let n=[];try{let i=ke(e),a=Ze(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 ts(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 u0=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=n0(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=n0(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 Ut,o=n0(this.datastorePrefix,e);for await(let s of this.datastore.query({prefix:o.toString()},t)){let{peerId:i}=r0(s.key);n.set(i,o0(s.value))}return n}};var dD=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 fD(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}=dD(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=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function ov(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=fD(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}async function*sv(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=vt({objectMode:!0}),h=new St({concurrency:s,sort:(g,m)=>li(g.options.distance,m.options.distance)});h.addEventListener("idle",()=>{f.push(jx({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 Vt)};u.addEventListener("abort",p);try{let m=function(w,T){if(w==null)return;l.add(w.id.toMultihash().bytes);let I=nn(T,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:T,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=nn($,g);if(li(z,I)!==-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(sn({from:w.id,error:D,path:{index:i,queued:h.queued,running:h.running-1,total:h.size-1}},r))}},{distance:I}).catch(D=>{c.error("error during query - %e",D)})},g=await ts(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 d0=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;allowQueryWithZeroPeers;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??Qp,this.alpha=t.alpha??Zo,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(Wx);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:`+R(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 ov(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 ts(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=Et(1024),f=d.map((h,p)=>sv({...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 jt(...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 hD(r){return r[Symbol.asyncIterator]!=null}function pD(r){if(hD(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 f0=pD;var h0=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??Qp,this.interval=t.interval??$x,this.initialInterval=t.initialInterval??Kx,this.queryTimeout=t.queryTimeout??Vx,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=s0(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 Yi(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),i=>Ho(i,this.count),async i=>f0(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 p0=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 St({concurrency:t.concurrency??Mx,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new Gr({...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??Ox,this.maxQueueSize=t.maxQueueSize??Bx,this.validity=t.validity??Xp,this.interval=t.interval??Ux,this.contentRouting=t.contentRouting,this.running=!1,this.reprovide=s0(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(z4)}).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}=r0(t.key),i=o0(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(z4)}).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 mD=20,gD=5e3,yD="kad-close",wD=50,m0=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??gD,this.peerSetSize=t.peerSetSize??mD,this.closeTagName=t.closeTagName??yD,this.closeTagValue=t.closeTagValue??wD,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 ns(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},[G4]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[G4]:void 0}})})])}};function fu(r){return Array.isArray(r?.peers)}var g0=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??iv,this.kBucketSize=t.kBucketSize??hu,this.splitThreshold=t.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=t.numberOfOldContactsToPing??av,this.lastPingThreshold=t.lastPingThreshold??cv,this.ping=t.ping,this.verify=t.verify,this.onAdd=t.onAdd,this.onRemove=t.onRemove,this.addingPeerMap=eo({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(!ED(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 ns(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*Lr(n.peers,({peer:o})=>o.id)}count(){function e(t){if(fu(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(fu(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+R(nn(e,t),"base16"))}_determineBucket(e){let t=R(e,"base2");function n(o,s=0){return fu(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)R(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));bD(e,n,o)}};function bD(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function ED(r,e){return r.lastPing<Date.now()-e}var hu=20,iv=6;var xD=20,vD=100,av=3;var SD=20,AD=100,lv="kad-peer",ID=1,cv=6e5,TD=!0,_D=1e3,y0=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??hu,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??lv,this.peerTagValue=t.peerTagValue??ID,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??TD,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??_D,this.shutdownController=new AbortController,this.shutdownController.signal,this.pingOldContactQueue=new It({concurrency:t.pingOldContactConcurrency??SD,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??AD}),this.pingOldContactTimeout=new Gr({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new It({concurrency:t.pingNewContactConcurrency??xD,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??vD}),this.pingNewContactTimeout=new Gr({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new g0(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 m0(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 at(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(lv)],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 lt(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 io(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(fu(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 uv=[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 w0=15,b0=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??Hx,this.refreshQueryTimeout=i??qx,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 f0(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>w0&&(e=w0);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=ke(o);return Ze(s)}_makePeerId(e,t,n){if(n>w0)throw new Error(`Cannot generate peer ID for common prefix length greater than ${w0}`);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=uv[c],d=new ArrayBuffer(34),u=new DataView(d,0,d.byteLength);return u.setUint8(0,ze.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=nn(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var E0=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=ke(o.id),i=Ze(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 x0=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:Ae.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 v0=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([no(Lr(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:Ae.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 S0=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:Ae.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(tv(n)){this.log("is public key");let a=rv(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new Le("No public key found in key book");c=ft(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=rs(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()>Xp){await this.datastore.delete(t);return}return o}};var A0=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 I0=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 Ha(this.validators,o),o.timeReceived=new Date;let s=rs(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 T0=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={[Ae.GET_VALUE.toString()]:new S0(e,t),[Ae.PUT_VALUE.toString()]:new I0(e,t),[Ae.FIND_NODE.toString()]:new x0(e,t),[Ae.ADD_PROVIDER.toString()]:new E0(e,t),[Ae.GET_PROVIDERS.toString()]:new v0(e,t),[Ae.PING.toString()]:new A0(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 un)},o=AbortSignal.timeout(this.incomingMessageTimeout);o.addEventListener("abort",n);let s=Ue(e).pb(es);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 _0=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 Le("Could not find value for key")}},e6=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 Le("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},CD=32,kD=64,C0=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??hu,this.a=t.alpha??Zo,this.d=t.disjointPaths??this.a,this.protocol=t.protocol??Nx,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??CD,this.maxOutboundStreams=t.maxOutboundStreams??kD,this.peerInfoMapper=t.peerInfoMapper??Jx,this.onPeerConnectTimeout=t.onPeerConnectTimeout??Fx,this.providers=new u0(e,{...t.providers,logPrefix:n,datastorePrefix:o}),this.validators={...Zx,...t.validators},this.selectors={...Qx,...t.selectors},this.network=new c0(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:s}),this.routingTable=new y0(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 d0(e,{disjointPaths:this.d,alpha:this.a,logPrefix:n,metricsPrefix:s,initialQuerySelfHasRun:a,routingTable:this.routingTable,allowQueryWithZeroPeers:t.allowQueryWithZeroPeers}),this.peerRouting=new l0(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new i0(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:o}),this.contentRouting=new a0(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new b0(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new T0(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 _0(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new h0(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:a,operationMetrics:i}),this.reprovider=new p0(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 e6(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})=>!Qe(u)&&!yt.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=ci(this.get.bind(this),i,"GET_VALUE"),this.findProviders=ci(this.findProviders.bind(this),i,"FIND_PROVIDERS"),this.findPeer=ci(this.findPeer.bind(this),i,"FIND_PEER"),this.getClosestPeers=ci(this.getClosestPeers.bind(this),i,"GET_CLOSEST_PEERS"),this.provide=ci(this.provide.bind(this),i,"PROVIDE"),this.put=ci(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[Dn](){return this.dhtContentRouting}get[On](){return this.dhtPeerRouting}get[ls](){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 at(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await at(this.querySelf))}async stop(){this.running=!1,await lt(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 dv;(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"})(dv||(dv={}));function fv(r={}){return e=>new C0(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 pu=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),t6=Object.freeze({NEW_STREAM:Ie.NEW_STREAM,MESSAGE:Ie.MESSAGE_INITIATOR,CLOSE:Ie.CLOSE_INITIATOR,RESET:Ie.RESET_INITIATOR}),hv=Object.freeze({MESSAGE:Ie.MESSAGE_RECEIVER,CLOSE:Ie.CLOSE_RECEIVER,RESET:Ie.RESET_RECEIVER});var mu=1<<20,r6=4<<20,k0=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=mu,t=r6){this._buffer=new X,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}=mv(e),{value:o,offset:s}=mv(e,n),i=t&7;if(pu[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}}},PD=128,pv=127;function mv(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&pv)<<n:(s&pv)*Math.pow(2,n),n+=7}while(s>=PD);return e=o-e,{value:t,offset:e}}var n6=10*1024,o6=class{_pool;_poolOffset;constructor(){this._pool=Ge(n6),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);n6-o<100?(this._pool=Ge(n6),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)}},RD=new o6;function gu(r){let e=new X;return RD.write(r,e),e}var s6=class extends Bo{streamId;types;maxDataSize;muxer;constructor(e){super(e),this.types=e.direction==="outbound"?t6:hv,this.maxDataSize=e.maxDataSize,this.muxer=e.muxer,this.streamId=parseInt(this.id.substring(1)),e.direction==="outbound"&&queueMicrotask(()=>{this.muxer.send(gu({id:this.streamId,type:t6.NEW_STREAM,data:new X(C(this.id))}))})}sendData(e){let t=new X,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(gu({id:this.streamId,type:this.types.MESSAGE,data:s}))}return{sentBytes:n,canSendMore:this.muxer.send(t)}}sendReset(){return this.muxer.send(gu({id:this.streamId,type:this.types.RESET}))}async sendCloseWrite(e){this.muxer.send(gu({id:this.streamId,type:this.types.CLOSE})),e?.signal?.throwIfAborted()}async sendCloseRead(e){e?.signal?.throwIfAborted()}sendPause(){}sendResume(){}};function gv(r){let{id:e,muxer:t,direction:n,maxMsgSize:o=mu}=r;return new s6({...r,id:n==="outbound"?`i${e}`:`r${e}`,direction:n,maxDataSize:o,muxer:t,log:r.log.newScope(`${n}:${e}`),protocol:""})}var LD=5;function DD(r){let e={...r,type:`${pu[r.type]} (${r.type})`};return r.type===Ie.NEW_STREAM&&(e.data=R(r.data.subarray())),(r.type===Ie.MESSAGE_INITIATOR||r.type===Ie.MESSAGE_RECEIVER)&&(e.data=R(r.data.subarray(),"base16")),e}var P0=class extends Mo{_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??mu,this.maxUnprocessedMessageQueueSize=t.maxUnprocessedMessageQueueSize??r6,this.decoder=new k0(this.maxMessageSize,this.maxUnprocessedMessageQueueSize),this.rateLimiter=new na({points:t.disconnectThreshold??LD,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),gv({...n,id:e,direction:t,maxMsgSize:this.maxMessageSize,log:this.log,muxer:this})}handleMessage(e){if(this.log.enabled&&this.log.trace("incoming message",DD(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,pu[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 i6=class{protocol="/mplex/6.7.0";_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@libp2p/mplex";[me]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new P0(e,{...this._init})}};function yv(r={}){return()=>new i6(r)}var ND=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 OD(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}=ND(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=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function wv(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=OD(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}var bv="1.0.0",Ev="ping",xv="ipfs";var R0=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;constructor(e,t={}){this.components=e,this.started=!1,this.protocol=`/${t.protocolPrefix??xv}/${Ev}/${bv}`,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 un("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 wv(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 X,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 as(`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 Sv(r={}){return e=>new R0(e,r)}var Kt;(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=()=>We(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)})(Kt||(Kt={}));var Av=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"],a6=Array.from("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"),Iv="libp2p+webrtc+v1/",Tv=2*1024*1024,qa=16*1024;function FD(r=qa){let e=he(r-he(r)),t=1+he(Object.keys(Kt.Flag).length-1),n=1,o=r-e-t-n,s=he(o);return e+t+n+s}var _v=FD();var Cv=1e4,c6="/webrtc",yu="/webrtc-signaling/0.0.1";var $D=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 KD(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}=$D(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=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function wo(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=KD(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}var kv=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))},VD=(function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r})();var HD=(function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r})();var qD=(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 WD=(function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r})();var zD=(function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r})();var GD=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,YD=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,Pv=3,jD=[["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",GD]],Rv=[["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 Dv(r){return r?Lv(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new zD:typeof navigator<"u"?Lv(navigator.userAgent):ZD()}function XD(r){return r!==""&&jD.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 Lv(r){var e=XD(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new WD;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<Pv&&(o=kv(kv([],o,!0),JD(Pv-o.length),!0)):o=[];var s=o.join("."),i=QD(r),a=YD.exec(r);return a&&a[1]?new qD(t,s,i,a[1]):new VD(t,s,i)}function QD(r){for(var e=0,t=Rv.length;e<t;e++){var n=Rv[e],o=n[0],s=n[1],i=s.exec(r);if(i)return o}return null}function ZD(){var r=typeof process<"u"&&process.version;return r?new HD(process.version.slice(1)):null}function JD(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var Nv=Dv(),L0=Nv!=null&&Nv.name==="firefox";async function l6(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??Av.map(e=>({urls:[e]})),r}var Ov=(r=32)=>Iv+[...Array(r)].map(()=>a6.at(Math.floor(Math.random()*a6.length))).join("");var u6=class extends Bo{channel;incomingData;maxBufferedAmount;receivedFinAck;finAckTimeout;constructor(e){super({...e,maxMessageSize:(e.maxMessageSize??qa)-_v}),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=vt(),this.maxBufferedAmount=e.maxBufferedAmount??Tv,this.finAckTimeout=e.finAckTimeout??Cv,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 Ks(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),wo(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 cn(`Invalid datachannel state - ${this.channel.readyState}`);if(this.log.trace('sending message, channel state "%s"',this.channel.readyState),L0){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(Kt.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(Kt.Flag.RESET),this.receivedFinAck?.reject(e)}catch(t){this.log.error("failed to send reset - %e",t)}}async sendCloseWrite(e){this._sendFlag(Kt.Flag.FIN),e?.signal?.throwIfAborted(),this.receivedFinAck=Promise.withResolvers();let t=e?.signal??AbortSignal.timeout(this.finAckTimeout),n=[wo(this.channel,"close",{signal:t}),wo(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(Kt.Flag.STOP_SENDING),e?.signal?.throwIfAborted()}processIncomingProtobuf(e){let t=Kt.decode(e);t.message!=null&&(this.readStatus==="readable"||this.readStatus==="paused")&&this.onData(new X(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===Kt.Flag.FIN&&(this._sendFlag(Kt.Flag.FIN_ACK),this.onRemoteCloseWrite()),t.flag===Kt.Flag.RESET&&(this.receivedFinAck?.reject(new fi("The stream was reset")),this.onRemoteReset()),t.flag===Kt.Flag.STOP_SENDING&&this.onRemoteCloseRead(),t.flag===Kt.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=Kt.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 wu(r){let{channel:e,direction:t,isHandshake:n}=r;return new u6({...r,id:`${e.id}`,log:r.log.newScope(`${n===!0?"handshake":t}:${e.id}`),protocol:""})}var os=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??c6,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 d6(e,{peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,protocol:this.protocol,earlyDataChannels:this.earlyDataChannels})}},d6=class extends Mo{peerConnection;dataChannelOptions;constructor(e,t){super(e,{...t,name:"muxer"}),this.peerConnection=t.peerConnection,this.protocol=t.protocol??c6,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=wu({...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),wu({...e,...this.dataChannelOptions,channel:t,direction:"outbound",log:this.log})}onData(){}};var f6=class extends Oo{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(){}},bu=r=>new f6(r);var D0=globalThis.RTCPeerConnection,N0=globalThis.RTCSessionDescription,Mv=globalThis.RTCIceCandidate;var ss=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},Mr=class extends ss{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var O0=class extends ss{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var M0=class extends ss{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},B0=class extends ss{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=()=>We(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 U0=async(r,e,t)=>{try{let n=Promise.withResolvers();for(eN(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 Mv(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 eN(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 di(`RTCPeerConnection connection state became "${r.connectionState}"`));break;default:break}}}function F0(r){let e;for(let t of r.getComponents())t.name==="p2p"&&(e=Me(t.value??""));if(e==null)throw new ln("Remote peerId must be present in multiaddr");return e}async function Bv({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}=Uv(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(yu,{signal:t,runOnLimitedConnection:!0}),g=Ue(p).pb(lr),m=new D0(r);m.addEventListener("connectionstatechange",()=>{switch(m.connectionState){case"closed":m.close();break;default:break}});let w=new os({peerConnection:m,dataChannelOptions:e});try{let T=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 I=await m.createOffer().catch($=>{throw a.error("could not execute createOffer - %e",$),new Mr("Failed to set createOffer")});a.trace("initiator send SDP offer %s",I.sdp),l?.(new H("webrtc:send-sdp-offer")),await g.write({type:lr.Type.SDP_OFFER,data:I.sdp},{signal:t}),await m.setLocalDescription(I).catch($=>{throw a.error("could not execute setLocalDescription - %e",$),new Mr("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 Mr("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",D.data);let F=new N0({type:"answer",sdp:D.data});return await m.setRemoteDescription(F).catch($=>{throw a.error("could not execute setRemoteDescription - %e",$),new Mr("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new H("webrtc:read-ice-candidates")),await U0(m,g,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected"),T.readyState!=="open"&&(a.trace("wait for init channel to open"),await wo(T,"open",{signal:t})),a.trace("closing init channel"),T.close(),a.trace("waiting for init channel to close"),await wo(T,"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(T){throw a.error("outgoing signaling error - %e",T),m.close(),p.abort(T),T}finally{m.onicecandidate=null,m.onicecandidateerror=null}}var Fv=Ce(pa.matchers[0],_e(290)),$0=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=>Fv.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=>Fv.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 $v(r,e,{peerConnection:t,signal:n,log:o}){o.trace("new inbound signaling stream");let s=Ue(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 Mr(`expected message type SDP_OFFER, received: ${c.type??"undefined"} `);o.trace("recipient received SDP offer %s",c.data);let l=new N0({type:"offer",sdp:c.data});await t.setRemoteDescription(l).catch(u=>{throw o.error("could not execute setRemoteDescription - %e",u),new Mr("Failed to set remoteDescription")});let d=await t.createAnswer().catch(u=>{throw o.error("could not execute createAnswer - %e",u),new Mr("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 Mr("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await U0(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=F0(e.remoteAddr),a=q(`/webrtc/p2p/${i}`);return o.trace("recipient connected to remote address %s",a),{remoteAddress:a,remotePeer:i}}var K0=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"})})}[vo]=!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(yu,(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(yu),this._started=!1}createListener(e){return new $0(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(yl.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 Bv({rtcConfiguration:await l6(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=bu({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:F0(e),muxerFactory:s,onProgress:t.onProgress,signal:t.signal});return this._closeOnShutdown(o,i),a}async _onProtocol(e,t,n){let o=new D0(await l6(this.init.rtcConfiguration));o.addEventListener("connectionstatechange",()=>{switch(o.connectionState){case"closed":o.close();break;default:break}});let s=new os({peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:i,remotePeer:a}=await $v(e,t,{peerConnection:o,signal:n,log:this.log});await e.close({signal:n});let c=bu({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 Uv(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 h6=Object.values(ps).map(r=>r.decoder).reduce((r,e)=>r.or(e)),tN=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function Kv(r){return r?.match(tN)?.groups?.fingerprint}function p6(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 rN(r){return He.decode(h6.decode(r))}function nN(r){let e=rN(p6(r)),t=oN(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 O0(n,r.toString());return`${t} ${o.join(":").toUpperCase()}`}function Vv(r){let e=r.split(":").map(o=>parseInt(o,16)),t=Uint8Array.from(e),n=Wt(ze.code,t);return q(`/certhash/${ec.encode(n.bytes)}`)}function oN(r){switch(r){case 17:return"sha-1";case 18:return"sha-256";case 19:return"sha-512";default:throw new B0(r)}}function Hv(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=nN(r);return{type:"answer",sdp:`v=0
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
66
66
  o=- 0 0 IN IP${o==="ip4"?4:6} ${t}
67
67
  s=-
68
68
  t=0 0
@@ -76,10 +76,10 @@ a=ice-pwd:${e}
76
76
  a=fingerprint:${s}
77
77
  a=setup:passive
78
78
  a=sctp-port:5000
79
- a=max-message-size:${qa}
79
+ a=max-message-size:${Va}
80
80
  a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host
81
81
  a=end-of-candidates
82
- `}}function qv(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 $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
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:${qa}
95
+ a=max-message-size:${Va}
96
96
  a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host
97
97
  a=end-of-candidates
98
- `}}function m6(r,e){if(r.sdp===void 0)throw new A("Can't munge a missing SDP");let t=r.sdp.includes(`\r
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
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 g6=C("libp2p-webrtc-noise:");function zv(r,e,t){let n=r.trim().toLowerCase().replaceAll(":",""),o=C(n,"hex"),s=Wt(ze.code,o),i=h6.decode(p6(e)),a=g6.byteLength+s.bytes.byteLength+i.byteLength;return t==="server"?Oe([g6,i,s.bytes],a):Oe([g6,s.bytes,i],a)}var sN=L0?"iceconnectionstatechange":"connectionstatechange";function iN(r,e){return r.role==="server"}async function Gv(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=m6(u,t);n.log.trace("client setting local offer %s",f.sdp),await r.setLocalDescription(f);let h=Hv(n.remoteAddr,t);n.log.trace("client setting server description %s",h.sdp),await r.setRemoteDescription(h)}else{let u=qv(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=m6(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 wo(o,"open",n)),n.log.trace("%s handshake channel opened",n.role),iN(n,r)){let u=r.remoteFingerprint()?.value??"";n.remoteAddr=n.remoteAddr.encapsulate(Vv(u))}let s=Kv(r.localDescription?.sdp);if(s==null)throw new ss("Could not get fingerprint from local description sdp");n.log.trace("%s performing noise handshake",n.role);let i=zv(s,n.remoteAddr,n.role),a=sp({prologueBytes:i})(n),c=wu({channel:o,direction:"outbound",isHandshake:!0,log:n.log,...n.dataChannel??{}}),l=bu({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(sN,()=>{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 Yv(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 os({peerConnection:s,metrics:t.events,dataChannelOptions:t.dataChannel});return{peerConnection:s,muxerFactory:i}}var V0=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"})})}[vo]=!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=Ov(),{peerConnection:i,muxerFactory:a}=await Yv("client",s,{rtcConfiguration:typeof this.init.rtcConfiguration=="function"?await this.init.rtcConfiguration():this.init.rtcConfiguration??{},dataChannel:this.init.dataChannel});try{return await Gv(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 M0("WebRTCDirectTransport.createListener")}listenFilter(e){return[]}dialFilter(e){return e.filter(gl.exactMatch)}};function jv(r){return e=>new V0(e,r)}function Xv(r){return e=>new K0(e,r)}var aN=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 cN(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}=aN(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=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function Qv(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=cN(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}function Zv(){throw new Error("WebSocket Servers can not be created in the browser!")}var lN=1024*1024*4,uN=10,y6=class extends Oo{websocket;maxBufferedAmount;checkBufferedAmountTask;constructor(e){super(e),this.websocket=e.websocket,this.maxBufferedAmount=e.maxBufferedAmount??lN,this.checkBufferedAmountTask=oa(this.checkBufferedAmount.bind(this),e.bufferedAmountPollInterval??uN),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 Jv(r){return new y6(r)}var w6=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"})})}[vo]=!0;[Symbol.toStringTag]="@libp2p/websockets";[me]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=Jv({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=qo(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 Qv(o,"open",t)}catch(s){if(t.signal?.aborted)throw this.metrics?.dialerEvents.increment({abort:!0}),new di(`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 Zv({logger:this.logger,events:this.components.events,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e.filter(t=>ro.exactMatch(t)||Qs.exactMatch(t))}dialFilter(e){return this.listenFilter(e)}};function eS(r={}){return e=>new w6(e,r)}var b6=Ln(th(),1);function tS(r,e){let t=e.map((n,o)=>({record:vn(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=b6.default.fromString(n.record.validity).toDate(),c=b6.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 rS="6.0.21",nS="helia";var oS={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 H0(r={}){let e=`${nS}/${rS} ${o1()}`;return{privateKey:r.privateKey,dns:r.dns,nodeInfo:{userAgent:e},addresses:{listen:["/p2p-circuit","/webrtc"]},transports:[UE(),Xv(),jv(),eS()],connectionEncrypters:[sp()],streamMuxers:[vE(),yv()],peerDiscovery:[_E(oS)],services:{autoNAT:TE(),dcutr:KE(),delegatedRouting:ew(g3()),dht:fv({clientMode:!0,validators:{ipns:ch},selectors:{ipns:tS}}),identify:Lx(),identifyPush:Dx(),keychain:Z1(r.keychain),ping:Sv(),http:Tx()}}}async function sS(r){let e=r.libp2p??{};e.privateKey==null&&r.datastore!=null&&(e.privateKey=await n4(r.datastore,r.keychain));let t=H0(e);return t.datastore=t.datastore??r.datastore,await Ww({...t,...e,start:!1})}async function E6(r={}){let e=r.datastore??new Js,t=r.blockstore??new vl,n;return zw(r.libp2p)?n=r.libp2p:n=await sS({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e}),{...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[p3(),n3()],routers:r.routers??[_3(n),I3()],metrics:n.metrics}}async function dN(r={}){let e=await E6(r),t=new Df(e);return e.start!==!1&&await t.start(),t}return dS(fN);})();
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);})();
104
104
  /*! Bundled license information:
105
105
 
106
106
  pvtsutils/build/index.js: