@helia/libp2p 0.0.0-1361bfa5
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/README.md +83 -0
- package/dist/index.min.js +177 -0
- package/dist/index.min.js.map +7 -0
- package/dist/src/index.d.ts +35 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +74 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/routing.d.ts +4 -0
- package/dist/src/routing.d.ts.map +1 -0
- package/dist/src/routing.js +46 -0
- package/dist/src/routing.js.map +1 -0
- package/dist/src/utils/bootstrappers.d.ts +4 -0
- package/dist/src/utils/bootstrappers.d.ts.map +1 -0
- package/dist/src/utils/bootstrappers.js +13 -0
- package/dist/src/utils/bootstrappers.js.map +1 -0
- package/dist/src/utils/libp2p-defaults.browser.d.ts +18 -0
- package/dist/src/utils/libp2p-defaults.browser.d.ts.map +1 -0
- package/dist/src/utils/libp2p-defaults.browser.js +66 -0
- package/dist/src/utils/libp2p-defaults.browser.js.map +1 -0
- package/dist/src/utils/libp2p-defaults.d.ts +50 -0
- package/dist/src/utils/libp2p-defaults.d.ts.map +1 -0
- package/dist/src/utils/libp2p-defaults.js +107 -0
- package/dist/src/utils/libp2p-defaults.js.map +1 -0
- package/dist/src/utils/libp2p.d.ts +17 -0
- package/dist/src/utils/libp2p.d.ts.map +1 -0
- package/dist/src/utils/libp2p.js +22 -0
- package/dist/src/utils/libp2p.js.map +1 -0
- package/package.json +92 -0
- package/src/index.ts +103 -0
- package/src/routing.ts +60 -0
- package/src/utils/bootstrappers.ts +12 -0
- package/src/utils/libp2p-defaults.browser.ts +85 -0
- package/src/utils/libp2p-defaults.ts +133 -0
- package/src/utils/libp2p.ts +43 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
(function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.HeliaLibp2P = factory()}(typeof self !== 'undefined' ? self : this, function () {
|
|
2
|
+
"use strict";var HeliaLibp2P=(()=>{var Pb=Object.create;var Dl=Object.defineProperty;var Lb=Object.getOwnPropertyDescriptor;var kb=Object.getOwnPropertyNames;var Db=Object.getPrototypeOf,Nb=Object.prototype.hasOwnProperty;var hr=(r,e)=>()=>{try{return e||r((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},yt=(r,e)=>{for(var t in e)Dl(r,t,{get:e[t],enumerable:!0})},v4=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of kb(e))!Nb.call(r,s)&&s!==t&&Dl(r,s,{get:()=>e[s],enumerable:!(n=Lb(e,s))||n.enumerable});return r};var Vo=(r,e,t)=>(t=r!=null?Pb(Db(r)):{},v4(e||!r||!r.__esModule?Dl(t,"default",{value:r,enumerable:!0}):t,r)),Ob=r=>v4(Dl({},"__esModule",{value:!0}),r);var op=hr(wi=>{"use strict";Object.defineProperty(wi,"__esModule",{value:!0});wi.Netmask4Impl=void 0;wi.ip2long=yi;wi.long2ip=jr;function jr(r){let e=(r&-16777216)>>>24,t=(r&255<<16)>>>16,n=(r&65280)>>>8,s=r&255;return[e,t,n,s].join(".")}var Kv=48,Vv=97,Hv=65;function qv(r){let e=0,t=10,n="9",s=0;r.length>1&&r[s]==="0"&&(r[s+1]==="x"||r[s+1]==="X"?(s+=2,t=16):"0"<=r[s+1]&&r[s+1]<="9"&&(s++,t=8,n="7"));let o=s;for(;s<r.length;){if("0"<=r[s]&&r[s]<=n)e=e*t+(r.charCodeAt(s)-Kv)>>>0;else if(t===16)if("a"<=r[s]&&r[s]<="f")e=e*t+(10+r.charCodeAt(s)-Vv)>>>0;else if("A"<=r[s]&&r[s]<="F")e=e*t+(10+r.charCodeAt(s)-Hv)>>>0;else break;else break;if(e>4294967295)throw new Error("too large");s++}if(s===o)throw new Error("empty octet");return[e,s]}function yi(r){let e=[];for(let t=0;t<=3&&r.length!==0;t++){if(t>0){if(r[0]!==".")throw new Error("Invalid IP");r=r.substring(1)}let[n,s]=qv(r);r=r.substring(s),e.push(n)}if(r.length!==0)throw new Error("Invalid IP");switch(e.length){case 1:if(e[0]>4294967295)throw new Error("Invalid IP");return e[0]>>>0;case 2:if(e[0]>255||e[1]>16777215)throw new Error("Invalid IP");return(e[0]<<24|e[1])>>>0;case 3:if(e[0]>255||e[1]>255||e[2]>65535)throw new Error("Invalid IP");return(e[0]<<24|e[1]<<16|e[2])>>>0;case 4:if(e[0]>255||e[1]>255||e[2]>255||e[3]>255)throw new Error("Invalid IP");return(e[0]<<24|e[1]<<16|e[2]<<8|e[3])>>>0;default:throw new Error("Invalid IP")}}var sp=class r{constructor(e,t){if(typeof e!="string")throw new Error("Missing `net' parameter");let n=t;if(!n){let s=e.split("/",2);e=s[0],n=s[1]}if(n||(n=32),typeof n=="string"&&n.indexOf(".")>-1){try{this.maskLong=yi(n)}catch{throw new Error("Invalid mask: "+n)}this.bitmask=NaN;for(let s=32;s>=0;s--)if(this.maskLong===4294967295<<32-s>>>0){this.bitmask=s;break}}else if(n||n===0)this.bitmask=parseInt(n,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(yi(e)&this.maskLong)>>>0}catch{throw new Error("Invalid net address: "+e)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+n);this.size=Math.pow(2,32-this.bitmask),this.base=jr(this.netLong),this.mask=jr(this.maskLong),this.hostmask=jr(~this.maskLong),this.first=this.bitmask<=30?jr(this.netLong+1):this.base,this.last=this.bitmask<=30?jr(this.netLong+this.size-2):jr(this.netLong+this.size-1),this.broadcast=this.bitmask<=30?jr(this.netLong+this.size-1):void 0}contains(e){return typeof e=="string"&&(e.indexOf("/")>0||e.split(".").length!==4)&&(e=new r(e)),e instanceof r?this.contains(e.base)&&this.contains(e.broadcast||e.last):(yi(e)&this.maskLong)>>>0===(this.netLong&this.maskLong)>>>0}next(e=1){return new r(jr(this.netLong+this.size*e),this.mask)}forEach(e){let t=yi(this.first),n=yi(this.last),s=0;for(;t<=n;)e(jr(t),t,s),s++,t++}toString(){return this.base+"/"+this.bitmask}};wi.Netmask4Impl=sp});var o5=hr(bi=>{"use strict";Object.defineProperty(bi,"__esModule",{value:!0});bi.Netmask6Impl=void 0;bi.ip6bigint=ap;bi.bigint2ip6=go;var zv=op(),ip=(1n<<128n)-1n;function ap(r){let e=r.indexOf("%");e!==-1&&(r=r.substring(0,e));let t=r.lastIndexOf(":");if(t!==-1&&r.indexOf(".",t)!==-1){let n=r.substring(t+1),s=(0,zv.ip2long)(n),o=r.substring(0,t+1)+"0:0";return s5(o)&~0xffffffffn|BigInt(s)}return s5(r)}function s5(r){let e=r.indexOf("::"),t;if(e!==-1){let s=r.substring(0,e),o=r.substring(e+2),i=s===""?[]:s.split(":"),a=o===""?[]:o.split(":"),c=8-i.length-a.length;if(c<0)throw new Error("Invalid IPv6: too many groups");t=[...i,...Array(c).fill("0"),...a]}else t=r.split(":");if(t.length!==8)throw new Error("Invalid IPv6: expected 8 groups, got "+t.length);let n=0n;for(let s=0;s<8;s++){let o=t[s];if(o.length===0||o.length>4)throw new Error('Invalid IPv6: bad group "'+o+'"');let i=parseInt(o,16);if(isNaN(i)||i<0||i>65535)throw new Error('Invalid IPv6: bad group "'+o+'"');n=n<<16n|BigInt(i)}return n}function go(r){if(r<0n||r>ip)throw new Error("Invalid IPv6 address value");let e=[];for(let i=0;i<8;i++)e.unshift(Number(r&0xffffn)),r>>=16n;let t=-1,n=0,s=-1,o=0;for(let i=0;i<8;i++)e[i]===0?s===-1?(s=i,o=1):o++:(o>n&&o>=2&&(t=s,n=o),s=-1,o=0);if(o>n&&o>=2&&(t=s,n=o),t!==-1&&t+n===8&&t>0)return e.slice(0,t).map(a=>a.toString(16)).join(":")+"::";if(t===0)return"::"+e.slice(n).map(a=>a.toString(16)).join(":");if(t>0){let i=e.slice(0,t).map(c=>c.toString(16)),a=e.slice(t+n).map(c=>c.toString(16));return i.join(":")+"::"+a.join(":")}else return e.map(i=>i.toString(16)).join(":")}var cp=class r{constructor(e,t){if(typeof e!="string")throw new Error("Missing `net' parameter");let n=t;if(n==null){let s=e.indexOf("/");s!==-1?(n=parseInt(e.substring(s+1),10),e=e.substring(0,s)):n=128}if(isNaN(n)||n<0||n>128)throw new Error("Invalid mask for IPv6: "+n);this.bitmask=n,this.bitmask===0?this.maskBigint=0n:this.maskBigint=ip>>BigInt(128-this.bitmask)<<BigInt(128-this.bitmask);try{this.netBigint=ap(e)&this.maskBigint}catch{throw new Error("Invalid IPv6 net address: "+e)}this.size=Number(1n<<BigInt(128-this.bitmask)),this.base=go(this.netBigint),this.mask=go(this.maskBigint),this.hostmask=go(~this.maskBigint&ip),this.first=this.base,this.last=go(this.netBigint+(1n<<BigInt(128-this.bitmask))-1n),this.broadcast=void 0}contains(e){return typeof e=="string"&&e.indexOf("/")>0&&(e=new r(e)),e instanceof r?this.contains(e.base)&&this.contains(e.last):(ap(e)&this.maskBigint)===this.netBigint}next(e=1){let t=1n<<BigInt(128-this.bitmask);return new r(go(this.netBigint+t*BigInt(e)),this.bitmask)}forEach(e){let t=this.netBigint,n=1n<<BigInt(128-this.bitmask),s=this.netBigint+n-1n,o=0;for(;t<=s;)e(go(t),Number(t),o),o++,t++}toString(){return this.base+"/"+this.bitmask}};bi.Netmask6Impl=cp});var i5=hr(ns=>{"use strict";Object.defineProperty(ns,"__esModule",{value:!0});ns.long2ip=ns.ip2long=ns.Netmask=void 0;var Ru=op();Object.defineProperty(ns,"ip2long",{enumerable:!0,get:function(){return Ru.ip2long}});Object.defineProperty(ns,"long2ip",{enumerable:!0,get:function(){return Ru.long2ip}});var Gv=o5(),lp=class r{constructor(e,t){if(typeof e!="string")throw new Error("Missing `net' parameter");(e.indexOf("/")!==-1?e.substring(0,e.indexOf("/")):e).indexOf(":")!==-1?this._impl=new Gv.Netmask6Impl(e,t):this._impl=new Ru.Netmask4Impl(e,t),this.base=this._impl.base,this.mask=this._impl.mask,this.hostmask=this._impl.hostmask,this.bitmask=this._impl.bitmask,this.size=this._impl.size,this.first=this._impl.first,this.last=this._impl.last,this.broadcast=this._impl.broadcast,this._impl instanceof Ru.Netmask4Impl?(this.maskLong=this._impl.maskLong,this.netLong=this._impl.netLong):(this.maskLong=0,this.netLong=0)}contains(e){return typeof e=="string"&&(e.indexOf("/")>0?e=new r(e):e.indexOf(":")===-1&&e.split(".").length!==4&&(e=new r(e))),e instanceof r?this.contains(e.base)&&this.contains(e.broadcast||e.last):this._impl.contains(e)}next(e=1){let t=this._impl.next(e);return new r(t.base,t.bitmask)}forEach(e){this._impl.forEach(e)}toString(){return this._impl.toString()}};ns.Netmask=lp});var I8=hr((RV,om)=>{"use strict";var HA=Object.prototype.hasOwnProperty,Dt="~";function Rc(){}Object.create&&(Rc.prototype=Object.create(null),new Rc().__proto__||(Dt=!1));function qA(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function T8(r,e,t,n,s){if(typeof t!="function")throw new TypeError("The listener must be a function");var o=new qA(t,n||r,s),i=Dt?Dt+e:e;return r._events[i]?r._events[i].fn?r._events[i]=[r._events[i],o]:r._events[i].push(o):(r._events[i]=o,r._eventsCount++),r}function Jd(r,e){--r._eventsCount===0?r._events=new Rc:delete r._events[e]}function At(){this._events=new Rc,this._eventsCount=0}At.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)HA.call(t,n)&&e.push(Dt?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};At.prototype.listeners=function(e){var t=Dt?Dt+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var s=0,o=n.length,i=new Array(o);s<o;s++)i[s]=n[s].fn;return i};At.prototype.listenerCount=function(e){var t=Dt?Dt+e:e,n=this._events[t];return n?n.fn?1:n.length:0};At.prototype.emit=function(e,t,n,s,o,i){var a=Dt?Dt+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,u,d;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,s),!0;case 5:return c.fn.call(c.context,t,n,s,o),!0;case 6:return c.fn.call(c.context,t,n,s,o,i),!0}for(d=1,u=new Array(l-1);d<l;d++)u[d-1]=arguments[d];c.fn.apply(c.context,u)}else{var f=c.length,h;for(d=0;d<f;d++)switch(c[d].once&&this.removeListener(e,c[d].fn,void 0,!0),l){case 1:c[d].fn.call(c[d].context);break;case 2:c[d].fn.call(c[d].context,t);break;case 3:c[d].fn.call(c[d].context,t,n);break;case 4:c[d].fn.call(c[d].context,t,n,s);break;default:if(!u)for(h=1,u=new Array(l-1);h<l;h++)u[h-1]=arguments[h];c[d].fn.apply(c[d].context,u)}}return!0};At.prototype.on=function(e,t,n){return T8(this,e,t,n,!1)};At.prototype.once=function(e,t,n){return T8(this,e,t,n,!0)};At.prototype.removeListener=function(e,t,n,s){var o=Dt?Dt+e:e;if(!this._events[o])return this;if(!t)return Jd(this,o),this;var i=this._events[o];if(i.fn)i.fn===t&&(!s||i.once)&&(!n||i.context===n)&&Jd(this,o);else{for(var a=0,c=[],l=i.length;a<l;a++)(i[a].fn!==t||s&&!i[a].once||n&&i[a].context!==n)&&c.push(i[a]);c.length?this._events[o]=c.length===1?c[0]:c:Jd(this,o)}return this};At.prototype.removeAllListeners=function(e){var t;return e?(t=Dt?Dt+e:e,this._events[t]&&Jd(this,t)):(this._events=new Rc,this._eventsCount=0),this};At.prototype.off=At.prototype.removeListener;At.prototype.addListener=At.prototype.on;At.prefixed=Dt;At.EventEmitter=At;typeof om<"u"&&(om.exports=At)});var R8=hr((XV,_8)=>{_8.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 s(o,i){t[o]=i,e++,e>=r&&(e=0,n=t,t=Object.create(null))}return{has:function(o){return t[o]!==void 0||n[o]!==void 0},remove:function(o){t[o]!==void 0&&(t[o]=void 0),n[o]!==void 0&&(n[o]=void 0)},get:function(o){var i=t[o];if(i!==void 0)return i;if((i=n[o])!==void 0)return s(o,i),i},set:function(o,i){t[o]!==void 0?t[o]=i:s(o,i)},clear:function(){t=Object.create(null),n=Object.create(null)}}}});var j8=hr((mG,W8)=>{"use strict";function yT(r){return r>=55296&&r<=56319}function wT(r){return r>=56320&&r<=57343}W8.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var s=t.length,o=0,i,a,c=0;c<s;c+=1){if(i=t.charCodeAt(c),a=t[c],yT(i)&&wT(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),o+=e(a),o===n)return t.slice(0,c+1);if(o>n)return t.slice(0,c-a.length+1)}return t}});var Q8=hr((gG,Y8)=>{"use strict";function bT(r){return r>=55296&&r<=56319}function ET(r){return r>=56320&&r<=57343}Y8.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,s=null,o=null,i=0;i<t;i++)s=e.charCodeAt(i),ET(s)?o!=null&&bT(o)?n+=1:n+=3:s<=127?n+=1:s>=128&&s<=2047?n+=2:s>=2048&&s<=65535&&(n+=3),o=s;return n}});var Z8=hr((yG,X8)=>{"use strict";var xT=j8(),vT=Q8();X8.exports=xT.bind(null,vT)});var t7=hr((wG,e7)=>{"use strict";var ST=Z8(),AT=/[\/\?<>\\:\*\|"]/g,TT=/[\x00-\x1f\x80-\x9f]/g,IT=/^\.+$/,CT=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i;function _T(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 J8(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(AT,e).replace(TT,e).replace(IT,e).replace(CT,e);return t=_T(t,e),ST(t,255)}e7.exports=function(r,e){var t=e&&e.replacement||"",n=J8(r,t);return t===""?n:J8(n,"")}});var r7=hr(Fi=>{"use strict";var PT="[object ArrayBuffer]",Ln=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===PT}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),s=r.toUint8Array(t);if(n.length!==s.byteLength)return!1;for(let o=0;o<n.length;o++)if(n[o]!==s[o])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 s=new Uint8Array(n),o=0;for(let i of t){let a=this.toUint8Array(i);s.set(a,o),o+=a.length}return e[e.length-1]instanceof Function?this.toView(s,e[e.length-1]):s.buffer}},km="string",LT=/^[0-9a-f\s]+$/i,kT=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,DT=/^[a-zA-Z0-9-_]+$/,vf=class{static fromString(e){let t=unescape(encodeURIComponent(e)),n=new Uint8Array(t.length);for(let s=0;s<t.length;s++)n[s]=t.charCodeAt(s);return n.buffer}static toString(e){let t=Ln.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return decodeURIComponent(escape(n))}},ur=class{static toString(e,t=!1){let n=Ln.toArrayBuffer(e),s=new DataView(n),o="";for(let i=0;i<n.byteLength;i+=2){let a=s.getUint16(i,t);o+=String.fromCharCode(a)}return o}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),s=new DataView(n);for(let o=0;o<e.length;o++)s.setUint16(o*2,e.charCodeAt(o),t);return n}},Sf=class r{static isHex(e){return typeof e===km&<.test(e)}static isBase64(e){return typeof e===km&&kT.test(e)}static isBase64Url(e){return typeof e===km&&DT.test(e)}static ToString(e,t="utf8"){let n=Ln.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 ur.toString(n,!0);case"utf16":case"utf16be":return ur.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 ur.fromString(e,!0);case"utf16":case"utf16be":return ur.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=Ln.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 vf.fromString(e);case"utf16":case"utf16be":return ur.fromString(e);case"utf16le":case"usc2":return ur.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 vf.toString(e);case"utf16":case"utf16be":return ur.toString(e);case"utf16le":case"usc2":return ur.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 s=0;s<t;s++)n[s]=e.charCodeAt(s);return n.buffer}static ToBinary(e){let t=Ln.toUint8Array(e),n="";for(let s=0;s<t.length;s++)n+=String.fromCharCode(t[s]);return n}static ToHex(e){let t=Ln.toUint8Array(e),n="",s=t.length;for(let o=0;o<s;o++){let i=t[o];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 s=0;s<t.length;s=s+2){let o=t.slice(s,s+2);n[s/2]=parseInt(o,16)}return n.buffer}static ToUtf16String(e,t=!1){return ur.toString(e,t)}static FromUtf16String(e,t=!1){return ur.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,"")||""}};Sf.DEFAULT_UTF8_ENCODING="utf8";function NT(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let s=arguments[n];for(let o in s)t[o]=s[o]}return t}function OT(...r){let e=r.map(s=>s.byteLength).reduce((s,o)=>s+o),t=new Uint8Array(e),n=0;return r.map(s=>new Uint8Array(s)).forEach(s=>{for(let o of s)t[n++]=o}),t.buffer}function BT(r,e){if(!(r&&e)||r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let s=0;s<r.byteLength;s++)if(t[s]!==n[s])return!1;return!0}Fi.BufferSourceConverter=Ln;Fi.Convert=Sf;Fi.assign=NT;Fi.combine=OT;Fi.isEqual=BT});var Qy=hr(ln=>{"use strict";Object.defineProperty(ln,"__esModule",{value:!0});ln.parseCookie=jy;ln.parse=jy;ln.stringifyCookie=NC;ln.stringifySetCookie=uh;ln.serialize=uh;ln.parseSetCookie=OC;ln.stringifySetCookie=uh;ln.serialize=uh;var Gy=/^[\u0021-\u003A\u003C\u003E-\u007E]+$/,Wy=/^[\u0021-\u003A\u003C-\u007E]*$/,RC=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,PC=/^[\u0020-\u003A\u003D-\u007E]*$/,LC=/^-?\d+$/,kC=Object.prototype.toString,DC=(()=>{let r=function(){};return r.prototype=Object.create(null),r})();function jy(r,e){let t=new DC,n=r.length;if(n<2)return t;let s=e?.decode||Yy,o=0;do{let i=q3(r,o,n);if(i===-1)break;let a=H3(r,o,n);if(i>a){o=r.lastIndexOf(";",i-1)+1;continue}let c=xs(r,o,i);t[c]===void 0&&(t[c]=s(xs(r,i+1,a))),o=a+1}while(o<n);return t}function NC(r,e){let t=e?.encode||encodeURIComponent,n=[];for(let s of Object.keys(r)){let o=r[s];if(o===void 0)continue;if(!Gy.test(s))throw new TypeError(`cookie name is invalid: ${s}`);let i=t(o);if(!Wy.test(i))throw new TypeError(`cookie val is invalid: ${o}`);n.push(`${s}=${i}`)}return n.join("; ")}function uh(r,e,t){let n=typeof r=="object"?r:{...t,name:r,value:String(e)},o=(typeof e=="object"?e:t)?.encode||encodeURIComponent;if(!Gy.test(n.name))throw new TypeError(`argument name is invalid: ${n.name}`);let i=n.value?o(n.value):"";if(!Wy.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(!RC.test(n.domain))throw new TypeError(`option domain is invalid: ${n.domain}`);a+="; Domain="+n.domain}if(n.path){if(!PC.test(n.path))throw new TypeError(`option path is invalid: ${n.path}`);a+="; Path="+n.path}if(n.expires){if(!BC(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 OC(r,e){let t=e?.decode||Yy,n=r.length,s=H3(r,0,n),o=q3(r,0,s),i=o===-1?{name:"",value:t(xs(r,0,s))}:{name:xs(r,0,o),value:t(xs(r,o+1,s))},a=s+1;for(;a<n;){let c=H3(r,a,n),l=q3(r,a,c),u=l===-1?xs(r,a,c):xs(r,a,l),d=l===-1?void 0:xs(r,l+1,c);switch(u.toLowerCase()){case"httponly":i.httpOnly=!0;break;case"secure":i.secure=!0;break;case"partitioned":i.partitioned=!0;break;case"domain":i.domain=d;break;case"path":i.path=d;break;case"max-age":d&&LC.test(d)&&(i.maxAge=Number(d));break;case"expires":if(!d)break;let f=new Date(d);Number.isFinite(f.valueOf())&&(i.expires=f);break;case"priority":if(!d)break;let h=d.toLowerCase();(h==="low"||h==="medium"||h==="high")&&(i.priority=h);break;case"samesite":if(!d)break;let p=d.toLowerCase();(p==="lax"||p==="strict"||p==="none")&&(i.sameSite=p);break}a=c+1}return i}function H3(r,e,t){let n=r.indexOf(";",e);return n===-1?t:n}function q3(r,e,t){let n=r.indexOf("=",e);return n<t?n:-1}function xs(r,e,t){let n=e,s=t;do{let o=r.charCodeAt(n);if(o!==32&&o!==9)break}while(++n<s);for(;s>n;){let o=r.charCodeAt(s-1);if(o!==32&&o!==9)break;s--}return r.slice(n,s)}function Yy(r){if(r.indexOf("%")===-1)return r;try{return decodeURIComponent(r)}catch{return r}}function BC(r){return kC.call(r)==="[object Date]"}});var K_={};yt(K_,{libp2pDefaults:()=>m0,withLibp2p:()=>$_});var S4=Symbol.for("@libp2p/connection");var Ds=Symbol.for("@libp2p/content-routing");var Wt=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},Nl=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},Ol=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},E=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"}},ca=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}},la=class extends Error{static name="UnsupportedOperationError";constructor(e="Unsupported operation"){super(e),this.name="UnsupportedOperationError"}};var Ns=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},Ho=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},pr=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},qo=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}};var Fr=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},ua=class extends Error{static name="StreamBufferError";constructor(e="The stream buffer was full"){super(e),this.name="StreamBufferError"}},ke=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},zo=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},$r=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},Bl=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},Ml=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},Ul=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},se=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},Os=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},Kn=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 Vn=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},Bs=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},da=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},Fl=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},Go=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},gr=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var $l=class extends Event{data;constructor(e,t){super("message",t),this.data=e}},Hn=class extends Event{error;local;constructor(e,t,n){super("close",n),this.error=t,this.local=e}},Kl=class extends Hn{constructor(e,t){super(!0,e,t)}},Vl=class extends Hn{constructor(e,t){super(!1,e,t)}};var Ms=Symbol.for("@libp2p/peer-discovery");var Hl=Symbol.for("@libp2p/peer-id");function Kr(r){return!!r?.[Hl]}var Us=Symbol.for("@libp2p/peer-routing");var Fs="keep-alive";function ql(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function yr(...r){let e=[];for(let t of r)ql(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 Vr(...r){let e=[];for(let t of r)ql(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 qn=Symbol.for("@libp2p/transport");var fa;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(fa||(fa={}));function Bb(r){return typeof r?.handleEvent=="function"}function Mb(r){return(r!==!0&&r!==!1&&r?.once)??!1}var oe=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){let s=Mb(n);super.addEventListener(e,i=>{if(s){let a=this.#e.get(i.type);a!=null&&(a=a.filter(({callback:c})=>c!==t),this.#e.set(i.type,a))}Bb(t)?t.handleEvent(i):t(i)},n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:t,once:s})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let s=this.#e.get(e);s!=null&&(s=s.filter(({callback:o})=>o!==t),this.#e.set(e,s))}safeDispatchEvent(e,t={}){return this.dispatchEvent(new CustomEvent(e,t))}};var ue=Symbol.for("@libp2p/service-capabilities"),jt=Symbol.for("@libp2p/service-dependencies");var E0={};yt(E0,{base58btc:()=>ve,base58flickr:()=>zb});var TR=new Uint8Array(0);function A4(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 fn(r){if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return $s(r);if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return $s(new Uint8Array(r.buffer,r.byteOffset,r.byteLength));throw new Error("Unknown type, must be binary type")}function T4(r){return new TextEncoder().encode(r)}function I4(r){return new TextDecoder().decode(r)}function Ub(r){return r?.buffer instanceof ArrayBuffer}function $s(r){return Ub(r)?r:r.slice()}function Fb(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 s=0;s<r.length;s++){var o=r.charAt(s),i=o.charCodeAt(0);if(t[i]!==255)throw new TypeError(o+" is ambiguous");t[i]=s}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),u=Math.log(256)/Math.log(a);function d(p){if(p instanceof Uint8Array||(ArrayBuffer.isView(p)?p=new Uint8Array(p.buffer,p.byteOffset,p.byteLength):Array.isArray(p)&&(p=Uint8Array.from(p))),!(p instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(p.length===0)return"";for(var y=0,m=0,g=0,w=p.length;g!==w&&p[g]===0;)g++,y++;for(var v=(w-g)*u+1>>>0,_=new Uint8Array(v);g!==w;){for(var P=p[g],D=0,B=v-1;(P!==0||D<m)&&B!==-1;B--,D++)P+=256*_[B]>>>0,_[B]=P%a>>>0,P=P/a>>>0;if(P!==0)throw new Error("Non-zero carry");m=D,g++}for(var N=v-m;N!==v&&_[N]===0;)N++;for(var U=c.repeat(y);N<v;++N)U+=r.charAt(_[N]);return U}function f(p){if(typeof p!="string")throw new TypeError("Expected String");if(p.length===0)return new Uint8Array;var y=0;if(p[y]!==" "){for(var m=0,g=0;p[y]===c;)m++,y++;for(var w=(p.length-y)*l+1>>>0,v=new Uint8Array(w);p[y];){var _=t[p.charCodeAt(y)];if(_===255)return;for(var P=0,D=w-1;(_!==0||P<g)&&D!==-1;D--,P++)_+=a*v[D]>>>0,v[D]=_%256>>>0,_=_/256>>>0;if(_!==0)throw new Error("Non-zero carry");g=P,y++}if(p[y]!==" "){for(var B=w-g;B!==w&&v[B]===0;)B++;for(var N=new Uint8Array(m+(w-B)),U=m;B!==w;)N[U++]=v[B++];return N}}}function h(p){var y=f(p);if(y)return y;throw new Error(`Non-${e} character`)}return{encode:d,decodeUnsafe:f,decode:h}}var $b=Fb,Kb=$b,_4=Kb;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 s=t.codePointAt(0);if(s===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=s,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 R4(this,e)}},w0=class{decoders;constructor(e){this.decoders=e}or(e){return R4(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 R4(r,e){return new w0({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var b0=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,t,n,s){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=s,this.encoder=new g0(e,t,n),this.decoder=new y0(e,t,s)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function Wo({name:r,prefix:e,encode:t,decode:n}){return new b0(r,e,t,n)}function zn({name:r,prefix:e,alphabet:t}){let{encode:n,decode:s}=_4(t,r);return Wo({prefix:e,name:r,encode:n,decode:o=>fn(s(o))})}function Vb(r,e,t,n){let s=r.length;for(;r[s-1]==="=";)--s;let o=new Uint8Array(s*t/8|0),i=0,a=0,c=0;for(let l=0;l<s;++l){let u=e[r[l]];if(u===void 0)throw new SyntaxError(`Non-${n} character`);a=a<<t|u,i+=t,i>=8&&(i-=8,o[c++]=255&a>>i)}if(i>=t||(255&a<<8-i)!==0)throw new SyntaxError("Unexpected end of data");return o}function Hb(r,e,t){let n=e[e.length-1]==="=",s=(1<<t)-1,o="",i=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],i+=8;i>t;)i-=t,o+=e[s&a>>i];if(i!==0&&(o+=e[s&a<<t-i]),n)for(;(o.length*t&7)!==0;)o+="=";return o}function qb(r){let e={};for(let t=0;t<r.length;++t)e[r[t]]=t;return e}function Ve({name:r,prefix:e,bitsPerChar:t,alphabet:n}){let s=qb(n);return Wo({prefix:e,name:r,encode(o){return Hb(o,n,t)},decode(o){return Vb(o,s,t,r)}})}var ve=zn({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),zb=zn({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var x0={};yt(x0,{base32:()=>ir,base32hex:()=>Yb,base32hexpad:()=>Xb,base32hexpadupper:()=>Zb,base32hexupper:()=>Qb,base32pad:()=>Wb,base32padupper:()=>jb,base32upper:()=>Gb,base32z:()=>Jb});var ir=Ve({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),Gb=Ve({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),Wb=Ve({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),jb=Ve({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),Yb=Ve({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),Qb=Ve({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),Xb=Ve({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),Zb=Ve({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),Jb=Ve({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var v0={};yt(v0,{base36:()=>Ks,base36upper:()=>eE});var Ks=zn({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),eE=zn({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var Fe={};yt(Fe,{Digest:()=>Vs,create:()=>Ct,decode:()=>Se,equals:()=>A0,hasCode:()=>bE});var tE=k4,P4=128,rE=127,nE=~rE,sE=Math.pow(2,31);function k4(r,e,t){e=e||[],t=t||0;for(var n=t;r>=sE;)e[t++]=r&255|P4,r/=128;for(;r&nE;)e[t++]=r&255|P4,r>>>=7;return e[t]=r|0,k4.bytes=t-n+1,e}var oE=S0,iE=128,L4=127;function S0(r,n){var t=0,n=n||0,s=0,o=n,i,a=r.length;do{if(o>=a)throw S0.bytes=0,new RangeError("Could not decode varint");i=r[o++],t+=s<28?(i&L4)<<s:(i&L4)*Math.pow(2,s),s+=7}while(i>=iE);return S0.bytes=o-n,t}var aE=Math.pow(2,7),cE=Math.pow(2,14),lE=Math.pow(2,21),uE=Math.pow(2,28),dE=Math.pow(2,35),fE=Math.pow(2,42),hE=Math.pow(2,49),pE=Math.pow(2,56),mE=Math.pow(2,63),gE=function(r){return r<aE?1:r<cE?2:r<lE?3:r<uE?4:r<dE?5:r<fE?6:r<hE?7:r<pE?8:r<mE?9:10},yE={encode:tE,decode:oE,encodingLength:gE},wE=yE,ha=wE;function pa(r,e=0){return[ha.decode(r,e),ha.decode.bytes]}function jo(r,e,t=0){return ha.encode(r,e,t),e}function Yo(r){return ha.encodingLength(r)}function Ct(r,e){let t=e.byteLength,n=Yo(r),s=n+Yo(t),o=new Uint8Array(s+t);return jo(r,o,0),jo(t,o,n),o.set(e,s),new Vs(r,t,e,o)}function Se(r){let e=fn(r),[t,n]=pa(e),[s,o]=pa(e.subarray(n)),i=e.subarray(n+o);if(i.byteLength!==s)throw new Error("Incorrect length");return new Vs(t,s,i,e)}function A0(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&A4(r.bytes,t.bytes)}}var Vs=class{code;size;digest;bytes;constructor(e,t,n,s){this.code=e,this.size=t,this.digest=$s(n),this.bytes=$s(s)}};function bE(r,e){return r.code===e}function D4(r,e){let{bytes:t,version:n}=r;return n===0?xE(t,T0(r),e??ve.encoder):vE(t,T0(r),e??ir.encoder)}var N4=new WeakMap;function T0(r){let e=N4.get(r);if(e==null){let t=new Map;return N4.set(r,t),t}return e}var ie=class r{code;version;multihash;bytes;"/";constructor(e,t,n,s){this.code=t,this.version=e,this.multihash=n,this.bytes=$s(s),this["/"]=this.bytes}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!==ma)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==SE)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=Ct(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&&A0(e.multihash,n.multihash)}toString(e){return D4(this,e)}toJSON(){return{"/":D4(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:s,multihash:o,bytes:i}=t;return new r(n,s,o,i??O4(n,s,o.bytes))}else if(t[AE]===!0){let{version:n,multihash:s,code:o}=t,i=Se(s);return r.create(n,o,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!==ma)throw new Error(`Version 0 CID must use dag-pb (code: ${ma}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let s=O4(e,t,n.bytes);return new r(e,t,n,s)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,ma,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,s=fn(e.subarray(n,n+t.multihashSize));if(s.byteLength!==t.multihashSize)throw new Error("Incorrect length");let o=s.subarray(t.multihashSize-t.digestSize),i=new Vs(t.multihashCode,t.digestSize,o,s);return[t.version===0?r.createV0(i):r.createV1(t.codec,i),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[d,f]=pa(e.subarray(t));return t+=f,d},s=n(),o=ma;if(s===18?(s=0,t=0):o=n(),s!==0&&s!==1)throw new RangeError(`Invalid CID version ${s}`);let i=t,a=n(),c=n(),l=t+c,u=l-i;return{version:s,codec:o,multihashCode:a,digestSize:c,multihashSize:u,size:l}}static parse(e,t){let[n,s]=EE(e,t),o=r.decode(s);if(o.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return T0(o).set(n,e),o}};function EE(r,e){switch(r[0]){case"Q":{let t=e??ve;return[ve.prefix,t.decode(`${ve.prefix}${r}`)]}case ve.prefix:{let t=e??ve;return[ve.prefix,t.decode(r)]}case ir.prefix:{let t=e??ir;return[ir.prefix,t.decode(r)]}case Ks.prefix:{let t=e??Ks;return[Ks.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 xE(r,e,t){let{prefix:n}=t;if(n!==ve.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let s=e.get(n);if(s==null){let o=t.encode(r).slice(1);return e.set(n,o),o}else return s}function vE(r,e,t){let{prefix:n}=t,s=e.get(n);if(s==null){let o=t.encode(r);return e.set(n,o),o}else return s}var ma=112,SE=18;function O4(r,e,t){let n=Yo(r),s=n+Yo(e),o=new Uint8Array(s+t.byteLength);return jo(r,o,0),jo(e,o,n),o.set(t,s),o}var AE=Symbol.for("@ipld/js-cid/CID");var I0={};yt(I0,{identity:()=>Yt});var B4=0,TE="identity",M4=fn;function IE(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 Ct(B4,M4(r))}var Yt={code:B4,name:TE,encode:M4,digest:IE};function Y(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 CE(r){return r.buffer instanceof ArrayBuffer}function ae(r){return CE(r)?r:r.slice()}var U4="1.2.840.10045.3.1.7",F4="1.3.132.0.34",$4="1.3.132.0.35";async function K4(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 V4(r,e,t){let n=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["sign"]);t?.signal?.throwIfAborted();let s=await crypto.subtle.sign({name:"ECDSA",hash:{name:"SHA-256"}},n,ae(e.subarray()));return t?.signal?.throwIfAborted(),new Uint8Array(s,0,s.byteLength)}async function H4(r,e,t,n){let s=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["verify"]);n?.signal?.throwIfAborted();let o=await crypto.subtle.verify({name:"ECDSA",hash:{name:"SHA-256"}},s,ae(e),ae(t.subarray()));return n?.signal?.throwIfAborted(),o}function z(r=0){return new Uint8Array(r)}function de(r=0){return new Uint8Array(r)}function _E(r){return r?.buffer instanceof ArrayBuffer}function Gl(r){if(_E(r))return r;let e=r.slice();return new Uint8Array(e.buffer,0,e.byteLength)}function Le(r,e){e==null&&(e=r.reduce((s,o)=>s+o.length,0));let t=de(e),n=0;for(let s of r)t.set(s,n),n+=s.length;return Gl(t)}var z4=Symbol.for("@achingbrain/uint8arraylist");function q4(r,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let t=0;for(let n of r){let s=t+n.byteLength;if(e<s)return{buf:n,index:e-t};t=s}throw new RangeError("index is out of bounds")}function Qo(r){return!!r?.[z4]}var W=class r{bufs;length;[z4]=!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(Qo(n)){t+=n.byteLength;for(let s of n.bufs)this.bufs.push(s)}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(Qo(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=q4(this.bufs,e);return t.buf[t.index]}set(e,t){let n=q4(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(Qo(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:s}=this._subList(e,t);return Le(n,s)}subarray(e,t){let{bufs:n,length:s}=this._subList(e,t);return n.length===1?n[0]:Le(n,s)}sublist(e,t){let{bufs:n,length:s}=this._subList(e,t),o=new r;return o.length=s,o.bufs=n,o}_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=[],s=0;for(let o=0;o<this.bufs.length;o++){let i=this.bufs[o],a=s,c=a+i.byteLength;if(s=c,e>=c)continue;let l=e>=a&&e<c,u=t>a&&t<=c;if(l&&u){if(e===a&&t===c){n.push(i);break}let d=e-a;n.push(i.subarray(d,d+(t-e)));break}if(l){if(e===0){n.push(i);continue}n.push(i.subarray(e-a));continue}if(u){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(!Qo(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 s=n.byteLength;if(s===0)throw new TypeError("search must be at least 1 byte long");let o=256,i=new Int32Array(o);for(let d=0;d<o;d++)i[d]=-1;for(let d=0;d<s;d++)i[n[d]]=d;let a=i,c=this.byteLength-n.byteLength,l=n.byteLength-1,u;for(let d=t;d<=c;d+=u){u=0;for(let f=l;f>=0;f--){let h=this.get(d+f);if(n[f]!==h){u=Math.max(1,f-a[h]);break}}if(u===0)return d}return-1}getInt8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getInt8(0)}setInt8(e,t){let n=de(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 s=z(2);new DataView(s.buffer,s.byteOffset,s.byteLength).setInt16(0,t,n),this.write(s,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 s=z(4);new DataView(s.buffer,s.byteOffset,s.byteLength).setInt32(0,t,n),this.write(s,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 s=z(8);new DataView(s.buffer,s.byteOffset,s.byteLength).setBigInt64(0,t,n),this.write(s,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=de(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 s=z(2);new DataView(s.buffer,s.byteOffset,s.byteLength).setUint16(0,t,n),this.write(s,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 s=z(4);new DataView(s.buffer,s.byteOffset,s.byteLength).setUint32(0,t,n),this.write(s,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 s=z(8);new DataView(s.buffer,s.byteOffset,s.byteLength).setBigUint64(0,t,n),this.write(s,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 s=z(4);new DataView(s.buffer,s.byteOffset,s.byteLength).setFloat32(0,t,n),this.write(s,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 s=z(8);new DataView(s.buffer,s.byteOffset,s.byteLength).setFloat64(0,t,n),this.write(s,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(!Y(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((s,o)=>s+o.byteLength,0)),n.length=t,n}};var C0={};yt(C0,{base10:()=>RE});var RE=zn({prefix:"9",name:"base10",alphabet:"0123456789"});var _0={};yt(_0,{base16:()=>PE,base16upper:()=>LE});var PE=Ve({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),LE=Ve({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var R0={};yt(R0,{base2:()=>kE});var kE=Ve({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var P0={};yt(P0,{base256emoji:()=>ME});var G4=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}"),DE=G4.reduce((r,e,t)=>(r[t]=e,r),[]),NE=G4.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function OE(r){return r.reduce((e,t)=>(e+=DE[t],e),"")}function BE(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let s=NE[n];if(s==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(s)}return new Uint8Array(e)}var ME=Wo({prefix:"\u{1F680}",name:"base256emoji",encode:OE,decode:BE});var L0={};yt(L0,{base64:()=>hn,base64pad:()=>ga,base64url:()=>ya,base64urlpad:()=>UE});var hn=Ve({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),ga=Ve({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),ya=Ve({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),UE=Ve({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var k0={};yt(k0,{base8:()=>FE});var FE=Ve({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var D0={};yt(D0,{identity:()=>$E});var $E=Wo({prefix:"\0",name:"identity",encode:r=>I4(r),decode:r=>T4(r)});var uP=new TextEncoder,dP=new TextDecoder;var Wl=85;var B0={};yt(B0,{sha256:()=>at,sha512:()=>HE});var VE=20;function wa({name:r,code:e,encode:t,minDigestLength:n,maxDigestLength:s}){return new O0(r,e,t,n,s)}var O0=class{name;code;encode;minDigestLength;maxDigestLength;constructor(e,t,n,s,o){this.name=e,this.code=t,this.encode=n,this.minDigestLength=s??VE,this.maxDigestLength=o}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?W4(n,this.code,t?.truncate):n.then(s=>W4(s,this.code,t?.truncate))}else throw Error("Unknown type, must be binary type")}};function W4(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 Ct(e,r)}function Y4(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var at=wa({name:"sha2-256",code:18,encode:Y4("SHA-256")}),HE=wa({name:"sha2-512",code:19,encode:Y4("SHA-512")});var Hs={...D0,...R0,...k0,...C0,..._0,...x0,...v0,...E0,...L0,...P0},SP={...B0,...I0};function X4(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var Q4=X4("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),M0=X4("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=de(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),qE={utf8:Q4,"utf-8":Q4,hex:Hs.base16,latin1:M0,ascii:M0,binary:M0,...Hs},jl=qE;function C(r,e="utf8"){let t=jl[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function k(r,e="utf8"){let t=jl[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var zE=parseInt("11111",2),U0=parseInt("10000000",2),GE=parseInt("01111111",2),Z4={0:ba,1:ba,2:WE,3:QE,4:XE,5:YE,6:jE,16:ba,22:ba,48:ba};function ar(r,e={offset:0}){let t=r[e.offset]&zE;if(e.offset++,Z4[t]!=null)return Z4[t](r,e);throw new Error("No decoder for tag "+t)}function Ea(r,e){let t=0;if((r[e.offset]&U0)===U0){let n=r[e.offset]&GE,s="0x";e.offset++;for(let o=0;o<n;o++,e.offset++)s+=r[e.offset].toString(16).padStart(2,"0");t=parseInt(s,16)}else t=r[e.offset],e.offset++;return t}function ba(r,e){Ea(r,e);let t=[];for(;!(e.offset>=r.byteLength);){let n=ar(r,e);if(n===null)break;t.push(n)}return t}function WE(r,e){let t=Ea(r,e),n=e.offset,s=e.offset+t,o=[];for(let i=n;i<s;i++)i===n&&r[i]===0||o.push(r[i]);return e.offset+=t,Uint8Array.from(o)}function jE(r,e){let t=Ea(r,e),n=e.offset+t,s=r[e.offset];e.offset++;let o=0,i=0;s<40?(o=0,i=s):s<80?(o=1,i=s-40):(o=2,i=s-80);let a=`${o}.${i}`,c=[];for(;e.offset<n;){let l=r[e.offset];if(e.offset++,c.push(l&127),l<128){c.reverse();let u=0;for(let d=0;d<c.length;d++)u+=c[d]<<d*7;a+=`.${u}`,c=[]}}return a}function YE(r,e){return e.offset++,null}function QE(r,e){let t=Ea(r,e),n=r[e.offset];e.offset++;let s=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 s}function XE(r,e){let t=Ea(r,e),n=r.subarray(e.offset,e.offset+t);return e.offset+=t,n}function ZE(r){let e=r.toString(16);e.length%2===1&&(e="0"+e);let t=new W;for(let n=0;n<e.length;n+=2)t.append(Uint8Array.from([parseInt(`${e[n]}${e[n+1]}`,16)]));return t}function Yl(r){if(r.byteLength<128)return Uint8Array.from([r.byteLength]);let e=ZE(r.byteLength);return new W(Uint8Array.from([e.byteLength|U0]),e)}function _t(r){let e=new W,t=128;return(r.subarray()[0]&t)===t&&e.append(Uint8Array.from([0])),e.append(r),new W(Uint8Array.from([2]),Yl(e),e)}function xa(r){let e=Uint8Array.from([0]),t=new W(e,r);return new W(Uint8Array.from([3]),Yl(t),t)}function J4(r){return new W(Uint8Array.from([4]),Yl(r),r)}function wr(r,e=48){let t=new W;for(let n of r)t.append(n);return new W(Uint8Array.from([e]),Yl(t),t)}var JE=Uint8Array.from([6,8,42,134,72,206,61,3,1,7]),ex=Uint8Array.from([6,5,43,129,4,0,34]),tx=Uint8Array.from([6,5,43,129,4,0,35]),e6={ext:!0,kty:"EC",crv:"P-256"},t6={ext:!0,kty:"EC",crv:"P-384"},r6={ext:!0,kty:"EC",crv:"P-521"},Xo=32,Zo=48,Jo=66;function n6(r){let e=ar(r);return F0(e)}function F0(r){let e=r[1],t=k(e,"base64url"),n=r[2][1][0],s=1,o,i;if(e.byteLength===Xo)return o=k(n.subarray(s,s+Xo),"base64url"),i=k(n.subarray(s+Xo),"base64url"),new zs({...e6,key_ops:["sign"],d:t,x:o,y:i});if(e.byteLength===Zo)return o=k(n.subarray(s,s+Zo),"base64url"),i=k(n.subarray(s+Zo),"base64url"),new zs({...t6,key_ops:["sign"],d:t,x:o,y:i});if(e.byteLength===Jo)return o=k(n.subarray(s,s+Jo),"base64url"),i=k(n.subarray(s+Jo),"base64url"),new zs({...r6,key_ops:["sign"],d:t,x:o,y:i});throw new E(`Private key length was wrong length, got ${e.byteLength}, expected 32, 48 or 66`)}function $0(r){let e=ar(r);return s6(e)}function s6(r){let e=r[1][1][0],t=1,n,s;if(e.byteLength===Xo*2+1)return n=k(e.subarray(t,t+Xo),"base64url"),s=k(e.subarray(t+Xo),"base64url"),new qs({...e6,key_ops:["verify"],x:n,y:s});if(e.byteLength===Zo*2+1)return n=k(e.subarray(t,t+Zo),"base64url"),s=k(e.subarray(t+Zo),"base64url"),new qs({...t6,key_ops:["verify"],x:n,y:s});if(e.byteLength===Jo*2+1)return n=k(e.subarray(t,t+Jo),"base64url"),s=k(e.subarray(t+Jo),"base64url"),new qs({...r6,key_ops:["verify"],x:n,y:s});throw new E(`coordinates were wrong length, got ${e.byteLength}, expected 65, 97 or 133`)}function o6(r){return wr([_t(Uint8Array.from([1])),J4(C(r.d??"","base64url")),wr([a6(r.crv)],160),wr([xa(new W(Uint8Array.from([4]),C(r.x??"","base64url"),C(r.y??"","base64url")))],161)]).subarray()}function i6(r){return wr([_t(Uint8Array.from([1])),wr([a6(r.crv)],160),wr([xa(new W(Uint8Array.from([4]),C(r.x??"","base64url"),C(r.y??"","base64url")))],161)]).subarray()}function a6(r){if(r==="P-256")return JE;if(r==="P-384")return ex;if(r==="P-521")return tx;throw new E(`Invalid curve ${r}`)}async function c6(r="P-256"){let e=await K4(r);return new zs(e.privateKey)}var qs=class{type="ECDSA";jwk;_raw;constructor(e){this.jwk=e}get raw(){return this._raw==null&&(this._raw=i6(this.jwk)),this._raw}toMultihash(){return Yt.digest(tt(this))}toCID(){return ie.createV1(114,this.toMultihash())}toString(){return ve.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:Y(this.raw,e.raw)}async verify(e,t,n){return H4(this.jwk,t,e,n)}},zs=class{type="ECDSA";jwk;publicKey;_raw;constructor(e){this.jwk=e,this.publicKey=new qs({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=o6(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:Y(this.raw,e.raw)}async sign(e,t){return V4(this.jwk,e,t)}};function K0(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in r&&r.BYTES_PER_ELEMENT===1}function Bt(r,e=""){if(typeof r!="number"){let t=e&&`"${e}" `;throw new TypeError(`${t}expected number, got ${typeof r}`)}if(!Number.isSafeInteger(r)||r<0){let t=e&&`"${e}" `;throw new RangeError(`${t}expected integer >= 0, got ${r}`)}}function ct(r,e,t=""){let n=K0(r),s=r?.length,o=e!==void 0;if(!n||o&&s!==e){let i=t&&`"${t}" `,a=o?` of length ${e}`:"",c=n?`length=${s}`:`type=${typeof r}`,l=i+"expected Uint8Array"+a+", got "+c;throw n?new RangeError(l):new TypeError(l)}return r}function mn(r){if(typeof r!="function"||typeof r.create!="function")throw new TypeError("Hash must wrapped by utils.createHasher");if(Bt(r.outputLen),Bt(r.blockLen),r.outputLen<1)throw new Error('"outputLen" must be >= 1');if(r.blockLen<1)throw new Error('"blockLen" must be >= 1')}function ei(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 Ql(r,e){ct(r,void 0,"digestInto() output");let t=e.outputLen;if(r.length<t)throw new RangeError('"digestInto() output" expected to be of length >='+t)}function wt(...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 br(r,e){return r<<32-e|r>>>e}function Xl(r,e){return r<<e|r>>>32-e>>>0}var u6=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",rx=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Zl(r){if(ct(r),u6)return r.toHex();let e="";for(let t=0;t<r.length;t++)e+=rx[r[t]];return e}var pn={_0:48,_9:57,A:65,F:70,a:97,f:102};function l6(r){if(r>=pn._0&&r<=pn._9)return r-pn._0;if(r>=pn.A&&r<=pn.F)return r-(pn.A-10);if(r>=pn.a&&r<=pn.f)return r-(pn.a-10)}function va(r){if(typeof r!="string")throw new TypeError("hex string expected, got "+typeof r);if(u6)try{return Uint8Array.fromHex(r)}catch(s){throw s instanceof SyntaxError?new RangeError(s.message):s}let e=r.length,t=e/2;if(e%2)throw new RangeError("hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let s=0,o=0;s<t;s++,o+=2){let i=l6(r.charCodeAt(o)),a=l6(r.charCodeAt(o+1));if(i===void 0||a===void 0){let c=r[o]+r[o+1];throw new RangeError('hex string expected, got non-hex character "'+c+'" at index '+o)}n[s]=i*16+a}return n}var nx=async()=>{};async function d6(r,e,t){let n=Date.now();for(let s=0;s<r;s++){t(s);let o=Date.now()-n;o>=0&&o<e||(await nx(),n+=o)}}function sx(r){if(typeof r!="string")throw new TypeError("string expected");return new Uint8Array(new TextEncoder().encode(r))}function V0(r,e=""){return typeof r=="string"?sx(r):ct(r,void 0,e)}function H0(...r){let e=0;for(let n=0;n<r.length;n++){let s=r[n];ct(s),e+=s.length}let t=new Uint8Array(e);for(let n=0,s=0;n<r.length;n++){let o=r[n];t.set(o,s),s+=o.length}return t}function f6(r,e){if(e!==void 0&&{}.toString.call(e)!=="[object Object]")throw new TypeError("options must be object or undefined");return Object.assign(r,e)}function Sa(r,e={}){let t=(s,o)=>r(o).update(s).digest(),n=r(void 0);return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.canXOF=n.canXOF,t.create=s=>r(s),Object.assign(t,e),Object.freeze(t)}function h6(r=32){Bt(r,"bytesLength");let e=typeof globalThis=="object"?globalThis.crypto:null;if(typeof e?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");if(r>65536)throw new RangeError(`"bytesLength" expected <= 65536, got ${r}`);return e.getRandomValues(new Uint8Array(r))}var q0=r=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,r])});function Jl(r,e,t){return r&e^~r&t}function eu(r,e,t){return r&e^r&t^e&t}var Ws=class{blockLen;outputLen;canXOF=!1;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(e,t,n,s){this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=s,this.buffer=new Uint8Array(e),this.view=Gs(this.buffer)}update(e){ei(this),ct(e);let{view:t,buffer:n,blockLen:s}=this,o=e.length;for(let i=0;i<o;){let a=Math.min(s-this.pos,o-i);if(a===s){let c=Gs(e);for(;s<=o-i;i+=s)this.process(c,i);continue}n.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===s&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ei(this),Ql(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:s,isLE:o}=this,{pos:i}=this;t[i++]=128,wt(this.buffer.subarray(i)),this.padOffset>s-i&&(this.process(n,0),i=0);for(let d=i;d<s;d++)t[d]=0;n.setBigUint64(s-8,BigInt(this.length*8),o),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,u=this.get();if(l>u.length)throw new Error("_sha2: outputLen bigger than state");for(let d=0;d<l;d++)a.setUint32(4*d,u[d],o)}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:s,finished:o,destroyed:i,pos:a}=this;return e.destroyed=i,e.finished=o,e.length=s,e.pos=a,s%t&&e.buffer.set(n),e}clone(){return this._cloneInto()}},gn=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var lt=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var tu=BigInt(4294967295),p6=BigInt(32);function ox(r,e=!1){return e?{h:Number(r&tu),l:Number(r>>p6&tu)}:{h:Number(r>>p6&tu)|0,l:Number(r&tu)|0}}function m6(r,e=!1){let t=r.length,n=new Uint32Array(t),s=new Uint32Array(t);for(let o=0;o<t;o++){let{h:i,l:a}=ox(r[o],e);[n[o],s[o]]=[i,a]}return[n,s]}var z0=(r,e,t)=>r>>>t,G0=(r,e,t)=>r<<32-t|e>>>t,js=(r,e,t)=>r>>>t|e<<32-t,Ys=(r,e,t)=>r<<32-t|e>>>t,Aa=(r,e,t)=>r<<64-t|e>>>t-32,Ta=(r,e,t)=>r>>>t-32|e<<64-t;function Hr(r,e,t,n){let s=(e>>>0)+(n>>>0);return{h:r+t+(s/2**32|0)|0,l:s|0}}var g6=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),y6=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,w6=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),b6=(r,e,t,n,s)=>e+t+n+s+(r/2**32|0)|0,E6=(r,e,t,n,s)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(s>>>0),x6=(r,e,t,n,s,o)=>e+t+n+s+o+(r/2**32|0)|0;var ax=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]),Gn=new Uint32Array(64),W0=class extends Ws{constructor(e){super(64,e,8,!1)}get(){let{A:e,B:t,C:n,D:s,E:o,F:i,G:a,H:c}=this;return[e,t,n,s,o,i,a,c]}set(e,t,n,s,o,i,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=s|0,this.E=o|0,this.F=i|0,this.G=a|0,this.H=c|0}process(e,t){for(let d=0;d<16;d++,t+=4)Gn[d]=e.getUint32(t,!1);for(let d=16;d<64;d++){let f=Gn[d-15],h=Gn[d-2],p=br(f,7)^br(f,18)^f>>>3,y=br(h,17)^br(h,19)^h>>>10;Gn[d]=y+Gn[d-7]+p+Gn[d-16]|0}let{A:n,B:s,C:o,D:i,E:a,F:c,G:l,H:u}=this;for(let d=0;d<64;d++){let f=br(a,6)^br(a,11)^br(a,25),h=u+f+Jl(a,c,l)+ax[d]+Gn[d]|0,y=(br(n,2)^br(n,13)^br(n,22))+eu(n,s,o)|0;u=l,l=c,c=a,a=i+h|0,i=o,o=s,s=n,n=h+y|0}n=n+this.A|0,s=s+this.B|0,o=o+this.C|0,i=i+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,u=u+this.H|0,this.set(n,s,o,i,a,c,l,u)}roundClean(){wt(Gn)}destroy(){this.destroyed=!0,this.set(0,0,0,0,0,0,0,0),wt(this.buffer)}},j0=class extends W0{A=gn[0]|0;B=gn[1]|0;C=gn[2]|0;D=gn[3]|0;E=gn[4]|0;F=gn[5]|0;G=gn[6]|0;H=gn[7]|0;constructor(){super(32)}};var v6=m6(["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))),cx=v6[0],lx=v6[1],Wn=new Uint32Array(80),jn=new Uint32Array(80),Y0=class extends Ws{constructor(e){super(128,e,16,!1)}get(){let{Ah:e,Al:t,Bh:n,Bl:s,Ch:o,Cl:i,Dh:a,Dl:c,Eh:l,El:u,Fh:d,Fl:f,Gh:h,Gl:p,Hh:y,Hl:m}=this;return[e,t,n,s,o,i,a,c,l,u,d,f,h,p,y,m]}set(e,t,n,s,o,i,a,c,l,u,d,f,h,p,y,m){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=s|0,this.Ch=o|0,this.Cl=i|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=u|0,this.Fh=d|0,this.Fl=f|0,this.Gh=h|0,this.Gl=p|0,this.Hh=y|0,this.Hl=m|0}process(e,t){for(let v=0;v<16;v++,t+=4)Wn[v]=e.getUint32(t),jn[v]=e.getUint32(t+=4);for(let v=16;v<80;v++){let _=Wn[v-15]|0,P=jn[v-15]|0,D=js(_,P,1)^js(_,P,8)^z0(_,P,7),B=Ys(_,P,1)^Ys(_,P,8)^G0(_,P,7),N=Wn[v-2]|0,U=jn[v-2]|0,G=js(N,U,19)^Aa(N,U,61)^z0(N,U,6),V=Ys(N,U,19)^Ta(N,U,61)^G0(N,U,6),b=w6(B,V,jn[v-7],jn[v-16]),I=b6(b,D,G,Wn[v-7],Wn[v-16]);Wn[v]=I|0,jn[v]=b|0}let{Ah:n,Al:s,Bh:o,Bl:i,Ch:a,Cl:c,Dh:l,Dl:u,Eh:d,El:f,Fh:h,Fl:p,Gh:y,Gl:m,Hh:g,Hl:w}=this;for(let v=0;v<80;v++){let _=js(d,f,14)^js(d,f,18)^Aa(d,f,41),P=Ys(d,f,14)^Ys(d,f,18)^Ta(d,f,41),D=d&h^~d&y,B=f&p^~f&m,N=E6(w,P,B,lx[v],jn[v]),U=x6(N,g,_,D,cx[v],Wn[v]),G=N|0,V=js(n,s,28)^Aa(n,s,34)^Aa(n,s,39),b=Ys(n,s,28)^Ta(n,s,34)^Ta(n,s,39),I=n&o^n&a^o&a,T=s&i^s&c^i&c;g=y|0,w=m|0,y=h|0,m=p|0,h=d|0,p=f|0,{h:d,l:f}=Hr(l|0,u|0,U|0,G|0),l=a|0,u=c|0,a=o|0,c=i|0,o=n|0,i=s|0;let S=g6(G,b,T);n=y6(S,U,V,I),s=S|0}({h:n,l:s}=Hr(this.Ah|0,this.Al|0,n|0,s|0)),{h:o,l:i}=Hr(this.Bh|0,this.Bl|0,o|0,i|0),{h:a,l:c}=Hr(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:u}=Hr(this.Dh|0,this.Dl|0,l|0,u|0),{h:d,l:f}=Hr(this.Eh|0,this.El|0,d|0,f|0),{h,l:p}=Hr(this.Fh|0,this.Fl|0,h|0,p|0),{h:y,l:m}=Hr(this.Gh|0,this.Gl|0,y|0,m|0),{h:g,l:w}=Hr(this.Hh|0,this.Hl|0,g|0,w|0),this.set(n,s,o,i,a,c,l,u,d,f,h,p,y,m,g,w)}roundClean(){wt(Wn,jn)}destroy(){this.destroyed=!0,wt(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}},Q0=class extends Y0{Ah=lt[0]|0;Al=lt[1]|0;Bh=lt[2]|0;Bl=lt[3]|0;Ch=lt[4]|0;Cl=lt[5]|0;Dh=lt[6]|0;Dl=lt[7]|0;Eh=lt[8]|0;El=lt[9]|0;Fh=lt[10]|0;Fl=lt[11]|0;Gh=lt[12]|0;Gl=lt[13]|0;Hh=lt[14]|0;Hl=lt[15]|0;constructor(){super(64)}};var cr=Sa(()=>new j0,q0(1));var qr=Sa(()=>new Q0,q0(3));var ce=(r,e,t)=>ct(r,e,t),Z0=Bt,ti=Zl,Ye=(...r)=>H0(...r),ri=r=>va(r),Qs=K0,Xs=r=>h6(r),nu=BigInt(0),X0=BigInt(1);function Er(r,e=""){if(typeof r!="boolean"){let t=e&&`"${e}" `;throw new TypeError(t+"expected boolean, got type="+typeof r)}return r}function su(r){if(typeof r=="bigint"){if(!ru(r))throw new RangeError("positive bigint expected, got "+r)}else Z0(r);return r}function xr(r,e=""){if(typeof r!="number"){let t=e&&`"${e}" `;throw new TypeError(t+"expected number, got type="+typeof r)}if(!Number.isSafeInteger(r)){let t=e&&`"${e}" `;throw new RangeError(t+"expected safe integer, got "+r)}}function Ia(r){let e=su(r).toString(16);return e.length&1?"0"+e:e}function S6(r){if(typeof r!="string")throw new TypeError("hex string expected, got "+typeof r);return r===""?nu:BigInt("0x"+r)}function Zs(r){return S6(Zl(r))}function Qt(r){return S6(Zl(Yn(ct(r)).reverse()))}function ou(r,e){if(Bt(e),e===0)throw new RangeError("zero length");r=su(r);let t=r.toString(16);if(t.length>e*2)throw new RangeError("number too large");return va(t.padStart(e*2,"0"))}function Ca(r,e){return ou(r,e).reverse()}function A6(r,e){if(r=ce(r),e=ce(e),r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}function Yn(r){return Uint8Array.from(ce(r))}function iu(r){if(typeof r!="string")throw new TypeError("ascii string expected, got "+typeof r);return Uint8Array.from(r,(e,t)=>{let n=e.charCodeAt(0);if(e.length!==1||n>127)throw new RangeError(`string contains non-ASCII character "${r[t]}" with code ${n} at position ${t}`);return n})}var ru=r=>typeof r=="bigint"&&nu<=r;function ux(r,e,t){return ru(r)&&ru(e)&&ru(t)&&e<=r&&r<t}function yn(r,e,t,n){if(!ux(e,t,n))throw new RangeError("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function ni(r){if(r<nu)throw new Error("expected non-negative bigint, got "+r);let e;for(e=0;r>nu;r>>=X0,e+=1);return e}var _a=r=>(X0<<BigInt(r))-X0;function T6(r,e,t){if(Bt(r,"hashLen"),Bt(e,"qByteLen"),typeof t!="function")throw new TypeError("hmacFn must be a function");let n=m=>new Uint8Array(m),s=Uint8Array.of(),o=Uint8Array.of(0),i=Uint8Array.of(1),a=1e3,c=n(r),l=n(r),u=0,d=()=>{c.fill(1),l.fill(0),u=0},f=(...m)=>t(l,Ye(c,...m)),h=(m=s)=>{l=f(o,m),c=f(),m.length!==0&&(l=f(i,m),c=f())},p=()=>{if(u++>=a)throw new Error("drbg: tried max amount of iterations");let m=0,g=[];for(;m<e;){c=f();let w=c.slice();g.push(w),m+=c.length}return Ye(...g)};return(m,g)=>{d(),h(m);let w;for(;(w=g(p()))===void 0;)h();return d(),w}}function Xt(r,e={},t={}){if(Object.prototype.toString.call(r)!=="[object Object]")throw new TypeError("expected valid options object");function n(o,i,a){if(!a&&i!=="function"&&!Object.hasOwn(r,o))throw new TypeError(`param "${o}" is invalid: expected own property`);let c=r[o];if(a&&c===void 0)return;let l=typeof c;if(l!==i||c===null)throw new TypeError(`param "${o}" is invalid: expected ${i}, got ${l}`)}let s=(o,i)=>Object.entries(o).forEach(([a,c])=>n(a,c,i));s(e,!1),s(t,!0)}var J0=()=>{throw new Error("not implemented")};var ut=BigInt(0),He=BigInt(1),Js=BigInt(2),R6=BigInt(3),P6=BigInt(4),L6=BigInt(5),dx=BigInt(7),k6=BigInt(8),fx=BigInt(9),D6=BigInt(16);function $e(r,e){if(e<=ut)throw new Error("mod: expected positive modulus, got "+e);let t=r%e;return t>=ut?t:e+t}function Oe(r,e,t){if(e<ut)throw new Error("pow2: expected non-negative exponent, got "+e);let n=r;for(;e-- >ut;)n*=n,n%=t;return n}function I6(r,e){if(r===ut)throw new Error("invert: expected non-zero number");if(e<=ut)throw new Error("invert: expected positive modulus, got "+e);let t=$e(r,e),n=e,s=ut,o=He,i=He,a=ut;for(;t!==ut;){let l=n/t,u=n-t*l,d=s-i*l,f=o-a*l;n=t,t=u,s=i,o=a,i=d,a=f}if(n!==He)throw new Error("invert: does not exist");return $e(s,e)}function e2(r,e,t){let n=r;if(!n.eql(n.sqr(e),t))throw new Error("Cannot find square root")}function N6(r,e){let t=r,n=(t.ORDER+He)/P6,s=t.pow(e,n);return e2(t,s,e),s}function hx(r,e){let t=r,n=(t.ORDER-L6)/k6,s=t.mul(e,Js),o=t.pow(s,n),i=t.mul(e,o),a=t.mul(t.mul(i,Js),o),c=t.mul(i,t.sub(a,t.ONE));return e2(t,c,e),c}function px(r){let e=si(r),t=O6(r),n=t(e,e.neg(e.ONE)),s=t(e,n),o=t(e,e.neg(n)),i=(r+dx)/D6;return((a,c)=>{let l=a,u=l.pow(c,i),d=l.mul(u,n),f=l.mul(u,s),h=l.mul(u,o),p=l.eql(l.sqr(d),c),y=l.eql(l.sqr(f),c);u=l.cmov(u,d,p),d=l.cmov(h,f,y);let m=l.eql(l.sqr(d),c),g=l.cmov(u,d,m);return e2(l,g,c),g})}function O6(r){if(r<R6)throw new Error("sqrt is not defined for small field");let e=r-He,t=0;for(;e%Js===ut;)e/=Js,t++;let n=Js,s=si(r);for(;C6(s,n)===1;)if(n++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(t===1)return N6;let o=s.pow(n,e),i=(e+He)/Js;return function(c,l){let u=c;if(u.is0(l))return l;if(C6(u,l)!==1)throw new Error("Cannot find square root");let d=t,f=u.mul(u.ONE,o),h=u.pow(l,e),p=u.pow(l,i);for(;!u.eql(h,u.ONE);){if(u.is0(h))return u.ZERO;let y=1,m=u.sqr(h);for(;!u.eql(m,u.ONE);)if(y++,m=u.sqr(m),y===d)throw new Error("Cannot find square root");let g=He<<BigInt(d-y-1),w=u.pow(f,g);d=y,f=u.sqr(w),h=u.mul(h,f),p=u.mul(p,w)}return p}}function mx(r){return r%P6===R6?N6:r%k6===L6?hx:r%D6===fx?px(r):O6(r)}var wn=(r,e)=>($e(r,e)&He)===He,gx=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function t2(r){let e={ORDER:"bigint",BYTES:"number",BITS:"number"},t=gx.reduce((n,s)=>(n[s]="function",n),e);if(Xt(r,t),xr(r.BYTES,"BYTES"),xr(r.BITS,"BITS"),r.BYTES<1||r.BITS<1)throw new Error("invalid field: expected BYTES/BITS > 0");if(r.ORDER<=He)throw new Error("invalid field: expected ORDER > 1, got "+r.ORDER);return r}function yx(r,e,t){let n=r;if(t<ut)throw new Error("invalid exponent, negatives unsupported");if(t===ut)return n.ONE;if(t===He)return e;let s=n.ONE,o=e;for(;t>ut;)t&He&&(s=n.mul(s,o)),o=n.sqr(o),t>>=He;return s}function Ra(r,e,t=!1){let n=r,s=new Array(e.length).fill(t?n.ZERO:void 0),o=e.reduce((a,c,l)=>n.is0(c)?a:(s[l]=a,n.mul(a,c)),n.ONE),i=n.inv(o);return e.reduceRight((a,c,l)=>n.is0(c)?a:(s[l]=n.mul(a,s[l]),n.mul(a,c)),i),s}function C6(r,e){let t=r,n=(t.ORDER-He)/Js,s=t.pow(e,n),o=t.eql(s,t.ONE),i=t.eql(s,t.ZERO),a=t.eql(s,t.neg(t.ONE));if(!o&&!i&&!a)throw new Error("invalid Legendre symbol result");return o?1:i?0:-1}function wx(r,e){if(e!==void 0&&Z0(e),r<=ut)throw new Error("invalid n length: expected positive n, got "+r);if(e!==void 0&&e<1)throw new Error("invalid n length: expected positive bit length, got "+e);let t=ni(r);if(e!==void 0&&e<t)throw new Error(`invalid n length: expected bit length (${t}) >= n.length (${e})`);let n=e!==void 0?e:t,s=Math.ceil(n/8);return{nBitLength:n,nByteLength:s}}var _6=new WeakMap,au=class{ORDER;BITS;BYTES;isLE;ZERO=ut;ONE=He;_lengths;_mod;constructor(e,t={}){if(e<=He)throw new Error("invalid field: expected ORDER > 1, got "+e);let n;this.isLE=!1,t!=null&&typeof t=="object"&&(typeof t.BITS=="number"&&(n=t.BITS),typeof t.sqrt=="function"&&Object.defineProperty(this,"sqrt",{value:t.sqrt,enumerable:!0}),typeof t.isLE=="boolean"&&(this.isLE=t.isLE),t.allowedLengths&&(this._lengths=Object.freeze(t.allowedLengths.slice())),typeof t.modFromBytes=="boolean"&&(this._mod=t.modFromBytes));let{nBitLength:s,nByteLength:o}=wx(e,n);if(o>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");this.ORDER=e,this.BITS=s,this.BYTES=o,Object.freeze(this)}create(e){return $e(e,this.ORDER)}isValid(e){if(typeof e!="bigint")throw new TypeError("invalid field element: expected bigint, got "+typeof e);return ut<=e&&e<this.ORDER}is0(e){return e===ut}isValidNot0(e){return!this.is0(e)&&this.isValid(e)}isOdd(e){return(e&He)===He}neg(e){return $e(-e,this.ORDER)}eql(e,t){return e===t}sqr(e){return $e(e*e,this.ORDER)}add(e,t){return $e(e+t,this.ORDER)}sub(e,t){return $e(e-t,this.ORDER)}mul(e,t){return $e(e*t,this.ORDER)}pow(e,t){return yx(this,e,t)}div(e,t){return $e(e*I6(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 I6(e,this.ORDER)}sqrt(e){let t=_6.get(this);return t||_6.set(this,t=mx(this.ORDER)),t(this,e)}toBytes(e){return this.isLE?Ca(e,this.BYTES):ou(e,this.BYTES)}fromBytes(e,t=!1){ce(e);let{_lengths:n,BYTES:s,isLE:o,ORDER:i,_mod:a}=this;if(n){if(e.length<1||!n.includes(e.length)||e.length>s)throw new Error("Field.fromBytes: expected "+n+" bytes, got "+e.length);let l=new Uint8Array(s);l.set(e,o?0:l.length-e.length),e=l}if(e.length!==s)throw new Error("Field.fromBytes: expected "+s+" bytes, got "+e.length);let c=o?Qt(e):Zs(e);if(a&&(c=$e(c,i)),!t&&!this.isValid(c))throw new Error("invalid field element: outside of range 0..ORDER");return c}invertBatch(e){return Ra(this,e)}cmov(e,t,n){return Er(n,"condition"),n?t:e}};Object.freeze(au.prototype);function si(r,e={}){return new au(r,e)}function B6(r){if(typeof r!="bigint")throw new Error("field order must be bigint");if(r<=He)throw new Error("field order must be greater than 1");let e=ni(r-He);return Math.ceil(e/8)}function r2(r){let e=B6(r);return e+Math.ceil(e/2)}function n2(r,e,t=!1){ce(r);let n=r.length,s=B6(e),o=Math.max(r2(e),16);if(n<o||n>1024)throw new Error("expected "+o+"-1024 bytes of input, got "+n);let i=t?Qt(r):Zs(r),a=$e(i,e-He)+He;return t?Ca(a,s):ou(a,s)}var oi=BigInt(0),eo=BigInt(1);function Pa(r,e){let t=e.negate();return r?t:e}function to(r,e){let t=Ra(r.Fp,e.map(n=>n.Z));return e.map((n,s)=>r.fromAffine(n.toAffine(t[s])))}function $6(r,e){if(!Number.isSafeInteger(r)||r<=0||r>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+r)}function s2(r,e){$6(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1),s=2**r,o=_a(r),i=BigInt(r);return{windows:t,windowSize:n,mask:o,maxNumber:s,shiftBy:i}}function M6(r,e,t){let{windowSize:n,mask:s,maxNumber:o,shiftBy:i}=t,a=Number(r&s),c=r>>i;a>n&&(a-=o,c+=eo);let l=e*n,u=l+Math.abs(a)-1,d=a===0,f=a<0,h=e%2!==0;return{nextN:c,offset:u,isZero:d,isNeg:f,isNegF:h,offsetF:l}}var o2=new WeakMap,K6=new WeakMap;function i2(r){return K6.get(r)||1}function U6(r){if(r!==oi)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 s=e;for(;t>oi;)t&eo&&(n=n.add(s)),s=s.double(),t>>=eo;return n}precomputeWindow(e,t){let{windows:n,windowSize:s}=s2(t,this.bits),o=[],i=e,a=i;for(let c=0;c<n;c++){a=i,o.push(a);for(let l=1;l<s;l++)a=a.add(i),o.push(a);i=a.double()}return o}wNAF(e,t,n){if(!this.Fn.isValid(n))throw new Error("invalid scalar");let s=this.ZERO,o=this.BASE,i=s2(e,this.bits);for(let a=0;a<i.windows;a++){let{nextN:c,offset:l,isZero:u,isNeg:d,isNegF:f,offsetF:h}=M6(n,a,i);n=c,u?o=o.add(Pa(f,t[h])):s=s.add(Pa(d,t[l]))}return U6(n),{p:s,f:o}}wNAFUnsafe(e,t,n,s=this.ZERO){let o=s2(e,this.bits);for(let i=0;i<o.windows&&n!==oi;i++){let{nextN:a,offset:c,isZero:l,isNeg:u}=M6(n,i,o);if(n=a,!l){let d=t[c];s=s.add(u?d.negate():d)}}return U6(n),s}getPrecomputes(e,t,n){let s=o2.get(t);return s||(s=this.precomputeWindow(t,e),e!==1&&(typeof n=="function"&&(s=n(s)),o2.set(t,s))),s}cached(e,t,n){let s=i2(e);return this.wNAF(s,this.getPrecomputes(s,e,n),t)}unsafe(e,t,n,s){let o=i2(e);return o===1?this._unsafeLadder(e,t,s):this.wNAFUnsafe(o,this.getPrecomputes(o,e,n),t,s)}createCache(e,t){$6(t,this.bits),K6.set(e,t),o2.delete(e)}hasCache(e){return i2(e)!==1}};function V6(r,e,t,n){let s=e,o=r.ZERO,i=r.ZERO;for(;t>oi||n>oi;)t&eo&&(o=o.add(s)),n&eo&&(i=i.add(s)),s=s.double(),t>>=eo,n>>=eo;return{p1:o,p2:i}}function F6(r,e,t){if(e){if(e.ORDER!==r)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return t2(e),e}else return si(r,{isLE:t})}function cu(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>oi))throw new Error(`CURVE.${c} must be positive bigint`)}let s=F6(e.p,t.Fp,n),o=F6(e.n,t.Fn,n),a=["Gx","Gy","a",r==="weierstrass"?"b":"d"];for(let c of a)if(!s.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:s,Fn:o}}function ai(r,e){return function(n){let s=r(n);return{secretKey:s,publicKey:e(s)}}}var Qn=BigInt(0),rt=BigInt(1),a2=BigInt(2),bx=BigInt(8);function Ex(r,e,t,n){let s=r.sqr(t),o=r.sqr(n),i=r.add(r.mul(e.a,s),o),a=r.add(r.ONE,r.mul(e.d,r.mul(s,o)));return r.eql(i,a)}function H6(r,e={}){let t=e,n=cu("edwards",r,t,t.FpFnLE),{Fp:s,Fn:o}=n,i=n.CURVE,{h:a}=i;Xt(t,{},{uvRatio:"function"});let c=a2<<BigInt(o.BYTES*8)-rt,l=y=>s.create(y),u=t.uvRatio===void 0?(y,m)=>{try{return{isValid:!0,value:s.sqrt(s.div(y,m))}}catch{return{isValid:!1,value:Qn}}}:t.uvRatio;if(!Ex(s,i,i.Gx,i.Gy))throw new Error("bad curve params: generator point");function d(y,m,g=!1){let w=g?rt:Qn;return yn("coordinate "+y,m,w,c),m}function f(y){if(!(y instanceof h))throw new Error("EdwardsPoint expected")}class h{static BASE=new h(i.Gx,i.Gy,rt,l(i.Gx*i.Gy));static ZERO=new h(Qn,rt,rt,Qn);static Fp=s;static Fn=o;X;Y;Z;T;constructor(m,g,w,v){this.X=d("x",m),this.Y=d("y",g),this.Z=d("z",w,!0),this.T=d("t",v),Object.freeze(this)}static CURVE(){return i}static fromAffine(m){if(m instanceof h)throw new Error("extended point not allowed");let{x:g,y:w}=m||{};return d("x",g),d("y",w),new h(g,w,rt,l(g*w))}static fromBytes(m,g=!1){let w=s.BYTES,{a:v,d:_}=i;m=Yn(ce(m,w,"point")),Er(g,"zip215");let P=Yn(m),D=m[w-1];P[w-1]=D&-129;let B=Qt(P),N=g?c:s.ORDER;yn("point.y",B,Qn,N);let U=l(B*B),G=l(U-rt),V=l(_*U-v),{isValid:b,value:I}=u(G,V);if(!b)throw new Error("bad point: invalid y coordinate");let T=(I&rt)===rt,S=(D&128)!==0;if(!g&&I===Qn&&S)throw new Error("bad point: x=0 and x_0=1");return S!==T&&(I=l(-I)),h.fromAffine({x:I,y:B})}static fromHex(m,g=!1){return h.fromBytes(ri(m),g)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(m=8,g=!0){return p.createCache(this,m),g||this.multiply(a2),this}assertValidity(){let m=this,{a:g,d:w}=i;if(m.is0())throw new Error("bad point: ZERO");let{X:v,Y:_,Z:P,T:D}=m,B=l(v*v),N=l(_*_),U=l(P*P),G=l(U*U),V=l(B*g),b=l(U*l(V+N)),I=l(G+l(w*l(B*N)));if(b!==I)throw new Error("bad point: equation left != right (1)");let T=l(v*_),S=l(P*D);if(T!==S)throw new Error("bad point: equation left != right (2)")}equals(m){f(m);let{X:g,Y:w,Z:v}=this,{X:_,Y:P,Z:D}=m,B=l(g*D),N=l(_*v),U=l(w*D),G=l(P*v);return B===N&&U===G}is0(){return this.equals(h.ZERO)}negate(){return new h(l(-this.X),this.Y,this.Z,l(-this.T))}double(){let{a:m}=i,{X:g,Y:w,Z:v}=this,_=l(g*g),P=l(w*w),D=l(a2*l(v*v)),B=l(m*_),N=g+w,U=l(l(N*N)-_-P),G=B+P,V=G-D,b=B-P,I=l(U*V),T=l(G*b),S=l(U*b),x=l(V*G);return new h(I,T,x,S)}add(m){f(m);let{a:g,d:w}=i,{X:v,Y:_,Z:P,T:D}=this,{X:B,Y:N,Z:U,T:G}=m,V=l(v*B),b=l(_*N),I=l(D*w*G),T=l(P*U),S=l((v+_)*(B+N)-V-b),x=T-I,R=T+I,L=l(b-g*V),A=l(S*x),O=l(R*L),M=l(S*L),q=l(x*R);return new h(A,O,q,M)}subtract(m){return f(m),this.add(m.negate())}multiply(m){if(!o.isValidNot0(m))throw new RangeError("invalid scalar: expected 1 <= sc < curve.n");let{p:g,f:w}=p.cached(this,m,v=>to(h,v));return to(h,[g,w])[0]}multiplyUnsafe(m){if(!o.isValid(m))throw new RangeError("invalid scalar: expected 0 <= sc < curve.n");return m===Qn?h.ZERO:this.is0()||m===rt?this:p.unsafe(this,m,g=>to(h,g))}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){return p.unsafe(this,i.n).is0()}toAffine(m){let g=this,w=m,{X:v,Y:_,Z:P}=g,D=g.is0();w==null&&(w=D?bx:s.inv(P));let B=l(v*w),N=l(_*w),U=s.mul(P,w);if(D)return{x:Qn,y:rt};if(U!==rt)throw new Error("invZ was invalid");return{x:B,y:N}}clearCofactor(){return a===rt?this:this.multiplyUnsafe(a)}toBytes(){let{x:m,y:g}=this.toAffine(),w=s.toBytes(g);return w[w.length-1]|=m&rt?128:0,w}toHex(){return ti(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let p=new ii(h,o.BITS);return o.BITS>=8&&h.BASE.precompute(8),Object.freeze(h.prototype),Object.freeze(h),h}var lu=class{static BASE;static ZERO;static Fp;static Fn;ep;constructor(e){this.ep=e}static fromBytes(e){J0()}static fromHex(e){J0()}get x(){return this.toAffine().x}get y(){return this.toAffine().y}clearCofactor(){return this}assertValidity(){this.ep.assertValidity()}toAffine(e){return this.ep.toAffine(e)}toHex(){return ti(this.toBytes())}toString(){return this.toHex()}isTorsionFree(){return!0}isSmallOrder(){return!1}add(e){return this.assertSame(e),this.init(this.ep.add(e.ep))}subtract(e){return this.assertSame(e),this.init(this.ep.subtract(e.ep))}multiply(e){return this.init(this.ep.multiply(e))}multiplyUnsafe(e){return this.init(this.ep.multiplyUnsafe(e))}double(){return this.init(this.ep.double())}negate(){return this.init(this.ep.negate())}precompute(e,t){return this.ep.precompute(e,t),this}};function q6(r,e,t={}){if(typeof e!="function")throw new Error('"hash" function param is required');let n=e,s=t;Xt(s,{},{adjustScalarBytes:"function",randomBytes:"function",domain:"function",prehash:"function",zip215:"boolean",mapToCurve:"function"});let{prehash:o}=s,{BASE:i,Fp:a,Fn:c}=r,l=n.outputLen,u=2*a.BYTES;if(l!==void 0&&(xr(l,"hash.outputLen"),l!==u))throw new Error(`hash.outputLen must be ${u}, got ${l}`);let d=s.randomBytes===void 0?Xs:s.randomBytes,f=s.adjustScalarBytes===void 0?b=>b:s.adjustScalarBytes,h=s.domain===void 0?(b,I,T)=>{if(Er(T,"phflag"),I.length||T)throw new Error("Contexts/pre-hash are not supported");return b}:s.domain;function p(b){return c.create(Qt(b))}function y(b){let I=B.secretKey;ce(b,B.secretKey,"secretKey");let T=ce(n(b),2*I,"hashedSecretKey"),S=f(T.slice(0,I)),x=T.slice(I,2*I),R=p(S);return{head:S,prefix:x,scalar:R}}function m(b){let{head:I,prefix:T,scalar:S}=y(b),x=i.multiply(S),R=x.toBytes();return{head:I,prefix:T,scalar:S,point:x,pointBytes:R}}function g(b){return m(b).pointBytes}function w(b=Uint8Array.of(),...I){let T=Ye(...I);return p(n(h(T,ce(b,void 0,"context"),!!o)))}function v(b,I,T={}){b=ce(b,void 0,"message"),o&&(b=o(b));let{prefix:S,scalar:x,pointBytes:R}=m(I),L=w(T.context,S,b),A=i.multiply(L).toBytes(),O=w(T.context,A,R,b),M=c.create(L+O*x);if(!c.isValid(M))throw new Error("sign failed: invalid s");let q=Ye(A,c.toBytes(M));return ce(q,B.signature,"result")}let _={zip215:s.zip215};function P(b,I,T,S=_){let{context:x}=S,R=S.zip215===void 0?!!_.zip215:S.zip215,L=B.signature;b=ce(b,L,"signature"),I=ce(I,void 0,"message"),T=ce(T,B.publicKey,"publicKey"),R!==void 0&&Er(R,"zip215"),o&&(I=o(I));let A=L/2,O=b.subarray(0,A),M=Qt(b.subarray(A,L)),q,J,X;try{q=r.fromBytes(T,R),J=r.fromBytes(O,R),X=i.multiplyUnsafe(M)}catch{return!1}if(!R&&q.isSmallOrder())return!1;let Ce=w(x,O,T,I);return J.add(q.multiplyUnsafe(Ce)).subtract(X).clearCofactor().is0()}let D=a.BYTES,B={secretKey:D,publicKey:D,signature:2*D,seed:D};function N(b){return b=b===void 0?d(B.seed):b,ce(b,B.seed,"seed")}function U(b){return Qs(b)&&b.length===B.secretKey}function G(b,I){try{return!!r.fromBytes(b,I===void 0?_.zip215:I)}catch{return!1}}let V={getExtendedPublicKey:m,randomSecretKey:N,isValidSecretKey:U,isValidPublicKey:G,toMontgomery(b){let{y:I}=r.fromBytes(b),T=B.publicKey,S=T===32;if(!S&&T!==57)throw new Error("only defined for 25519 and 448");let x=S?a.div(rt+I,rt-I):a.div(I-rt,I+rt);return a.toBytes(x)},toMontgomerySecret(b){let I=B.secretKey;ce(b,I);let T=n(b.subarray(0,I));return f(T).subarray(0,I)}};return Object.freeze(B),Object.freeze(V),Object.freeze({keygen:ai(N,g),getPublicKey:g,sign:v,verify:P,utils:V,Point:r,lengths:B})}function La(r,e){if(xr(r),xr(e),e<0||e>4)throw new Error("invalid I2OSP length: "+e);if(r<0||r>2**(8*e)-1)throw new Error("invalid I2OSP input: "+r);let t=Array.from({length:e}).fill(0);for(let n=e-1;n>=0;n--)t[n]=r&255,r>>>=8;return new Uint8Array(t)}function xx(r,e){let t=new Uint8Array(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}function vx(r){if(!Qs(r)&&typeof r!="string")throw new Error("DST must be Uint8Array or ascii string");let e=typeof r=="string"?iu(r):r;if(e.length===0)throw new Error("DST must be non-empty");return e}function c2(r,e,t,n){ce(r),xr(t),e=vx(e),e.length>255&&(e=n(Ye(iu("H2C-OVERSIZE-DST-"),e)));let{outputLen:s,blockLen:o}=n,i=Math.ceil(t/s);if(t>65535||i>255)throw new Error("expand_message_xmd: invalid lenInBytes");let a=Ye(e,La(e.length,1)),c=new Uint8Array(o),l=La(t,2),u=new Array(i),d=n(Ye(c,r,l,La(0,1),a));u[0]=n(Ye(d,La(1,1),a));for(let h=1;h<i;h++){let p=[xx(d,u[h-1]),La(h+1,1),a];u[h]=n(Ye(...p))}return Ye(...u).slice(0,t)}var z6="HashToScalar-";var ka=BigInt(0),ci=BigInt(1),uu=BigInt(2);function Sx(r){return Xt(r,{P:"bigint",type:"string",adjustScalarBytes:"function",powPminus2:"function"},{randomBytes:"function"}),Object.freeze({...r})}function G6(r){let e=Sx(r),{P:t,type:n,adjustScalarBytes:s,powPminus2:o,randomBytes:i}=e,a=n==="x25519";if(!a&&n!=="x448")throw new Error("invalid type");let c=i===void 0?Xs:i,l=a?255:448,u=a?32:56,d=BigInt(a?9:5),f=BigInt(a?121665:39081),h=a?uu**BigInt(254):uu**BigInt(447),p=a?BigInt(8)*uu**BigInt(251)-ci:BigInt(4)*uu**BigInt(445)-ci,y=h+p+ci,m=T=>$e(T,t),g=w(d);function w(T){return Ca(m(T),u)}function v(T){let S=Yn(ce(T,u,"uCoordinate"));return a&&(S[31]&=127),m(Qt(S))}function _(T){return Qt(s(Yn(ce(T,u,"scalar"))))}function P(T,S){let x=G(v(S),_(T));if(x===ka)throw new Error("invalid private or public key received");return w(x)}function D(T){return P(T,g)}let B=D,N=P;function U(T,S,x){let R=m(T*(S-x));return S=m(S-R),x=m(x+R),{x_2:S,x_3:x}}function G(T,S){yn("u",T,ka,t),yn("scalar",S,h,y);let x=S,R=T,L=ci,A=ka,O=T,M=ci,q=ka;for(let X=BigInt(l-1);X>=ka;X--){let Ce=x>>X&ci;q^=Ce,{x_2:L,x_3:O}=U(q,L,O),{x_2:A,x_3:M}=U(q,A,M),q=Ce;let _e=L+A,Re=m(_e*_e),we=L-A,Ue=m(we*we),un=Re-Ue,ks=O+M,Ko=O-M,ia=m(Ko*_e),aa=m(ks*we),E4=ia+aa,x4=ia-aa;O=m(E4*E4),M=m(R*m(x4*x4)),L=m(Re*Ue),A=m(un*(Re+m(f*un)))}({x_2:L,x_3:O}=U(q,L,O)),{x_2:A,x_3:M}=U(q,A,M);let J=o(A);return m(L*J)}let V={secretKey:u,publicKey:u,seed:u},b=T=>(T=T===void 0?c(u):T,ce(T,V.seed,"seed"),T),I={randomSecretKey:b};return Object.freeze(V),Object.freeze(I),Object.freeze({keygen:ai(b,B),getSharedSecret:N,getPublicKey:B,scalarMult:P,scalarMultBase:D,utils:I,GuBytes:g.slice(),lengths:V})}var Ax=BigInt(0),bn=BigInt(1),W6=BigInt(2),Tx=BigInt(3),Ix=BigInt(5),Cx=BigInt(8),ro=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),f2={p:ro,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:Cx,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function Q6(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),s=BigInt(80),o=ro,a=r*r%o*r%o,c=Oe(a,W6,o)*a%o,l=Oe(c,bn,o)*r%o,u=Oe(l,Ix,o)*l%o,d=Oe(u,e,o)*u%o,f=Oe(d,t,o)*d%o,h=Oe(f,n,o)*f%o,p=Oe(h,s,o)*h%o,y=Oe(p,s,o)*h%o,m=Oe(y,e,o)*u%o;return{pow_p_5_8:Oe(m,W6,o)*r%o,b2:a}}function X6(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}var l2=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function h2(r,e){let t=ro,n=$e(e*e*e,t),s=$e(n*n*e,t),o=Q6(r*s).pow_p_5_8,i=$e(r*n*o,t),a=$e(e*i*i,t),c=i,l=$e(i*l2,t),u=a===r,d=a===$e(-r,t),f=a===$e(-r*l2,t);return u&&(i=c),(d||f)&&(i=l),wn(i,t)&&(i=$e(-i,t)),{isValid:u||d,value:i}}var Zn=H6(f2,{uvRatio:h2}),Xn=Zn.Fp,Z6=Zn.Fn;function _x(r){return q6(Zn,qr,Object.assign({adjustScalarBytes:X6,zip215:!0},r))}var Da=_x({});var Na=(()=>{let r=ro;return G6({P:r,type:"x25519",powPminus2:e=>{let{pow_p_5_8:t,b2:n}=Q6(e);return $e(Oe(t,Tx,r)*n,r)},adjustScalarBytes:X6})})();var u2=l2,Rx=BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235"),Px=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),Lx=BigInt("1159843021668779879193775521855586647937357759715417654439879720876111806838"),kx=BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952"),j6=r=>h2(bn,r),Dx=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),d2=r=>Xn.create(Qt(r)&Dx);function Y6(r){let{d:e}=f2,t=ro,n=g=>Xn.create(g),s=n(u2*r*r),o=n((s+bn)*Lx),i=BigInt(-1),a=n((i-e*s)*n(s+e)),{isValid:c,value:l}=h2(o,a),u=n(l*r);wn(u,t)||(u=n(-u)),c||(l=u),c||(i=s);let d=n(i*(s-bn)*kx-a),f=l*l,h=n((l+l)*a),p=n(d*Rx),y=n(bn-f),m=n(bn+f);return new Zn(n(h*m),n(y*p),n(p*m),n(h*y))}var Jn=class r extends lu{static BASE=new r(Zn.BASE);static ZERO=new r(Zn.ZERO);static Fp=Xn;static Fn=Z6;constructor(e){super(e)}static fromAffine(e){return new r(Zn.fromAffine(e))}assertSame(e){if(!(e instanceof r))throw new Error("RistrettoPoint expected")}init(e){return new r(e)}static fromBytes(e){ct(e,32);let{a:t,d:n}=f2,s=ro,o=_=>Xn.create(_),i=d2(e);if(!A6(Xn.toBytes(i),e)||wn(i,s))throw new Error("invalid ristretto255 encoding 1");let a=o(i*i),c=o(bn+t*a),l=o(bn-t*a),u=o(c*c),d=o(l*l),f=o(t*n*u-d),{isValid:h,value:p}=j6(o(f*d)),y=o(p*l),m=o(p*y*f),g=o((i+i)*y);wn(g,s)&&(g=o(-g));let w=o(c*m),v=o(g*w);if(!h||wn(v,s)||w===Ax)throw new Error("invalid ristretto255 encoding 2");return new r(new Zn(g,w,bn,v))}static fromHex(e){return r.fromBytes(va(e))}toBytes(){let{X:e,Y:t,Z:n,T:s}=this.ep,o=ro,i=m=>Xn.create(m),a=i(i(n+t)*i(n-t)),c=i(e*t),l=i(c*c),{value:u}=j6(i(a*l)),d=i(u*a),f=i(u*c),h=i(d*f*s),p;if(wn(s*h,o)){let m=i(t*u2),g=i(e*u2);e=m,t=g,p=i(d*Px)}else p=f;wn(e*h,o)&&(t=i(-t));let y=i((n-t)*p);return wn(y,o)&&(y=i(-y)),Xn.toBytes(y)}equals(e){this.assertSame(e);let{X:t,Y:n}=this.ep,{X:s,Y:o}=e.ep,i=l=>Xn.create(l),a=i(t*o)===i(n*s),c=i(n*o)===i(t*s);return a||c}is0(){return this.equals(r.ZERO)}};Object.freeze(Jn.BASE);Object.freeze(Jn.ZERO);Object.freeze(Jn.prototype);Object.freeze(Jn);var Nx=Object.freeze({Point:Jn,hashToCurve(r,e){let t=e?.DST===void 0?"ristretto255_XMD:SHA-512_R255MAP_RO_":e.DST,n=c2(r,t,64,qr);return Nx.deriveToCurve(n)},hashToScalar(r,e={DST:z6}){let t=c2(r,e.DST,64,qr);return Z6.create(Qt(t))},deriveToCurve(r){ct(r,64);let e=d2(r.subarray(0,32)),t=Y6(e),n=d2(r.subarray(32,64)),s=Y6(n);return new Jn(t.add(s))}});var Oa=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},Ba=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},du=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var ze={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new du("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 no=32,Zt=64,p2=32;var li,J6=(async()=>{try{return await ze.get().subtle.generateKey({name:"Ed25519"},!0,["sign","verify"]),!0}catch{return!1}})();function eg(){let r=Da.utils.randomSecretKey(),e=Da.getPublicKey(r);return{privateKey:Fx(r,e),publicKey:e}}async function Ox(r,e){let t;r.length===Zt?t=r.subarray(0,32):t=r;let n={crv:"Ed25519",kty:"OKP",x:k(r.subarray(32),"base64url"),d:k(t,"base64url"),ext:!0,key_ops:["sign"]},s=await ze.get().subtle.importKey("jwk",n,{name:"Ed25519"},!0,["sign"]),o=await ze.get().subtle.sign({name:"Ed25519"},s,ae(e instanceof Uint8Array?e:e.subarray()));return new Uint8Array(o,0,o.byteLength)}function Bx(r,e){let t=r.subarray(0,p2);return Da.sign(e instanceof Uint8Array?e:e.subarray(),t)}async function tg(r,e){return li==null&&(li=await J6),li?Ox(r,e):Bx(r,e)}async function Mx(r,e,t){if(r.buffer instanceof ArrayBuffer){let n=await ze.get().subtle.importKey("raw",r.buffer,{name:"Ed25519"},!1,["verify"]);return await ze.get().subtle.verify({name:"Ed25519"},n,ae(e),ae(t instanceof Uint8Array?t:t.subarray()))}throw new TypeError("WebCrypto does not support SharedArrayBuffer for Ed25519 keys")}function Ux(r,e,t){return Da.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}async function rg(r,e,t){return li==null&&(li=await J6),li?Mx(r,e,t):Ux(r,e,t)}function Fx(r,e){let t=new Uint8Array(Zt);for(let n=0;n<p2;n++)t[n]=r[n],t[p2+n]=e[n];return t}function ui(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Ma=class{type="Ed25519";raw;constructor(e){this.raw=fi(e,no)}toMultihash(){return Yt.digest(tt(this))}toCID(){return ie.createV1(114,this.toMultihash())}toString(){return ve.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:Y(this.raw,e.raw)}verify(e,t,n){n?.signal?.throwIfAborted();let s=rg(this.raw,t,e);return ui(s)?s.then(o=>(n?.signal?.throwIfAborted(),o)):s}},di=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=fi(e,Zt),this.publicKey=new Ma(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:Y(this.raw,e.raw)}sign(e,t){t?.signal?.throwIfAborted();let n=tg(this.raw,e);return ui(n)?n.then(s=>(t?.signal?.throwIfAborted(),s)):(t?.signal?.throwIfAborted(),n)}};function m2(r){if(r.length>Zt){r=fi(r,Zt+no);let n=r.subarray(0,Zt),s=r.subarray(Zt,r.length);return new di(n,s)}r=fi(r,Zt);let e=r.subarray(0,Zt),t=r.subarray(no);return new di(e,t)}function g2(r){return r=fi(r,no),new Ma(r)}async function sg(){let{privateKey:r,publicKey:e}=eg();return new di(r,e)}function fi(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new E(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var $x=Math.pow(2,7),Kx=Math.pow(2,14),Vx=Math.pow(2,21),y2=Math.pow(2,28),w2=Math.pow(2,35),b2=Math.pow(2,42),E2=Math.pow(2,49),Ae=128,bt=127;function ge(r){if(r<$x)return 1;if(r<Kx)return 2;if(r<Vx)return 3;if(r<y2)return 4;if(r<w2)return 5;if(r<b2)return 6;if(r<E2)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function es(r,e,t=0){switch(ge(r)){case 8:e[t++]=r&255|Ae,r/=128;case 7:e[t++]=r&255|Ae,r/=128;case 6:e[t++]=r&255|Ae,r/=128;case 5:e[t++]=r&255|Ae,r/=128;case 4:e[t++]=r&255|Ae,r>>>=7;case 3:e[t++]=r&255|Ae,r>>>=7;case 2:e[t++]=r&255|Ae,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function Hx(r,e,t=0){switch(ge(r)){case 8:e.set(t++,r&255|Ae),r/=128;case 7:e.set(t++,r&255|Ae),r/=128;case 6:e.set(t++,r&255|Ae),r/=128;case 5:e.set(t++,r&255|Ae),r/=128;case 4:e.set(t++,r&255|Ae),r>>>=7;case 3:e.set(t++,r&255|Ae),r>>>=7;case 2:e.set(t++,r&255|Ae),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function Ua(r,e){let t=r[e],n=0;if(n+=t&bt,t<Ae||(t=r[e+1],n+=(t&bt)<<7,t<Ae)||(t=r[e+2],n+=(t&bt)<<14,t<Ae)||(t=r[e+3],n+=(t&bt)<<21,t<Ae)||(t=r[e+4],n+=(t&bt)*y2,t<Ae)||(t=r[e+5],n+=(t&bt)*w2,t<Ae)||(t=r[e+6],n+=(t&bt)*b2,t<Ae)||(t=r[e+7],n+=(t&bt)*E2,t<Ae))return n;throw new RangeError("Could not decode varint")}function qx(r,e){let t=r.get(e),n=0;if(n+=t&bt,t<Ae||(t=r.get(e+1),n+=(t&bt)<<7,t<Ae)||(t=r.get(e+2),n+=(t&bt)<<14,t<Ae)||(t=r.get(e+3),n+=(t&bt)<<21,t<Ae)||(t=r.get(e+4),n+=(t&bt)*y2,t<Ae)||(t=r.get(e+5),n+=(t&bt)*w2,t<Ae)||(t=r.get(e+6),n+=(t&bt)*b2,t<Ae)||(t=r.get(e+7),n+=(t&bt)*E2,t<Ae))return n;throw new RangeError("Could not decode varint")}function Mt(r,e,t=0){return e==null&&(e=de(ge(r))),e instanceof Uint8Array?es(r,e,t):Hx(r,e,t)}function vr(r,e=0){return r instanceof Uint8Array?Ua(r,e):qx(r,e)}var x2=new Float32Array([-0]),ts=new Uint8Array(x2.buffer);function og(r,e,t){x2[0]=r,e[t]=ts[0],e[t+1]=ts[1],e[t+2]=ts[2],e[t+3]=ts[3]}function ig(r,e){return ts[0]=r[e],ts[1]=r[e+1],ts[2]=r[e+2],ts[3]=r[e+3],x2[0]}var v2=new Float64Array([-0]),Et=new Uint8Array(v2.buffer);function ag(r,e,t){v2[0]=r,e[t]=Et[0],e[t+1]=Et[1],e[t+2]=Et[2],e[t+3]=Et[3],e[t+4]=Et[4],e[t+5]=Et[5],e[t+6]=Et[6],e[t+7]=Et[7]}function cg(r,e){return Et[0]=r[e],Et[1]=r[e+1],Et[2]=r[e+2],Et[3]=r[e+3],Et[4]=r[e+4],Et[5]=r[e+5],Et[6]=r[e+6],Et[7]=r[e+7],v2[0]}var zx=BigInt(Number.MAX_SAFE_INTEGER),Gx=BigInt(Number.MIN_SAFE_INTEGER),Jt=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 so;if(e<zx&&e>Gx)return this.fromNumber(Number(e));let t=e<0n;t&&(e=-e);let n=e>>32n,s=e-(n<<32n);return t&&(n=~n|0n,s=~s|0n,++s>lg&&(s=0n,++n>lg&&(n=0n))),new r(Number(s),Number(n))}static fromNumber(e){if(e===0)return so;let t=e<0;t&&(e=-e);let n=e>>>0,s=(e-n)/4294967296>>>0;return t&&(s=~s>>>0,n=~n>>>0,++n>4294967295&&(n=0,++s>4294967295&&(s=0))),new r(n,s)}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):so}},so=new Jt(0,0);so.toBigInt=function(){return 0n};so.zzEncode=so.zzDecode=function(){return this};so.length=function(){return 1};var lg=4294967296n;function ug(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 dg(r,e,t){if(t-e<1)return"";let s,o=[],i=0,a;for(;e<t;)a=r[e++],a<128?o[i++]=a:a>191&&a<224?o[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,o[i++]=55296+(a>>10),o[i++]=56320+(a&1023)):o[i++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,i>8191&&((s??(s=[])).push(String.fromCharCode.apply(String,o)),i=0);return s!=null?(i>0&&s.push(String.fromCharCode.apply(String,o.slice(0,i))),s.join("")):String.fromCharCode.apply(String,o.slice(0,i))}function S2(r,e,t){let n=t,s,o;for(let i=0;i<r.length;++i)s=r.charCodeAt(i),s<128?e[t++]=s:s<2048?(e[t++]=s>>6|192,e[t++]=s&63|128):(s&64512)===55296&&((o=r.charCodeAt(i+1))&64512)===56320?(s=65536+((s&1023)<<10)+(o&1023),++i,e[t++]=s>>18|240,e[t++]=s>>12&63|128,e[t++]=s>>6&63|128,e[t++]=s&63|128):(e[t++]=s>>12|224,e[t++]=s>>6&63|128,e[t++]=s&63|128);return t-n}function Sr(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function fu(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var A2=class{buf;pos;len;_slice=Uint8Array.prototype.subarray;constructor(e){this.buf=ae(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,Sr(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 Sr(this,4);return fu(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Sr(this,4);return fu(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Sr(this,4);let e=ig(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Sr(this,4);let e=cg(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 Sr(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return dg(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Sr(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Sr(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 Jt(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 Sr(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 Sr(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 Sr(this,8);let e=fu(this.buf,this.pos+=4),t=fu(this.buf,this.pos+=4);return new Jt(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=Ua(this.buf,this.pos);return this.pos+=ge(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 Fa(r){return new A2(r instanceof Uint8Array?r:r.subarray())}function ee(r,e,t){let n=Fa(r);return e.decode(n,void 0,t)}function T2(r){let e=r??8192,t=e>>>1,n,s=e;return function(i){if(i<1||i>t)return de(i);s+i>e&&(n=de(e),s=0);let a=n.subarray(s,s+=i);return(s&7)!==0&&(s=(s|7)+1),a}}var oo=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function I2(){}var _2=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},Wx=T2();function jx(r){return globalThis.Buffer!=null?de(r):Wx(r)}var Ka=class{len;head;tail;states;constructor(){this.len=0,this.head=new oo(I2,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new oo(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new R2((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(hu,10,Jt.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=Jt.fromBigInt(e);return this._push(hu,t.length(),t)}uint64Number(e){return this._push(es,ge(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=Jt.fromBigInt(e).zzEncode();return this._push(hu,t.length(),t)}sint64Number(e){let t=Jt.fromNumber(e).zzEncode();return this._push(hu,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(C2,1,e?1:0)}fixed32(e){return this._push($a,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=Jt.fromBigInt(e);return this._push($a,4,t.lo)._push($a,4,t.hi)}fixed64Number(e){let t=Jt.fromNumber(e);return this._push($a,4,t.lo)._push($a,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(og,4,e)}double(e){return this._push(ag,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(C2,1,0):this.uint32(t)._push(Qx,t,e)}string(e){let t=ug(e);return t!==0?this.uint32(t)._push(S2,t,e):this._push(C2,1,0)}fork(){return this.states=new _2(this),this.head=this.tail=new oo(I2,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 oo(I2,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=jx(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function C2(r,e,t){e[t]=r&255}function Yx(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var R2=class extends oo{next;constructor(e,t){super(Yx,e,t),this.next=void 0}};function hu(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 $a(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 Qx(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(Ka.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(Xx,e,r),this},Ka.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(Zx,e,r),this});function Xx(r,e,t){e.set(r,t)}function Zx(r,e,t){r.length<40?S2(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(C(r),t)}function P2(){return new Ka}function te(r,e){let t=P2();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}function*re(r,e,t){let n=Fa(r);yield*e.stream(n,void 0,"$",t)}var pu={VARINT:0,BIT64:1,LENGTH_DELIMITED:2,START_GROUP:3,END_GROUP:4,BIT32:5};function mu(r,e,t,n,s){return{name:r,type:e,encode:t,decode:n,stream:s}}function Qe(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(i,a){let c=e(i);a.int32(c)},n=function(i){let a=i.int32();return e(a)},s=function*(i){let a=i.int32();yield e(a)};return mu("enum",pu.VARINT,t,n,s)}function ne(r,e,t){return mu("message",pu.LENGTH_DELIMITED,r,e,t)}var fe=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},Va=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var Pe;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1",r.ECDSA="ECDSA"})(Pe||(Pe={}));var L2;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1",r[r.ECDSA=3]="ECDSA"})(L2||(L2={}));(function(r){r.codec=()=>Qe(L2)})(Pe||(Pe={}));var zr;(function(r){let e;r.codec=()=>(e==null&&(e=ne((o,i,a={})=>{a.lengthDelimited!==!1&&i.fork(),o.Type!=null&&(i.uint32(8),Pe.codec().encode(o.Type,i)),o.Data!=null&&(i.uint32(18),i.bytes(o.Data)),a.lengthDelimited!==!1&&i.ldelim()},(o,i,a={})=>{let c={},l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{c.Type=Pe.codec().decode(o);break}case 2:{c.Data=o.bytes();break}default:{o.skipType(u&7);break}}}return c},function*(o,i,a,c={}){let l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{yield{field:`${a}.Type`,value:Pe.codec().decode(o)};break}case 2:{yield{field:`${a}.Data`,value:o.bytes()};break}default:{o.skipType(u&7);break}}}})),e);function t(o){return te(o,r.codec())}r.encode=t;function n(o,i){return ee(o,r.codec(),i)}r.decode=n;function s(o,i){return re(o,r.codec(),i)}r.stream=s})(zr||(zr={}));var Ha;(function(r){let e;r.codec=()=>(e==null&&(e=ne((o,i,a={})=>{a.lengthDelimited!==!1&&i.fork(),o.Type!=null&&(i.uint32(8),Pe.codec().encode(o.Type,i)),o.Data!=null&&(i.uint32(18),i.bytes(o.Data)),a.lengthDelimited!==!1&&i.ldelim()},(o,i,a={})=>{let c={},l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{c.Type=Pe.codec().decode(o);break}case 2:{c.Data=o.bytes();break}default:{o.skipType(u&7);break}}}return c},function*(o,i,a,c={}){let l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{yield{field:`${a}.Type`,value:Pe.codec().decode(o)};break}case 2:{yield{field:`${a}.Data`,value:o.bytes()};break}default:{o.skipType(u&7);break}}}})),e);function t(o){return te(o,r.codec())}r.encode=t;function n(o,i){return ee(o,r.codec(),i)}r.decode=n;function s(o,i){return re(o,r.codec(),i)}r.stream=s})(Ha||(Ha={}));var za={};yt(za,{MAX_RSA_KEY_SIZE:()=>k2,generateRSAKeyPair:()=>K2,jwkToJWKKeyPair:()=>gg,jwkToPkcs1:()=>rv,jwkToPkix:()=>B2,jwkToRSAPrivateKey:()=>$2,pkcs1MessageToJwk:()=>N2,pkcs1MessageToRSAPrivateKey:()=>gu,pkcs1ToJwk:()=>tv,pkcs1ToRSAPrivateKey:()=>M2,pkixMessageToJwk:()=>O2,pkixMessageToRSAPublicKey:()=>F2,pkixToJwk:()=>nv,pkixToRSAPublicKey:()=>U2});var hi=class{type="RSA";jwk;_raw;_multihash;constructor(e,t){this.jwk=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=za.jwkToPkix(this.jwk)),this._raw}toMultihash(){return this._multihash}toCID(){return ie.createV1(114,this._multihash)}toString(){return ve.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:Y(this.raw,e.raw)}verify(e,t,n){return mg(this.jwk,t,e,n)}},qa=class{type="RSA";jwk;_raw;publicKey;constructor(e,t){this.jwk=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=za.jwkToPkcs1(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:Y(this.raw,e.raw)}sign(e,t){return pg(this.jwk,e,t)}};var k2=8192,D2=18,Jx=1062,ev=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function tv(r){let e=ar(r);return N2(e)}function N2(r){return{n:k(r[1],"base64url"),e:k(r[2],"base64url"),d:k(r[3],"base64url"),p:k(r[4],"base64url"),q:k(r[5],"base64url"),dp:k(r[6],"base64url"),dq:k(r[7],"base64url"),qi:k(r[8],"base64url"),kty:"RSA"}}function rv(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 E("JWK was missing components");return wr([_t(Uint8Array.from([0])),_t(C(r.n,"base64url")),_t(C(r.e,"base64url")),_t(C(r.d,"base64url")),_t(C(r.p,"base64url")),_t(C(r.q,"base64url")),_t(C(r.dp,"base64url")),_t(C(r.dq,"base64url")),_t(C(r.qi,"base64url"))]).subarray()}function nv(r){let e=ar(r,{offset:0});return O2(e)}function O2(r){let e=ar(r[1],{offset:0});return{kty:"RSA",n:k(e[0],"base64url"),e:k(e[1],"base64url")}}function B2(r){if(r.n==null||r.e==null)throw new E("JWK was missing components");return wr([ev,xa(wr([_t(C(r.n,"base64url")),_t(C(r.e,"base64url"))]))]).subarray()}function M2(r){let e=ar(r);return gu(e)}function gu(r){let e=N2(r);return $2(e)}function U2(r,e){if(r.byteLength>=Jx)throw new dn("Key size is too large");let t=ar(r,{offset:0});return F2(t,r,e)}function F2(r,e,t){let n=O2(r);if(t==null){let s=cr(zr.encode({Type:Pe.RSA,Data:e}));t=Ct(D2,s)}return new hi(n,t)}function $2(r){if(wg(r)>k2)throw new E("Key size is too large");let e=gg(r),t=cr(zr.encode({Type:Pe.RSA,Data:B2(e.publicKey)})),n=Ct(D2,t);return new qa(e.privateKey,new hi(e.publicKey,n))}async function K2(r){if(r>k2)throw new E("Key size is too large");let e=await yg(r),t=cr(zr.encode({Type:Pe.RSA,Data:B2(e.publicKey)})),n=Ct(D2,t);return new qa(e.privateKey,new hi(e.publicKey,n))}function gg(r){if(r==null)throw new E("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}async function yg(r,e){let t=await ze.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 sv(t,e);return{privateKey:n[0],publicKey:n[1]}}async function pg(r,e,t){let n=await ze.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]);t?.signal?.throwIfAborted();let s=await ze.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},n,ae(e instanceof Uint8Array?e:e.subarray()));return t?.signal?.throwIfAborted(),new Uint8Array(s,0,s.byteLength)}async function mg(r,e,t,n){let s=await ze.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);n?.signal?.throwIfAborted();let o=await ze.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},s,ae(e),ae(t instanceof Uint8Array?t:t.subarray()));return n?.signal?.throwIfAborted(),o}async function sv(r,e){if(r.privateKey==null||r.publicKey==null)throw new E("Private and public key are required");let t=await Promise.all([ze.get().subtle.exportKey("jwk",r.privateKey),ze.get().subtle.exportKey("jwk",r.publicKey)]);return e?.signal?.throwIfAborted(),t}function wg(r){if(r.kty!=="RSA")throw new E("invalid key type");if(r.n==null)throw new E("invalid key modulus");return C(r.n,"base64url").length*8}var yu=class{oHash;iHash;blockLen;outputLen;canXOF=!1;finished=!1;destroyed=!1;constructor(e,t){if(mn(e),ct(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,s=new Uint8Array(n);s.set(t.length>n?e.create().update(t).digest():t);for(let o=0;o<s.length;o++)s[o]^=54;this.iHash.update(s),this.oHash=e.create();for(let o=0;o<s.length;o++)s[o]^=106;this.oHash.update(s),wt(s)}update(e){return ei(this),this.iHash.update(e),this}digestInto(e){ei(this),Ql(e,this),this.finished=!0;let t=e.subarray(0,this.outputLen);this.iHash.digestInto(t),this.oHash.update(t),this.oHash.digestInto(t),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:s,destroyed:o,blockLen:i,outputLen:a}=this;return e=e,e.finished=s,e.destroyed=o,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()}},io=(()=>{let r=((e,t,n)=>new yu(e,t).update(n).digest());return r.create=(e,t)=>new yu(e,t),r})();var bg=(r,e)=>(r+(r>=0?e:-e)/Eg)/e;function ov(r,e,t){yn("scalar",r,Gr,t);let[[n,s],[o,i]]=e,a=bg(i*r,t),c=bg(-s*r,t),l=r-a*n-c*o,u=-a*s-c*i,d=l<Gr,f=u<Gr;d&&(l=-l),f&&(u=-u);let h=_a(Math.ceil(ni(t)/2))+rs;if(l<Gr||l>=h||u<Gr||u>=h)throw new Error("splitScalar (endomorphism): failed for k");return{k1neg:d,k1:l,k2neg:f,k2:u}}function H2(r){if(!["compact","recovered","der"].includes(r))throw new Error('Signature format must be "compact", "recovered", or "der"');return r}function V2(r,e){Xt(r);let t={};for(let n of Object.keys(e))t[n]=r[n]===void 0?e[n]:r[n];return Er(t.lowS,"lowS"),Er(t.prehash,"prehash"),t.format!==void 0&&H2(t.format),t}var q2=class extends Error{constructor(e=""){super(e)}},Ar={Err:q2,_tlv:{encode:(r,e)=>{let{Err:t}=Ar;if(xr(r,"tag"),r<0||r>255)throw new t("tlv.encode: wrong tag");if(typeof e!="string")throw new TypeError('"data" expected string, got type='+typeof e);if(e.length&1)throw new t("tlv.encode: unpadded data");let n=e.length/2,s=Ia(n);if(s.length/2&128)throw new t("tlv.encode: long form length too big");let o=n>127?Ia(s.length/2|128):"";return Ia(r)+o+s+e},decode(r,e){let{Err:t}=Ar;e=ce(e,void 0,"DER data");let n=0;if(r<0||r>255)throw new t("tlv.encode: wrong tag");if(e.length<2||e[n++]!==r)throw new t("tlv.decode: wrong tlv");let s=e[n++],o=!!(s&128),i=0;if(!o)i=s;else{let c=s&127;if(!c)throw new t("tlv.decode(long): indefinite length not supported");if(c>4)throw new t("tlv.decode(long): byte length is too big");let l=e.subarray(n,n+c);if(l.length!==c)throw new t("tlv.decode: length bytes not complete");if(l[0]===0)throw new t("tlv.decode(long): zero leftmost byte");for(let u of l)i=i<<8|u;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}=Ar;if(su(r),r<Gr)throw new e("integer: negative integers are not allowed");let t=Ia(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}=Ar;if(r.length<1)throw new e("invalid signature integer: empty");if(r[0]&128)throw new e("invalid signature integer: negative");if(r.length>1&&r[0]===0&&!(r[1]&128))throw new e("invalid signature integer: unnecessary leading zero");return Zs(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Ar,s=ce(r,void 0,"signature"),{v:o,l:i}=n.decode(48,s);if(i.length)throw new e("invalid signature: left bytes after parsing");let{v:a,l:c}=n.decode(2,o),{v:l,l:u}=n.decode(2,c);if(u.length)throw new e("invalid signature: left bytes after parsing");return{r:t.decode(a),s:t.decode(l)}},hexFromSig(r){let{_tlv:e,_int:t}=Ar,n=e.encode(2,t.encode(r.r)),s=e.encode(2,t.encode(r.s)),o=n+s;return e.encode(48,o)}};Object.freeze(Ar._tlv);Object.freeze(Ar._int);Object.freeze(Ar);var Gr=BigInt(0),rs=BigInt(1),Eg=BigInt(2),wu=BigInt(3),iv=BigInt(4);function xg(r,e={}){let t=cu("weierstrass",r,e),n=t.Fp,s=t.Fn,o=t.CURVE,{h:i,n:a}=o;Xt(e,{},{allowInfinityPoint:"boolean",clearCofactor:"function",isTorsionFree:"function",fromBytes:"function",toBytes:"function",endo:"object"});let{endo:c,allowInfinityPoint:l}=e;if(c&&(!n.is0(o.a)||typeof c.beta!="bigint"||!Array.isArray(c.basises)))throw new Error('invalid endo: expected "beta": bigint and "basises": array');let u=Sg(n,s);function d(){if(!n.isOdd)throw new Error("compression is not supported: Field does not have .isOdd()")}function f(V,b,I){if(l&&b.is0())return Uint8Array.of(0);let{x:T,y:S}=b.toAffine(),x=n.toBytes(T);if(Er(I,"isCompressed"),I){d();let R=!n.isOdd(S);return Ye(vg(R),x)}else return Ye(Uint8Array.of(4),x,n.toBytes(S))}function h(V){ce(V,void 0,"Point");let{publicKey:b,publicKeyUncompressed:I}=u,T=V.length,S=V[0],x=V.subarray(1);if(l&&T===1&&S===0)return{x:n.ZERO,y:n.ZERO};if(T===b&&(S===2||S===3)){let R=n.fromBytes(x);if(!n.isValid(R))throw new Error("bad point: is not on curve, wrong x");let L=m(R),A;try{A=n.sqrt(L)}catch(q){let J=q instanceof Error?": "+q.message:"";throw new Error("bad point: is not on curve, sqrt error"+J)}d();let O=n.isOdd(A);return(S&1)===1!==O&&(A=n.neg(A)),{x:R,y:A}}else if(T===I&&S===4){let R=n.BYTES,L=n.fromBytes(x.subarray(0,R)),A=n.fromBytes(x.subarray(R,R*2));if(!g(L,A))throw new Error("bad point: is not on curve");return{x:L,y:A}}else throw new Error(`bad point: got length ${T}, expected compressed=${b} or uncompressed=${I}`)}let p=e.toBytes===void 0?f:e.toBytes,y=e.fromBytes===void 0?h:e.fromBytes;function m(V){let b=n.sqr(V),I=n.mul(b,V);return n.add(n.add(I,n.mul(V,o.a)),o.b)}function g(V,b){let I=n.sqr(b),T=m(V);return n.eql(I,T)}if(!g(o.Gx,o.Gy))throw new Error("bad curve params: generator point");let w=n.mul(n.pow(o.a,wu),iv),v=n.mul(n.sqr(o.b),BigInt(27));if(n.is0(n.add(w,v)))throw new Error("bad curve params: a or b");function _(V,b,I=!1){if(!n.isValid(b)||I&&n.is0(b))throw new Error(`bad point coordinate ${V}`);return b}function P(V){if(!(V instanceof N))throw new Error("Weierstrass Point expected")}function D(V){if(!c||!c.basises)throw new Error("no endo");return ov(V,c.basises,s.ORDER)}function B(V,b,I,T,S){return I=new N(n.mul(I.X,V),I.Y,I.Z),b=Pa(T,b),I=Pa(S,I),b.add(I)}class N{static BASE=new N(o.Gx,o.Gy,n.ONE);static ZERO=new N(n.ZERO,n.ONE,n.ZERO);static Fp=n;static Fn=s;X;Y;Z;constructor(b,I,T){this.X=_("x",b),this.Y=_("y",I,!0),this.Z=_("z",T),Object.freeze(this)}static CURVE(){return o}static fromAffine(b){let{x:I,y:T}=b||{};if(!b||!n.isValid(I)||!n.isValid(T))throw new Error("invalid affine point");if(b instanceof N)throw new Error("projective point not allowed");return n.is0(I)&&n.is0(T)?N.ZERO:new N(I,T,n.ONE)}static fromBytes(b){let I=N.fromAffine(y(ce(b,void 0,"point")));return I.assertValidity(),I}static fromHex(b){return N.fromBytes(ri(b))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(b=8,I=!0){return G.createCache(this,b),I||this.multiply(wu),this}assertValidity(){let b=this;if(b.is0()){if(e.allowInfinityPoint&&n.is0(b.X)&&n.eql(b.Y,n.ONE)&&n.is0(b.Z))return;throw new Error("bad point: ZERO")}let{x:I,y:T}=b.toAffine();if(!n.isValid(I)||!n.isValid(T))throw new Error("bad point: x or y not field elements");if(!g(I,T))throw new Error("bad point: equation left != right");if(!b.isTorsionFree())throw new Error("bad point: not in prime-order subgroup")}hasEvenY(){let{y:b}=this.toAffine();if(!n.isOdd)throw new Error("Field doesn't support isOdd");return!n.isOdd(b)}equals(b){P(b);let{X:I,Y:T,Z:S}=this,{X:x,Y:R,Z:L}=b,A=n.eql(n.mul(I,L),n.mul(x,S)),O=n.eql(n.mul(T,L),n.mul(R,S));return A&&O}negate(){return new N(this.X,n.neg(this.Y),this.Z)}double(){let{a:b,b:I}=o,T=n.mul(I,wu),{X:S,Y:x,Z:R}=this,L=n.ZERO,A=n.ZERO,O=n.ZERO,M=n.mul(S,S),q=n.mul(x,x),J=n.mul(R,R),X=n.mul(S,x);return X=n.add(X,X),O=n.mul(S,R),O=n.add(O,O),L=n.mul(b,O),A=n.mul(T,J),A=n.add(L,A),L=n.sub(q,A),A=n.add(q,A),A=n.mul(L,A),L=n.mul(X,L),O=n.mul(T,O),J=n.mul(b,J),X=n.sub(M,J),X=n.mul(b,X),X=n.add(X,O),O=n.add(M,M),M=n.add(O,M),M=n.add(M,J),M=n.mul(M,X),A=n.add(A,M),J=n.mul(x,R),J=n.add(J,J),M=n.mul(J,X),L=n.sub(L,M),O=n.mul(J,q),O=n.add(O,O),O=n.add(O,O),new N(L,A,O)}add(b){P(b);let{X:I,Y:T,Z:S}=this,{X:x,Y:R,Z:L}=b,A=n.ZERO,O=n.ZERO,M=n.ZERO,q=o.a,J=n.mul(o.b,wu),X=n.mul(I,x),Ce=n.mul(T,R),_e=n.mul(S,L),Re=n.add(I,T),we=n.add(x,R);Re=n.mul(Re,we),we=n.add(X,Ce),Re=n.sub(Re,we),we=n.add(I,S);let Ue=n.add(x,L);return we=n.mul(we,Ue),Ue=n.add(X,_e),we=n.sub(we,Ue),Ue=n.add(T,S),A=n.add(R,L),Ue=n.mul(Ue,A),A=n.add(Ce,_e),Ue=n.sub(Ue,A),M=n.mul(q,we),A=n.mul(J,_e),M=n.add(A,M),A=n.sub(Ce,M),M=n.add(Ce,M),O=n.mul(A,M),Ce=n.add(X,X),Ce=n.add(Ce,X),_e=n.mul(q,_e),we=n.mul(J,we),Ce=n.add(Ce,_e),_e=n.sub(X,_e),_e=n.mul(q,_e),we=n.add(we,_e),X=n.mul(Ce,we),O=n.add(O,X),X=n.mul(Ue,we),A=n.mul(Re,A),A=n.sub(A,X),X=n.mul(Re,Ce),M=n.mul(Ue,M),M=n.add(M,X),new N(A,O,M)}subtract(b){return P(b),this.add(b.negate())}is0(){return this.equals(N.ZERO)}multiply(b){let{endo:I}=e;if(!s.isValidNot0(b))throw new RangeError("invalid scalar: out of range");let T,S,x=R=>G.cached(this,R,L=>to(N,L));if(I){let{k1neg:R,k1:L,k2neg:A,k2:O}=D(b),{p:M,f:q}=x(L),{p:J,f:X}=x(O);S=q.add(X),T=B(I.beta,M,J,R,A)}else{let{p:R,f:L}=x(b);T=R,S=L}return to(N,[T,S])[0]}multiplyUnsafe(b){let{endo:I}=e,T=this,S=b;if(!s.isValid(S))throw new RangeError("invalid scalar: out of range");if(S===Gr||T.is0())return N.ZERO;if(S===rs)return T;if(G.hasCache(this))return this.multiply(S);if(I){let{k1neg:x,k1:R,k2neg:L,k2:A}=D(S),{p1:O,p2:M}=V6(N,T,R,A);return B(I.beta,O,M,x,L)}else return G.unsafe(T,S)}toAffine(b){let I=this,T=b,{X:S,Y:x,Z:R}=I;if(n.eql(R,n.ONE))return{x:S,y:x};let L=I.is0();T==null&&(T=L?n.ONE:n.inv(R));let A=n.mul(S,T),O=n.mul(x,T),M=n.mul(R,T);if(L)return{x:n.ZERO,y:n.ZERO};if(!n.eql(M,n.ONE))throw new Error("invZ was invalid");return{x:A,y:O}}isTorsionFree(){let{isTorsionFree:b}=e;return i===rs?!0:b?b(N,this):G.unsafe(this,a).is0()}clearCofactor(){let{clearCofactor:b}=e;return i===rs?this:b?b(N,this):this.multiplyUnsafe(i)}isSmallOrder(){return i===rs?this.is0():this.clearCofactor().is0()}toBytes(b=!0){return Er(b,"isCompressed"),this.assertValidity(),p(N,this,b)}toHex(b=!0){return ti(this.toBytes(b))}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let U=s.BITS,G=new ii(N,e.endo?Math.ceil(U/2):U);return U>=8&&N.BASE.precompute(8),Object.freeze(N.prototype),Object.freeze(N),N}function vg(r){return Uint8Array.of(r?2:3)}function Sg(r,e){return{secretKey:e.BYTES,publicKey:1+r.BYTES,publicKeyUncompressed:1+2*r.BYTES,publicKeyHasPrefix:!0,signature:2*e.BYTES}}function av(r,e={}){let{Fn:t}=r,n=e.randomBytes===void 0?Xs:e.randomBytes,s=Object.assign(Sg(r.Fp,t),{seed:Math.max(r2(t.ORDER),16)});function o(h){try{let p=t.fromBytes(h);return t.isValidNot0(p)}catch{return!1}}function i(h,p){let{publicKey:y,publicKeyUncompressed:m}=s;try{let g=h.length;return p===!0&&g!==y||p===!1&&g!==m?!1:!!r.fromBytes(h)}catch{return!1}}function a(h){return h=h===void 0?n(s.seed):h,n2(ce(h,s.seed,"seed"),t.ORDER)}function c(h,p=!0){return r.BASE.multiply(t.fromBytes(h)).toBytes(p)}function l(h){let{secretKey:p,publicKey:y,publicKeyUncompressed:m}=s,g=t._lengths;if(!Qs(h))return;let w=ce(h,void 0,"key").length,v=w===y||w===m,_=w===p||!!g?.includes(w);if(!(v&&_))return v}function u(h,p,y=!0){if(l(h)===!0)throw new Error("first arg must be private key");if(l(p)===!1)throw new Error("second arg must be public key");let m=t.fromBytes(h);return r.fromBytes(p).multiply(m).toBytes(y)}let d={isValidSecretKey:o,isValidPublicKey:i,randomSecretKey:a},f=ai(a,c);return Object.freeze(d),Object.freeze(s),Object.freeze({getPublicKey:c,getSharedSecret:u,keygen:f,Point:r,utils:d,lengths:s})}function Ag(r,e,t={}){let n=e;mn(n),Xt(t,{},{hmac:"function",lowS:"boolean",randomBytes:"function",bits2int:"function",bits2int_modN:"function"}),t=Object.assign({},t);let s=t.randomBytes===void 0?Xs:t.randomBytes,o=t.hmac===void 0?(S,x)=>io(n,S,x):t.hmac,{Fp:i,Fn:a}=r,{ORDER:c,BITS:l}=a,{keygen:u,getPublicKey:d,getSharedSecret:f,utils:h,lengths:p}=av(r,t),y={prehash:!0,lowS:typeof t.lowS=="boolean"?t.lowS:!0,format:"compact",extraEntropy:!1},m=c*Eg+rs<i.ORDER;function g(S){let x=c>>rs;return S>x}function w(S,x){if(!a.isValidNot0(x))throw new Error(`invalid signature ${S}: out of range 1..Point.Fn.ORDER`);return x}function v(){if(m)throw new Error('"recovered" sig type is not supported for cofactor >2 curves')}function _(S,x){H2(x);let R=p.signature,L=x==="compact"?R:x==="recovered"?R+1:void 0;return ce(S,L)}class P{r;s;recovery;constructor(x,R,L){if(this.r=w("r",x),this.s=w("s",R),L!=null){if(v(),![0,1,2,3].includes(L))throw new Error("invalid recovery id");this.recovery=L}Object.freeze(this)}static fromBytes(x,R=y.format){_(x,R);let L;if(R==="der"){let{r:q,s:J}=Ar.toSig(ce(x));return new P(q,J)}R==="recovered"&&(L=x[0],R="compact",x=x.subarray(1));let A=p.signature/2,O=x.subarray(0,A),M=x.subarray(A,A*2);return new P(a.fromBytes(O),a.fromBytes(M),L)}static fromHex(x,R){return this.fromBytes(ri(x),R)}assertRecovery(){let{recovery:x}=this;if(x==null)throw new Error("invalid recovery id: must be present");return x}addRecoveryBit(x){return new P(this.r,this.s,x)}recoverPublicKey(x){let{r:R,s:L}=this,A=this.assertRecovery(),O=A===2||A===3?R+c:R;if(!i.isValid(O))throw new Error("invalid recovery id: sig.r+curve.n != R.x");let M=i.toBytes(O),q=r.fromBytes(Ye(vg((A&1)===0),M)),J=a.inv(O),X=B(ce(x,void 0,"msgHash")),Ce=a.create(-X*J),_e=a.create(L*J),Re=r.BASE.multiplyUnsafe(Ce).add(q.multiplyUnsafe(_e));if(Re.is0())throw new Error("invalid recovery: point at infinify");return Re.assertValidity(),Re}hasHighS(){return g(this.s)}toBytes(x=y.format){if(H2(x),x==="der")return ri(Ar.hexFromSig(this));let{r:R,s:L}=this,A=a.toBytes(R),O=a.toBytes(L);return x==="recovered"?(v(),Ye(Uint8Array.of(this.assertRecovery()),A,O)):Ye(A,O)}toHex(x){return ti(this.toBytes(x))}}Object.freeze(P.prototype),Object.freeze(P);let D=t.bits2int===void 0?function(x){if(x.length>8192)throw new Error("input is too large");let R=Zs(x),L=x.length*8-l;return L>0?R>>BigInt(L):R}:t.bits2int,B=t.bits2int_modN===void 0?function(x){return a.create(D(x))}:t.bits2int_modN,N=_a(l);function U(S){return yn("num < 2^"+l,S,Gr,N),a.toBytes(S)}function G(S,x){return ce(S,void 0,"message"),x?ce(n(S),void 0,"prehashed message"):S}function V(S,x,R){let{lowS:L,prehash:A,extraEntropy:O}=V2(R,y);S=G(S,A);let M=B(S),q=a.fromBytes(x);if(!a.isValidNot0(q))throw new Error("invalid private key");let J=[U(q),U(M)];if(O!=null&&O!==!1){let Re=O===!0?s(p.secretKey):O;J.push(ce(Re,void 0,"extraEntropy"))}let X=Ye(...J),Ce=M;function _e(Re){let we=D(Re);if(!a.isValidNot0(we))return;let Ue=a.inv(we),un=r.BASE.multiply(we).toAffine(),ks=a.create(un.x);if(ks===Gr)return;let Ko=a.create(Ue*a.create(Ce+ks*q));if(Ko===Gr)return;let ia=(un.x===ks?0:2)|Number(un.y&rs),aa=Ko;return L&&g(Ko)&&(aa=a.neg(Ko),ia^=1),new P(ks,aa,m?void 0:ia)}return{seed:X,k2sig:_e}}function b(S,x,R={}){let{seed:L,k2sig:A}=V(S,x,R);return T6(n.outputLen,a.BYTES,o)(L,A).toBytes(R.format)}function I(S,x,R,L={}){let{lowS:A,prehash:O,format:M}=V2(L,y);if(R=ce(R,void 0,"publicKey"),x=G(x,O),!Qs(S)){let q=S instanceof P?", use sig.toBytes()":"";throw new Error("verify expects Uint8Array signature"+q)}_(S,M);try{let q=P.fromBytes(S,M),J=r.fromBytes(R);if(A&&q.hasHighS())return!1;let{r:X,s:Ce}=q,_e=B(x),Re=a.inv(Ce),we=a.create(_e*Re),Ue=a.create(X*Re),un=r.BASE.multiplyUnsafe(we).add(J.multiplyUnsafe(Ue));return un.is0()?!1:a.create(un.x)===X}catch{return!1}}function T(S,x,R={}){let{prehash:L}=V2(R,y);return x=G(x,L),P.fromBytes(S,"recovered").recoverPublicKey(x).toBytes()}return Object.freeze({keygen:u,getPublicKey:d,getSharedSecret:f,utils:h,lengths:p,Point:r,sign:b,verify:I,recoverPublicKey:T,Signature:P,hash:n})}var G2={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt(1),a:BigInt(0),b:BigInt(7),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")},cv={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),basises:[[BigInt("0x3086d221a7d46bcde86c90e49284eb15"),-BigInt("0xe4437ed6010e88286f547fa90abfe4c3")],[BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),BigInt("0x3086d221a7d46bcde86c90e49284eb15")]]};var Tg=BigInt(2);function lv(r){let e=G2.p,t=BigInt(3),n=BigInt(6),s=BigInt(11),o=BigInt(22),i=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,u=l*l*r%e,d=Oe(u,t,e)*u%e,f=Oe(d,t,e)*u%e,h=Oe(f,Tg,e)*l%e,p=Oe(h,s,e)*h%e,y=Oe(p,o,e)*p%e,m=Oe(y,a,e)*y%e,g=Oe(m,c,e)*m%e,w=Oe(g,a,e)*y%e,v=Oe(w,t,e)*u%e,_=Oe(v,i,e)*p%e,P=Oe(_,n,e)*l%e,D=Oe(P,Tg,e);if(!z2.eql(z2.sqr(D),r))throw new Error("Cannot find square root");return D}var z2=si(G2.p,{sqrt:lv}),uv=xg(G2,{Fp:z2,endo:cv}),Tr=Ag(uv,cr);var Ig=32;function Cg(r,e,t){let n=at.digest(e instanceof Uint8Array?e:e.subarray());if(ui(n))return n.then(({digest:s})=>(t?.signal?.throwIfAborted(),Tr.sign(s,r,{prehash:!1,format:"der"}))).catch(s=>{throw s.name==="AbortError"?s:new Oa(String(s))});try{return Tr.sign(n.digest,r,{prehash:!1,format:"der"})}catch(s){throw new Oa(String(s))}}function _g(r,e,t,n){let s=at.digest(t instanceof Uint8Array?t:t.subarray());if(ui(s))return s.then(({digest:o})=>(n?.signal?.throwIfAborted(),Tr.verify(e,o,r,{prehash:!1,format:"der"}))).catch(o=>{throw o.name==="AbortError"?o:new Ba(String(o))});try{return n?.signal?.throwIfAborted(),Tr.verify(e,s.digest,r,{prehash:!1,format:"der"})}catch(o){throw new Ba(String(o))}}var Ga=class{type="secp256k1";raw;_key;constructor(e){this._key=Lg(e),this.raw=Rg(this._key)}toMultihash(){return Yt.digest(tt(this))}toCID(){return ie.createV1(114,this.toMultihash())}toString(){return ve.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:Y(this.raw,e.raw)}verify(e,t,n){return _g(this._key,t,e,n)}},Wa=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=Pg(e),this.publicKey=new Ga(t??kg(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:Y(this.raw,e.raw)}sign(e,t){return Cg(this.raw,e,t)}};function W2(r){return new Wa(r)}function j2(r){return new Ga(r)}async function Dg(){let r=dv();return new Wa(r)}function Rg(r){return Tr.Point.fromBytes(r).toBytes()}function Pg(r){try{return Tr.getPublicKey(r,!0),r}catch(e){throw new ca(String(e))}}function Lg(r){try{return Tr.Point.fromBytes(r),r}catch(e){throw new dn(String(e))}}function kg(r){try{return Tr.getPublicKey(r,!0)}catch(e){throw new ca(String(e))}}function dv(){return Tr.utils.randomSecretKey()}async function bu(r,e){if(r==="Ed25519")return sg();if(r==="secp256k1")return Dg();if(r==="RSA")return K2(fv(e));if(r==="ECDSA")return c6(hv(e));throw new gr}function Xe(r,e){let{Type:t,Data:n}=zr.decode(r),s=n??new Uint8Array;switch(t){case Pe.RSA:return U2(s,e);case Pe.Ed25519:return g2(s);case Pe.secp256k1:return j2(s);case Pe.ECDSA:return $0(s);default:throw new gr}}function Ng(r){let{Type:e,Data:t}=zr.decode(r.digest),n=t??new Uint8Array;switch(e){case Pe.Ed25519:return g2(n);case Pe.secp256k1:return j2(n);case Pe.ECDSA:return $0(n);default:throw new gr}}function tt(r){return zr.encode({Type:Pe[r.type],Data:r.raw})}function Og(r){let e=Ha.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Pe.RSA:return M2(t);case Pe.Ed25519:return m2(t);case Pe.secp256k1:return W2(t);case Pe.ECDSA:return n6(t);default:throw new gr}}function Bg(r){if(r.byteLength===Zt)return m2(r);if(r.byteLength===Ig)return W2(r);let e=ar(r),t=e[2]?.[0];if(t===U4||t===F4||t===$4)return F0(e);if(e.length>8)return gu(e);throw new E("Could not extract private key from raw bytes")}function ao(r){return Ha.encode({Type:Pe[r.type],Data:r.raw})}function fv(r){return r==null?2048:parseInt(r,10)}function hv(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 E("Unsupported curve, should be P-256, P-384 or P-521")}var Mg=Symbol.for("nodejs.util.inspect.custom"),pv=114,ja=class{type;multihash;publicKey;string;constructor(e){this.type=e.type,this.multihash=e.multihash,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[Hl]=!0;toString(){return this.string==null&&(this.string=ve.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return ie.createV1(pv,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return Y(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return Y(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[Mg](){return`PeerId(${this.toString()})`}},Ya=class extends ja{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},Qa=class extends ja{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},Xa=class extends ja{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},mv=2336,Za=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=Yt.digest(C(this.url))}[Mg](){return`PeerId(${this.url})`}[Hl]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return ie.createV1(mv,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=k(e)),e.toString()===this.toString())}};var gv=114,Ug=2336;function Be(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=Se(ve.decode(`z${r}`));else{if(r.startsWith("k51qzi5uqu5")||r.startsWith("kzwfwjn5ji4")||r.startsWith("k2k4r8")||r.startsWith("bafz"))return Rt(ie.parse(r));if(e==null)throw new E('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=Se(e.decode(r))}return Ge(t)}function Wr(r){if(r.type==="Ed25519")return new Qa({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new Xa({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new Ya({multihash:r.toCID().multihash,publicKey:r});throw new gr}function Fg(r){return Wr(r.publicKey)}function Ge(r){if(wv(r))return new Ya({multihash:r});if(yv(r))try{let e=Ng(r);if(e.type==="Ed25519")return new Qa({multihash:r,publicKey:e});if(e.type==="secp256k1")return new Xa({multihash:r,publicKey:e})}catch{let t=k(r.digest);return new Za(new URL(t))}throw new Ml("Supplied PeerID Multihash is invalid")}function Rt(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==gv&&r.code!==Ug)throw new Bl("Supplied PeerID CID is invalid");if(r.code===Ug){let e=k(r.multihash.digest);return new Za(new URL(e))}return Ge(r.multihash)}function yv(r){return r.code===Yt.code}function wv(r){return r.code===at.code}async function $g(r){if(r.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new E("Private network is enforced, but no protector was provided");return r}function Eu(r,e){if(typeof r=="string")return bv(r);if(typeof r=="number")return vv(r,e);throw new Error(`Value provided to ms() must be a string or number. value=${JSON.stringify(r)}`)}function bv(r){if(typeof r!="string"||r.length===0||r.length>100)throw new 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,s=parseFloat(t),o=n.toLowerCase();switch(o){case"years":case"year":case"yrs":case"yr":case"y":return s*315576e5;case"months":case"month":case"mo":return s*26298e5;case"weeks":case"week":case"w":return s*6048e5;case"days":case"day":case"d":return s*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return s*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return s*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return s*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return s;default:throw new Error(`Unknown unit "${o}" provided to ms.parse(). value=${JSON.stringify(r)}`)}}function Ev(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 xv(r){let e=Math.abs(r);return e>=315576e5?co(r,e,315576e5,"year"):e>=26298e5?co(r,e,26298e5,"month"):e>=6048e5?co(r,e,6048e5,"week"):e>=864e5?co(r,e,864e5,"day"):e>=36e5?co(r,e,36e5,"hour"):e>=6e4?co(r,e,6e4,"minute"):e>=1e3?co(r,e,1e3,"second"):`${r} ms`}function vv(r,e){if(typeof r!="number"||!Number.isFinite(r))throw new Error("Value provided to ms.format() must be of type number.");return e?.long?xv(r):Ev(r)}function co(r,e,t,n){let s=e>=t*1.5;return`${Math.round(r/t)} ${n}${s?"s":""}`}function Y2(r){t.debug=t,t.default=t,t.coerce=c,t.disable=o,t.enable=s,t.enabled=i,t.humanize=Eu,t.destroy=l,Object.keys(r).forEach(u=>{t[u]=r[u]}),t.names=[],t.skips=[],t.formatters={};function e(u){let d=0;for(let f=0;f<u.length;f++)d=(d<<5)-d+u.charCodeAt(f),d|=0;return t.colors[Math.abs(d)%t.colors.length]}t.selectColor=e;function t(u,d){let f,h=null,p,y;function m(...g){if(!m.enabled)return;let w=m,v=Number(new Date),_=v-(f||v);w.diff=_,w.prev=f,w.curr=v,f=v,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let P=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(B,N)=>{if(B==="%%")return"%";P++;let U=t.formatters[N];if(typeof U=="function"){let G=g[P];B=U.call(w,G),g.splice(P,1),P--}return B}),t.formatArgs.call(w,g),d?.onLog!=null&&d.onLog(...g),(w.log||t.log).apply(w,g)}return m.namespace=u,m.useColors=t.useColors(),m.color=t.selectColor(u),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,y=t.enabled(u)),y),set:g=>{h=g}}),typeof t.init=="function"&&t.init(m),m}function n(u,d){let f=t(this.namespace+(typeof d>"u"?":":d)+u);return f.log=this.log,f}function s(u){t.save(u),t.namespaces=u,t.names=[],t.skips=[];let d,f=(typeof u=="string"?u:"").split(/[\s,]+/),h=f.length;for(d=0;d<h;d++)f[d]&&(u=f[d].replace(/\*/g,".*?"),u[0]==="-"?t.skips.push(new RegExp("^"+u.substr(1)+"$")):t.names.push(new RegExp("^"+u+"$")))}function o(){let u=[...t.names.map(a),...t.skips.map(a).map(d=>"-"+d)].join(",");return t.enable(""),u}function i(u){if(u[u.length-1]==="*")return!0;let d,f;for(d=0,f=t.skips.length;d<f;d++)if(t.skips[d].test(u))return!1;for(d=0,f=t.names.length;d<f;d++)if(t.names[d].test(u))return!0;return!1}function a(u){return u.toString().substring(2,u.toString().length-2).replace(/\.\*\?$/,"*")}function c(u){return u instanceof Error?u.stack??u.message:u}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.setupFormatters(t.formatters),t.enable(t.load()),t}var xu=Rv(),Sv=["#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 Av(){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 Tv(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+Eu(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,s=>{s!=="%%"&&(t++,s==="%c"&&(n=t))}),r.splice(n,0,e)}var Iv=console.debug??console.log??(()=>{});function Cv(r){try{r?xu?.setItem("debug",r):xu?.removeItem("debug")}catch{}}function _v(){let r;try{r=xu?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function Rv(){try{return localStorage}catch{}}function Pv(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var Kg=Y2({formatArgs:Tv,save:Cv,load:_v,useColors:Av,setupFormatters:Pv,colors:Sv,storage:xu,log:Iv});var Ut=Kg;Ut.formatters.b=r=>r==null?"undefined":ve.baseEncode(r);Ut.formatters.t=r=>r==null?"undefined":ir.baseEncode(r);Ut.formatters.m=r=>r==null?"undefined":hn.baseEncode(r);Ut.formatters.p=r=>r==null?"undefined":r.toString();Ut.formatters.c=r=>r==null?"undefined":r.toString();Ut.formatters.k=r=>r==null?"undefined":r.toString();Ut.formatters.a=r=>r==null?"undefined":r.toString();function Vg(r,e=""){let t=Hg(r.message),n=Hg(r.stack);return t!=null&&n!=null?n.includes(t)?`${n.split(`
|
|
3
|
+
`).join(`
|
|
4
|
+
${e}`)}`:`${t}
|
|
5
|
+
${e}${n.split(`
|
|
6
|
+
`).join(`
|
|
7
|
+
${e}`)}`:n!=null?`${n.split(`
|
|
8
|
+
`).join(`
|
|
9
|
+
${e}`)}`:t!=null?`${t}`:`${r.toString()}`}function Lv(r){return r instanceof AggregateError||r?.name==="AggregateError"&&Array.isArray(r.errors)}function qg(r,e=""){if(Lv(r)){let t=Vg(r,e);return r.errors.length>0?(e=`${e} `,t+=`
|
|
10
|
+
${e}${r.errors.map(n=>`${qg(n,`${e}`)}`).join(`
|
|
11
|
+
${e}`)}`):t+=`
|
|
12
|
+
${e}[Error list was empty]`,t.trim()}return Vg(r,e)}Ut.formatters.e=r=>r==null?"undefined":qg(r);function kv(r){let e=()=>{};return e.enabled=!1,e.color="",e.diff=0,e.log=()=>{},e.namespace=r,e.destroy=()=>!0,e.extend=()=>e,e.useColors=()=>!1,e}function pi(r){return{forComponent(e){return zg(e,r)}}}function zg(r,e){let t=kv(`${r}:trace`);return Ut.enabled(`${r}:trace`)&&Ut.names.map(n=>n.toString()).find(n=>n.includes(":trace"))!=null&&(t=Ut(`${r}:trace`,e)),Object.assign(Ut(r,e),{error:Ut(`${r}:error`,e),trace:t,newScope:n=>zg(`${r}:${n}`,e)})}function Hg(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}function lo(r,e){let t={[Symbol.iterator]:()=>t,next:()=>{let n=r.next(),s=n.value;return n.done===!0||s==null?{done:!0,value:void 0}:{done:!1,value:e(s)}}};return t}function vu(r){let e=Se(ve.decode(`z${r}`));return Ge(e)}var xt=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 lo(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 lo(this.map.values(),e=>e.key)}values(){return lo(this.map.values(),e=>e.value)}get size(){return this.map.size}};var er=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 lo(this.set.entries(),e=>{let t=vu(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=vu(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return lo(this.set.values(),e=>vu(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 Q2(){return new er}var X2={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},Gg={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},Wg=new globalThis.TextEncoder;function Dv(r,e){let t=X2[e],n=Gg[e];for(let s=0;s<r.length;s++)n^=BigInt(r[s]),n=BigInt.asUintN(e,n*t);return n}function Nv(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=X2[e],s=Gg[e],o=r;for(;o.length>0;){let i=Wg.encodeInto(o,t);o=o.slice(i.read);for(let a=0;a<i.written;a++)s^=BigInt(t[a]),s=BigInt.asUintN(e,s*n)}return s}function Z2(r,{size:e=32,utf8Buffer:t}={}){if(!X2[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 Nv(r,e,t);r=Wg.encode(r)}return Dv(r,e)}var Ja={hash:r=>Number(Z2(r,{size:32})),hashV:(r,e)=>Ov(Ja.hash(r,e))};function Ov(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),C(e,"base16")}var J2=64,Ir=class{fp;h;seed;constructor(e,t,n,s=2){if(s>J2)throw new TypeError("Invalid Fingerprint Size");let o=t.hashV(e,n),i=z(s);for(let a=0;a<i.length;a++)i[a]=o[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?Y(this.fp,e.fp):!1}};function uo(r,e){return Math.floor(Math.random()*(e-r))+r}var fo=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof Ir))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof Ir))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 Ir))throw new TypeError("Invalid Fingerprint");let t=uo(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof Ir))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var Bv=500,ec=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??Ja,this.seed=e.seed??uo(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=C(e));let t=new Ir(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,s=(n^t.hash())%this.filterSize;if(this.buckets[n]==null&&(this.buckets[n]=new fo(this.bucketSize)),this.buckets[s]==null&&(this.buckets[s]=new fo(this.bucketSize)),this.buckets[n].add(t)||this.buckets[s].add(t))return this.count++,!0;let o=[n,s],i=o[uo(0,o.length-1)];this.buckets[i]==null&&(this.buckets[i]=new fo(this.bucketSize));for(let a=0;a<Bv;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 fo(this.bucketSize)),this.buckets[i].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=C(e));let t=new Ir(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,s=this.buckets[n]?.has(t)??!1;if(s)return s;let o=(n^t.hash())%this.filterSize;return this.buckets[o]?.has(t)??!1}remove(e){typeof e=="string"&&(e=C(e));let t=new Ir(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,s=this.buckets[n]?.remove(t)??!1;if(s)return this.count--,s;let o=(n^t.hash())%this.filterSize,i=this.buckets[o]?.remove(t)??!1;return i&&this.count--,i}get reliable(){return Math.floor(100*(this.count/this.filterSize))<=90}},Mv={1:.5,2:.84,4:.95,8:.98};function Uv(r=.001){return r>.002?2:r>1e-5?4:8}function jg(r,e=.001){let t=Uv(e),n=Mv[t],s=Math.round(r/n),o=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),J2);return{filterSize:s,bucketSize:t,fingerprintSize:o}}var Su=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??Ja,this.seed=e.seed??uo(0,Math.pow(2,10)),this.filterSeries=[new ec({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 ec({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 Ft(r,e=.001,t){return new Su({...jg(r,e),...t??{}})}function ep(r){let e=r.getComponents(),t={},n=0;return 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?null:(e[n]?.name==="tls"&&e[n+1]?.name==="sni"&&(t.sni=e[n+1].value,n+=2),t)}function Q(r){let e=ep(r);if(e==null)throw new E(`Multiaddr ${r} was not an IPv4, IPv6, DNS, DNS4, DNS6 or DNSADDR address`);return e}var Au=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,s){return this.readAtomically(()=>{let o=0,i=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*s)-1;for(;;){let u=this.readAtomically(()=>{let d=this.readChar();if(d===void 0)return;let f=Number.parseInt(d,e);if(!Number.isNaN(f))return f});if(u===void 0)break;if(o*=e,o+=u,o>l||(i+=1,t!==void 0&&i>t))return}if(i!==0)return!n&&c&&i>1?void 0:o})}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 s=n*2;if(n<t.length-3){let i=this.readSeparator(":",n,()=>this.readIPv4Addr());if(i!==void 0)return t[s]=i[0],t[s+1]=i[1],t[s+2]=i[2],t[s+3]=i[3],[s+4,!0]}let o=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(o===void 0)return[s,!1];t[s]=o>>8,t[s+1]=o&255}return[t.length,!1]};return this.readAtomically(()=>{let t=new Uint8Array(16),[n,s]=e(t);if(n===16)return t;if(s||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let o=new Uint8Array(14),i=16-(n+2),[a]=e(o.subarray(0,i));return t.set(o.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var Yg=45,Fv=15,mi=new Au;function Tu(r){if(!(r.length>Fv))return mi.new(r).parseWith(()=>mi.readIPv4Addr())}function Iu(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>Yg))return mi.new(r).parseWith(()=>mi.readIPv6Addr())}function gi(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>Yg)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 Qg(r,e,t){let n=0;for(let s of r)if(!(n<e)){if(n>t)break;if(s!==255)return!1;n++}return!0}function Xg(r,e,t,n){let s=0;for(let o of r)if(!(s<t)){if(s>n)break;if(o!==e[s])return!1;s++}return!0}function tp(r){switch(r.length){case ho:return r.join(".");case po:{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 Zg(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 s=t+1;s<r.length;s++)if(r[s]!=0)return-1;break}return e}function Jg(r){let e="0x";for(let t of r)e+=(t>>4).toString(16)+(t&15).toString(16);return e}var ho=4,po=16,iO=parseInt("0xFFFF",16),$v=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function tc(r,e){e.length===po&&r.length===ho&&Qg(e,0,11)&&(e=e.slice(12)),e.length===ho&&r.length===po&&Xg(r,$v,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 s=0;s<t;s++)n[s]=r[s]&e[s];return n}function e5(r,e){if(typeof e=="string"&&(e=gi(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 rp(r){let[e,t]=r.split("/");if(!e||!t)throw new Error("Failed to parse given CIDR: "+r);let n=ho,s=Tu(e);if(s==null&&(n=po,s=Iu(e),s==null))throw new Error("Failed to parse given CIDR: "+r);let o=parseInt(t,10);if(Number.isNaN(o)||String(o).length!==t.length||o<0||o>n*8)throw new Error("Failed to parse given CIDR: "+r);let i=np(o,8*n);return{network:tc(s,i),mask:i}}function np(r,e){if(e!==8*ho&&e!==8*po)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 s=0;s<t;s++){if(r>=8){n[s]=255,r-=8;continue}n[s]=255-(255>>r),r=0}return n}var mo=class{constructor(e,t){if(t==null)({network:this.network,mask:this.mask}=rp(e));else{let n=gi(e);if(n==null)throw new Error("Failed to parse network");t=String(t);let s=parseInt(t,10);if(Number.isNaN(s)||String(s).length!==t.length||s<0||s>n.length*8){let o=gi(t);if(o==null)throw new Error("Failed to parse mask");this.mask=o}else this.mask=np(s,8*n.length);this.network=tc(n,this.mask)}}contains(e){return e5({network:this.network,mask:this.mask},e)}toString(){let e=Zg(this.mask),t=e!==-1?String(e):Jg(this.mask);return tp(this.network)+"/"+t}};function t5(r,e){return new mo(r).contains(e)}function Cu(r){try{let e=Q(r);return e.type==="ip6"?t5("2000::/3",e.host):!1}catch{return!1}}function r5(r){try{let e=Q(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 n5(r){return/^127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(r)||/^::1$/.test(r)}function rc(r){try{let e=Q(r);switch(e.type){case"ip4":case"ip6":return n5(e.host);default:return!1}}catch{return!1}}function dt(r){return ep(r)!==null}function Cr(r){return!!Tu(r)}function _u(r){return!!Iu(r)}var a5=Vo(i5(),1),Wv=["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"],jv=Wv.map(r=>new a5.Netmask(r));function up(r){for(let e of jv)if(e.contains(r))return!0;return!1}function Yv(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function Qv(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"),s=`${parseInt(n.substring(0,2),16)}.${parseInt(n.substring(2),16)}.${parseInt(t.substring(0,2),16)}.${parseInt(t.substring(2),16)}`;return up(s)}function Xv(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function Zv(r){let e=r.split(":"),t=e[e.length-1];return up(t)}function Jv(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 Ei(r){if(Cr(r))return up(r);if(Yv(r))return Qv(r);if(Xv(r))return Zv(r);if(_u(r))return Jv(r)}function We(r){try{let e=Q(r);switch(e.type){case"ip4":case"ip6":return Ei(e.host)??!1;default:return e.host==="localhost"}}catch{return!1}}function ss(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}function _r(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=de(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return Gl(t)}var ft=class extends Error{static name="InvalidMultiaddrError";name="InvalidMultiaddrError"},xn=class extends Error{static name="ValidationError";name="ValidationError"},Pu=class extends Error{static name="InvalidParametersError";name="InvalidParametersError"},Lu=class extends Error{static name="UnknownProtocolError";name="UnknownProtocolError"};function fp(r){return e=>k(e,r)}function hp(r){return e=>C(e,r)}function xi(r){return new DataView(r.buffer).getUint16(r.byteOffset).toString()}function yo(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,typeof r=="string"?parseInt(r):r),new Uint8Array(e)}function c5(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 s=yo(n);return Le([t,s],t.length+s.length)}function l5(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=ir.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 s=yo(n);return Le([t,s],t.length+s.length)}function pp(r){let e=r.subarray(0,r.length-2),t=r.subarray(r.length-2),n=k(e,"base32"),s=xi(t);return`${n}:${s}`}var mp=function(r){r=r.toString().trim();let e=new Uint8Array(4);return r.split(/\./g).forEach((t,n)=>{let s=parseInt(t,10);if(isNaN(s)||s<0||s>255)throw new ft("Invalid byte value in IP address");e[n]=s}),e},u5=function(r){let e=0;r=r.toString().trim();let t=r.split(":",8),n;for(n=0;n<t.length;n++){let o=Cr(t[n]),i;o&&(i=mp(t[n]),t[n]=k(i.subarray(0,2),"base16")),i!=null&&++n<8&&t.splice(n,0,k(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 o=[n,1];for(n=9-t.length;n>0;n--)o.push("0");t.splice.apply(t,o)}let s=new Uint8Array(e+16);for(n=0;n<t.length;n++){t[n]===""&&(t[n]="0");let o=parseInt(t[n],16);if(isNaN(o)||o<0||o>65535)throw new ft("Invalid byte value in IP address");s[e++]=o>>8&255,s[e++]=o&255}return s},d5=function(r){if(r.byteLength!==4)throw new ft("IPv4 address was incorrect length");let e=[];for(let t=0;t<r.byteLength;t++)e.push(r[t]);return e.join(".")},f5=function(r){if(r.byteLength!==16)throw new ft("IPv6 address was incorrect length");let e=[];for(let n=0;n<r.byteLength;n+=2){let s=r[n],o=r[n+1],i=`${s.toString(16).padStart(2,"0")}${o.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 ft(`Invalid IPv6 address "${t}"`)}};function h5(r){try{let e=new URL(`http://[${r}]`);return e.hostname.substring(1,e.hostname.length-1)}catch{throw new ft(`Invalid IPv6 address "${r}"`)}}var dp=Object.values(Hs).map(r=>r.decoder),eS=(function(){let r=dp[0].or(dp[1]);return dp.slice(2).forEach(e=>r=r.or(e)),r})();function p5(r){return eS.decode(r)}function m5(r){return e=>r.encoder.encode(e)}function tS(r){if(parseInt(r).toString()!==r)throw new xn("Value must be an integer")}function rS(r){if(r<0)throw new xn("Value must be a positive integer, or zero")}function nS(r){return e=>{if(e>r)throw new xn(`Value must be smaller than or equal to ${r}`)}}function sS(...r){return e=>{for(let t of r)t(e)}}var nc=sS(tS,rS,nS(65535));var nt=-1,gp=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 Lu(`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)}))}},Sn=new gp,wS=[{code:4,name:"ip4",size:32,valueToBytes:mp,bytesToValue:d5,validate:r=>{if(!Cr(r))throw new xn(`Invalid IPv4 address "${r}"`)}},{code:6,name:"tcp",size:16,valueToBytes:yo,bytesToValue:xi,validate:nc},{code:273,name:"udp",size:16,valueToBytes:yo,bytesToValue:xi,validate:nc},{code:33,name:"dccp",size:16,valueToBytes:yo,bytesToValue:xi,validate:nc},{code:41,name:"ip6",size:128,valueToBytes:u5,bytesToValue:f5,stringToValue:h5,validate:r=>{if(!_u(r))throw new xn(`Invalid IPv6 address "${r}"`)}},{code:42,name:"ip6zone",size:nt},{code:43,name:"ipcidr",size:8,bytesToValue:fp("base10"),valueToBytes:hp("base10")},{code:53,name:"dns",size:nt},{code:54,name:"dns4",size:nt},{code:55,name:"dns6",size:nt},{code:56,name:"dnsaddr",size:nt},{code:132,name:"sctp",size:16,valueToBytes:yo,bytesToValue:xi,validate:nc},{code:301,name:"udt"},{code:302,name:"utp"},{code:400,name:"unix",size:nt,stringToValue:r=>decodeURIComponent(r),valueToString:r=>encodeURIComponent(r)},{code:421,name:"p2p",aliases:["ipfs"],size:nt,bytesToValue:fp("base58btc"),valueToBytes:r=>r.startsWith("Q")||r.startsWith("1")?hp("base58btc")(r):ie.parse(r).multihash.bytes},{code:444,name:"onion",size:96,bytesToValue:pp,valueToBytes:c5},{code:445,name:"onion3",size:296,bytesToValue:pp,valueToBytes:l5},{code:446,name:"garlic64",size:nt},{code:447,name:"garlic32",size:nt},{code:448,name:"tls"},{code:449,name:"sni",size:nt},{code:454,name:"noise"},{code:460,name:"quic"},{code:461,name:"quic-v1"},{code:465,name:"webtransport"},{code:466,name:"certhash",size:nt,bytesToValue:m5(ya),valueToBytes:p5},{code:480,name:"http"},{code:481,name:"http-path",size:nt,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:nt}];wS.forEach(r=>{Sn.addProtocol(r)});function g5(r){let e=[],t=0;for(;t<r.length;){let n=vr(r,t),s=Sn.getProtocol(n),o=ge(n),i=bS(s,r,t+o),a=0;i>0&&s.size===nt&&(a=ge(i));let c=o+a+i,l={code:n,name:s.name,bytes:ae(r.subarray(t,t+c))};if(i>0){let u=t+o+a,d=r.subarray(u,u+i);l.value=s.bytesToValue?.(d)??k(d)}e.push(l),t+=c}return e}function y5(r){let e=0,t=[];for(let n of r){if(n.bytes==null){let s=Sn.getProtocol(n.code),o=ge(n.code),i,a=0,c=0;n.value!=null&&(i=s.valueToBytes?.(n.value)??C(n.value),a=i.byteLength,s.size===nt&&(c=ge(a)));let l=new Uint8Array(o+c+a),u=0;es(n.code,l,u),u+=o,i!=null&&(s.size===nt&&(es(a,l,u),u+=c),l.set(i,u)),n.bytes=l}t.push(n.bytes),e+=n.bytes.byteLength}return Le(t,e)}function w5(r){if(r.charAt(0)!=="/")throw new ft('String multiaddr must start with "/"');let e=[],t="protocol",n="",s="";for(let o=1;o<r.length;o++){let i=r.charAt(o);i!=="/"&&(t==="protocol"?s+=r.charAt(o):n+=r.charAt(o));let a=o===r.length-1;if(i==="/"||a){let c=Sn.getProtocol(s);if(t==="protocol"){if(c.size==null||c.size===0){e.push({code:c.code,name:c.name}),n="",s="",t="protocol";continue}else if(a)throw new ft(`Component ${s} 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 ft(`Component ${s} was missing value`);l.value=c.stringToValue?.(n)??n}e.push(l),n="",s="",t="protocol"}}}if(s!==""&&n!=="")throw new ft("Incomplete multiaddr");return e}function b5(r){return`/${r.flatMap(e=>{if(e.value==null)return e.name;let t=Sn.getProtocol(e.code);if(t==null)throw new ft(`Unknown protocol code ${e.code}`);return[e.name,t.valueToString?.(e.value)??e.value]}).join("/")}`}function bS(r,e,t){return r.size==null||r.size===0?0:r.size>0?r.size/8:vr(e,t)}var ES=Symbol.for("nodejs.util.inspect.custom"),Tp=Symbol.for("@multiformats/multiaddr");function xS(r){if(r==null&&(r="/"),Qr(r))return r.getComponents();if(r instanceof Uint8Array)return g5(r);if(typeof r=="string")return r=r.replace(/\/(\/)+/,"/").replace(/(\/)+$/,""),r===""&&(r="/"),w5(r);if(Array.isArray(r))return r;throw new ft("Must be a string, Uint8Array, Component[], or another Multiaddr")}var Bu=class r{[Tp]=!0;#e;#t;#r;constructor(e="/",t={}){this.#e=xS(e),t.validate!==!1&&vS(this)}get bytes(){return this.#r==null&&(this.#r=y5(this.#e)),this.#r}toString(){return this.#t==null&&(this.#t=b5(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(),s=n.lastIndexOf(t);if(s<0)throw new Pu(`Address ${this.toString()} does not contain subaddress: ${t}`);return new r(n.slice(0,s),{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 Y(this.bytes,e.bytes)}[ES](){return`Multiaddr(${this.toString()})`}};function vS(r){r.getComponents().forEach(e=>{let t=Sn.getProtocol(e.code);e.value!=null&&t.validate?.(e.value)})}function Qr(r){return!!r?.[Tp]}function F(r){return new Bu(r)}var Te=r=>({match:e=>{let t=e[0];return t==null||t.code!==r||t.value!=null?!1:e.slice(1)}}),j=(r,e)=>({match:t=>{let n=t[0];return n?.code!==r||n.value==null||e!=null&&n.value!==e?!1:t.slice(1)}}),E5=r=>({match:e=>r.match(e)===!1?e:!1}),le=r=>({match:e=>{let t=r.match(e);return t===!1?e:t}}),vt=(...r)=>({match:e=>{let t;for(let n of r){let s=n.match(e);s!==!1&&(t==null||s.length<t.length)&&(t=s)}return t??!1}}),pe=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e}});function Ie(...r){function e(s){if(s==null)return!1;let o=s.getComponents();for(let i of r){let a=i.match(o);if(a===!1)return!1;o=a}return o}function t(s){return e(s)!==!1}function n(s){let o=e(s);return o===!1?!1:o.length===0}return{matchers:r,matches:t,exactMatch:n}}var SS=j(421),x5=Ie(SS),Uu=j(54),Fu=j(55),$u=j(56),Cp=j(53),WB=Ie(Uu,le(j(421))),jB=Ie(Fu,le(j(421))),YB=Ie($u,le(j(421))),v5=Ie(vt(Cp,$u,Uu,Fu),le(j(421))),S5=pe(j(4),le(j(43))),A5=pe(le(j(42)),j(41),le(j(43))),_p=vt(S5,A5),Ti=vt(_p,Cp,Uu,Fu,$u),T5=Ie(vt(_p,pe(vt(Cp,$u,Uu,Fu),le(j(421))))),Rp=Ie(S5),Pp=Ie(A5),I5=Ie(_p),Lp=pe(Ti,j(6)),lc=pe(Ti,j(273)),bo=Ie(pe(Lp,le(j(421)))),QB=Ie(lc),kp=pe(lc,Te(460),le(j(421))),Ku=pe(lc,Te(461),le(j(421))),AS=vt(kp,Ku),XB=Ie(kp),C5=Ie(Ku),Ip=vt(Ti,Lp,lc,kp,Ku),_5=vt(pe(Ip,Te(477),le(j(421)))),An=Ie(_5),R5=vt(pe(Ip,Te(478),le(j(421))),pe(Ip,Te(448),le(j(449)),Te(477),le(j(421)))),Eo=Ie(R5),P5=pe(lc,Te(280),le(j(466)),le(j(466)),le(j(421))),uc=Ie(P5),L5=pe(Ku,Te(465),le(j(466)),le(j(466)),le(j(421))),Dp=Ie(L5),Mu=vt(_5,R5,pe(Lp,le(j(421))),pe(AS,le(j(421))),pe(Ti,le(j(421))),P5,L5,j(421)),Ii=Ie(Mu),TS=pe(le(Mu),Te(290),E5(Te(281)),le(j(421))),st=Ie(TS),IS=vt(pe(Mu,Te(290),Te(281),le(j(421))),pe(Mu,Te(281),le(j(421))),pe(Te(281),le(j(421)))),dc=Ie(IS),CS=pe(Ti,vt(pe(j(6,"80")),pe(j(6),Te(480)),Te(480)),le(j(481)),le(j(421))),ZB=Ie(CS),_S=pe(Ti,vt(pe(j(6,"443")),pe(j(6,"443"),Te(480)),pe(j(6),Te(443)),pe(j(6),Te(448),Te(480)),pe(Te(448),Te(480)),Te(448),Te(443)),le(j(481)),le(j(421))),JB=Ie(_S),RS=vt(pe(j(777),le(j(421)))),eM=Ie(RS),PS=vt(pe(j(400),le(j(421)))),tM=Ie(PS);function k5(r,e){let t=bo.exactMatch(r),n=bo.exactMatch(e);if(t&&!n)return-1;if(!t&&n)return 1;let s=Eo.exactMatch(r),o=Eo.exactMatch(e);if(s&&!o)return-1;if(!s&&o)return 1;let i=An.exactMatch(r),a=An.exactMatch(e);if(i&&!a)return-1;if(!i&&a)return 1;let c=dc.exactMatch(r),l=dc.exactMatch(e);if(c&&!l)return-1;if(!c&&l)return 1;let u=uc.exactMatch(r),d=uc.exactMatch(e);if(u&&!d)return-1;if(!u&&d)return 1;let f=Dp.exactMatch(r),h=Dp.exactMatch(e);return f&&!h?-1:!f&&h?1:0}function D5(r,e){let t=rc(r),n=rc(e);return t&&!n?1:!t&&n?-1:0}function N5(r,e){let t=We(r),n=We(e);return t&&!n?1:!t&&n?-1:0}function O5(r,e){let t=st.exactMatch(r),n=st.exactMatch(e);return t&&!n?1:!t&&n?-1:0}function qe(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var Vu=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}},Ci=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new Vu(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 Vu(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 Np=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function Pt(r={}){return LS(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 LS(r,e){e=e??{};let t=e.onEnd,n=new Ci,s,o,i,a=qe(),c=async()=>{try{return n.isEmpty()?i?{done:!0}:await new Promise((m,g)=>{o=w=>{o=null,n.push(w);try{m(r(n))}catch(v){g(v)}return s}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=qe()})}},l=m=>o!=null?o(m):(n.push(m),s),u=m=>(n=new Ci,o!=null?o({error:m}):(n.push({error:m}),s)),d=m=>{if(i)return s;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?s:(i=!0,m!=null?u(m):l({done:!0})),h=()=>(n=new Ci,f(),{done:!0}),p=m=>(f(m),{done:!0});if(s={[Symbol.asyncIterator](){return this},next:c,return:h,throw:p,push:d,end:f,get readableLength(){return n.size},onEmpty:async m=>{let g=m?.signal;if(g?.throwIfAborted(),n.isEmpty())return;let w,v;g!=null&&(w=new Promise((_,P)=>{v=()=>{P(new Np)},g.addEventListener("abort",v)}));try{await Promise.race([a.promise,w])}finally{v!=null&&g!=null&&g?.removeEventListener("abort",v)}}},t==null)return s;let y=s;return s={[Symbol.asyncIterator](){return this},next(){return y.next()},throw(m){return y.throw(m),t!=null&&(t(m),t=void 0),{done:!0}},return(){return y.return(),t!=null&&(t(),t=void 0),{done:!0}},push:d,end(m){return y.end(m),t!=null&&(t(m),t=void 0),s},get readableLength(){return y.readableLength},onEmpty:m=>y.onEmpty(m)},s}var Op=class r extends Error{name="TimeoutError";constructor(e,t){super(e,t),Error.captureStackTrace?.(this,r)}},B5=r=>r.reason??new DOMException("This operation was aborted.","AbortError");function Lt(r,e){let{milliseconds:t,fallback:n,message:s,customTimers:o={setTimeout,clearTimeout},signal:i}=e,a,c,u=new Promise((d,f)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(i?.aborted){f(B5(i));return}if(i&&(c=()=>{f(B5(i))},i.addEventListener("abort",c,{once:!0})),r.then(d,f),t===Number.POSITIVE_INFINITY)return;let h=new Op;a=o.setTimeout.call(void 0,()=>{if(n){try{d(n())}catch(p){f(p)}return}typeof r.cancel=="function"&&r.cancel(),s===!1?d():s instanceof Error?f(s):(h.message=s??`Promise timed out after ${t} milliseconds`,f(h))},t)}).finally(()=>{u.clear(),c&&i&&i.removeEventListener("abort",c)});return u.clear=()=>{o.clearTimeout.call(void 0,a),a=void 0},u}var kS=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 DS(r,e,t){let n,s=new Promise((o,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:u}=kS(r),d=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(y){n(),i(y);return}c.push(p),t.count===c.length&&(n(),o(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)u(h,d);for(let h of t.rejectionEvents)a.includes(h)||u(h,f)};for(let h of a)l(h,d);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&o(c)});if(s.cancel=n,typeof t.timeout=="number"){let o=Lt(s,{milliseconds:t.timeout});return o.cancel=()=>{n(),o.clear()},o}return s}function lr(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=DS(r,e,t),s=n.then(o=>o[0]);return s.cancel=n.cancel,s}function Tn(r,e){let t,n=function(){let s=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(s,e)};return n.start=()=>{},n.stop=()=>{clearTimeout(t)},n}var Hu=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}},qu=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}},xo=class extends Error{static name="UnexpectedEOFError";name="UnexpectedEOFError"},zu=class extends Error{static name="MaxEarlyStreamsError";name="MaxEarlyStreamsError"},Gu=class extends Error{static name="StreamClosedError";name="StreamClosedError"};function NS(r){return r.reason}async function De(r,e,t){if(e==null)return r;let n=t?.translateError??NS;if(e.aborted)return r.catch(()=>{}),Promise.reject(n(e));let s;try{return await Promise.race([r,new Promise((o,i)=>{s=()=>{i(n(e))},e.addEventListener("abort",s)})])}finally{s!=null&&e.removeEventListener("abort",s)}}var Wu=class{deferred;signal;onProgress;constructor(e){this.signal=e?.signal,this.onProgress=e?.onProgress,this.deferred=qe(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new Wt)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function OS(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var ju=class{id;fn;options;recipients;status;timeline;controller;dispatchingProgress;constructor(e,t){this.id=OS(),this.status="queued",this.fn=e,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,this.controller.signal,this.dispatchingProgress=!1,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 Wt),this.cleanup())}async join(e){let t=new Wu(e);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 De(this.fn({...this.options??{},signal:this.controller.signal,onProgress:t=>{if(!this.dispatchingProgress){this.dispatchingProgress=!0;try{this.recipients.forEach(n=>{n.onProgress?.(t)})}finally{this.dispatchingProgress=!1}}}}),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 $t=class extends oe{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=Tn(this.emitEmpty.bind(this),1),this.emitIdle=Tn(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 qu;let n=new ju(e,t);this.enqueue(n),this.safeDispatchEvent("add");let s=n.join(t).then(o=>(this.safeDispatchEvent("completed",{detail:o}),this.safeDispatchEvent("success",{detail:{job:n,result:o}}),o)).catch(o=>{if(n.status==="queued"){for(let i=0;i<this.queue.length;i++)if(this.queue[i]===n){this.queue.splice(i,1);break}}throw this.safeDispatchEvent("failure",{detail:{job:n,error:o}}),o});return this.tryToStartAnother(),s}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new Wt)}),this.clear()}async onEmpty(e){this.size!==0&&await lr(this,"empty",e)}async onSizeLessThan(e,t){this.size<e||await lr(this,"next",{...t,filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await lr(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=Pt({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},s=c=>{c.detail!=null&&t.push(c.detail)},o=c=>{n(c.detail.error)},i=()=>{n()},a=()=>{n(new Wt("Queue aborted"))};this.addEventListener("completed",s),this.addEventListener("failure",o),this.addEventListener("idle",i),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",s),this.removeEventListener("failure",o),this.removeEventListener("idle",i),e?.signal?.removeEventListener("abort",a),n()}}};var BS=Math.pow(2,20)*4,is=class extends oe{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??BS,this.maxWriteBufferLength=e.maxWriteBufferLength,this.maxMessageSize=e.maxMessageSize,this.readBuffer=new W,this.writeBuffer=new W,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,queueMicrotask(()=>{try{this.processSendQueue()}catch(s){this.log.error("processSendQueue threw - %e",s)}})),this.onDrainPromise?.resolve()};this.addEventListener("drain",t);let n=s=>{this.onDrainPromise?.reject(s.error??new Gu)};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()),De(this.onDrainPromise.promise,e?.signal))}async*[Symbol.asyncIterator](){if(this.readStatus!=="readable"&&this.readStatus!=="paused")return;let e=Pt(),t=o=>{e.push(o.data)};this.addEventListener("message",t);let n=o=>{e.end(o.error)};this.addEventListener("close",n);let s=()=>{e.end()};this.addEventListener("remoteCloseWrite",s);try{yield*e}finally{this.removeEventListener("message",t),this.removeEventListener("close",n),this.removeEventListener("remoteCloseWrite",s)}}isReadable(){return this.status==="open"}send(e){if(this.writeStatus==="closed"||this.writeStatus==="closing")throw new Fr(`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 Kl(e))}}pause(){if(this.readStatus==="closed"||this.readStatus==="closing")throw new Fr("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 Fr("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 Fr(`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 Fr(`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 qo;this.dispatchEvent(new Vl(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 Hn))}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;if(this.writeStatus!=="writable"&&this.writeStatus!=="closing")return this.log.trace("not processing send queue as stream is %s",this.writeStatus),!1;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 s=Math.min(this.maxMessageSize??this.writeBuffer.byteLength,this.writeBuffer.byteLength);if(s===0){e=!1;break}let o=this.writeBuffer.sublist(0,s),i=new W(o);this.writeBuffer.consume(o.byteLength);let a;try{a=this.sendData(o)}catch(c){throw this.writeBuffer.prepend(i),this.abort(c),c}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 $l(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 ua(`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 ua(`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 as=class extends is{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 lr(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 lr(this,"drain",{...e,rejectionEvents:["close"]})),await this.sendClose(e),this.onTransportClosed())}};function Yu(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var cs=class extends oe{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 s=()=>{this.log("underlying stream drained, signal %d streams to continue writing",this.streams.length),this.streams.forEach(i=>{i.onMuxerDrain()})};this.maConn.addEventListener("drain",s);let o=()=>{this.log("underlying stream closed with status %s and %d streams",this.status,this.streams.length),this.onTransportClosed()};this.maConn.addEventListener("close",o)}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 De(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 pr;let t=this.onCreateStream({...this.streamOptions,...e});return Yu(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 zu(`Too many early streams were opened - ${this.earlyStreams.length}/${this.maxEarlyStreams}`));return}this.safeDispatchEvent("stream",{detail:e})}cleanUpStream(e){let t=n=>{let s=this.streams.findIndex(o=>o===e);s!==-1&&this.streams.splice(s,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 ls=class extends is{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 lr(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 lr(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 me(r){let e=new globalThis.AbortController;function t(){let o=r.filter(i=>i?.aborted===!0).map(i=>i?.reason).pop();e.abort(o);for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}for(let o of r){if(o?.aborted===!0){t();break}o?.addEventListener!=null&&o.addEventListener("abort",t)}function n(){for(let o of r)o?.removeEventListener!=null&&o.removeEventListener("abort",t)}let s=e.signal;return s.clear=n,s}var _i=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),s=e-this.movingAverage,o=n*s;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+s*o),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*s}else this.movingAverage=e;this.previousTime=t}};var MS=1.2,US=2,FS=5e3,$S=6e4,KS=5e3,Lr=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;maxTimeout;constructor(e={}){let t=e.interval??KS;this.success=new _i(t),this.failure=new _i(t),this.next=new _i(t),this.failureMultiplier=e.failureMultiplier??US,this.timeoutMultiplier=e.timeoutMultiplier??MS,this.minTimeout=e.minTimeout??FS,this.maxTimeout=e.maxTimeout??$S,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),s=me([e.signal,n]);return s.start=Date.now(),s.timeout=t,s}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 Bp=class{readNext;haveNext;ended;nextResult;error;constructor(){this.ended=!1,this.readNext=qe(),this.haveNext=qe()}[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=qe(),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=qe(),await De(this.readNext.promise,t?.signal,t)}};function M5(){return new Bp}function VS(r){return r[Symbol.asyncIterator]!=null}async function HS(r,e,t){try{await Promise.all(r.map(async n=>{for await(let s of n)await e.push(s,{signal:t}),t.throwIfAborted()})),await e.end(void 0,{signal:t})}catch(n){await e.end(n,{signal:t}).catch(()=>{})}}async function*qS(r){let e=new AbortController,t=M5();HS(r,t,e.signal).catch(()=>{});try{yield*t}finally{e.abort()}}function*zS(r){for(let e of r)yield*e}function GS(...r){let e=[];for(let t of r)VS(t)||e.push(t);return e.length===r.length?zS(e):qS(r)}var In=GS;function fc(r,...e){if(r==null)throw new Error("Empty pipeline");if(Mp(r)){let n=r;r=()=>n.source}else if(F5(r)||U5(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&Mp(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++)Mp(t[n])&&(t[n]=jS(t[n]));return WS(...t)}var WS=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},U5=r=>r?.[Symbol.asyncIterator]!=null,F5=r=>r?.[Symbol.iterator]!=null,Mp=r=>r==null?!1:r.sink!=null&&r.source!=null,jS=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=Pt({objectMode:!0});t.then(()=>{n.end()},i=>{n.end(i)});let s,o=r.source;if(U5(o))s=async function*(){yield*o,n.end()};else if(F5(o))s=function*(){yield*o,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return In(n,s())}return r.source};var YS=4194304,Qu=class extends Error{static name="UnwrappedError";name="UnwrappedError"},hc=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Fp=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},$p=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function QS(r){return typeof r?.closeRead=="function"}function XS(r){return typeof r?.close=="function"}function Up(r){return QS(r)?r.remoteWriteStatus!=="writable"&&r.readBufferLength===0:XS(r)?r.status!=="open":!1}function ZS(r){return r?.addEventListener!=null&&r?.removeEventListener!=null&&r?.send!=null&&r?.push!=null&&r?.log!=null}function Xu(r,e){let t=e?.maxBufferSize??YS,n=new W,s,o=!1;if(!ZS(r))throw new E("Argument should be a Stream or a Multiaddr");let i=u=>{if(n.append(u.data),n.byteLength>t){let d=n.byteLength;n.consume(n.byteLength),s?.reject(new Error(`Read buffer overflow - ${d} > ${t}`))}s?.resolve()};r.addEventListener("message",i);let a=u=>{u.error!=null?s?.reject(u.error):s?.resolve()};r.addEventListener("close",a);let c=()=>{s?.resolve()};r.addEventListener("remoteCloseWrite",c);let l={readBuffer:n,async read(u){if(o===!0)throw new Qu("Stream was unwrapped");if(Up(r)){if(n.byteLength===0&&u?.bytes==null)return null;if(u?.bytes!=null&&n.byteLength<u.bytes)throw r.log.error("closed after reading %d/%d bytes",n.byteLength,u.bytes),new xo(`Unexpected EOF - stream closed after reading ${n.byteLength}/${u.bytes} bytes`)}let d=u?.bytes??1;for(s=Promise.withResolvers();;){if(n.byteLength>=d){s.resolve();break}if(await De(s.promise,u?.signal),Up(r)){if(n.byteLength===0&&u?.bytes==null)return null;break}s=Promise.withResolvers()}let f=u?.bytes??n.byteLength;if(n.byteLength<f){if(Up(r))throw r.log.error("closed while reading %d/%d bytes",n.byteLength,f),new xo(`Unexpected EOF - stream closed while reading ${n.byteLength}/${f} bytes`);return l.read(u)}let h=n.sublist(0,f);return n.consume(f),h},async write(u,d){if(o===!0)throw new Qu("Stream was unwrapped");r.send(u)||await lr(r,"drain",{signal:d?.signal,rejectionEvents:["close"]})},unwrap(){return o||(o=!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.unshift(n))),r}};return l}function us(r,e={}){let t=Xu(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=ge(e.maxDataLength));let n=e?.lengthDecoder??vr,s=e?.lengthEncoder??Mt;return{async read(i){let a=-1,c=new W;for(;;){let u=await t.read({...i,bytes:1});if(u==null)break;c.append(u);try{a=n(c)}catch(d){if(d instanceof RangeError)continue;throw d}if(a<0)throw new hc("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new $p(`Message length length too long - ${c.byteLength} > ${e.maxLengthLength}`);if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new Fp(`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 xo(`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 xo(`Unexpected EOF - read ${l.byteLength}/${a} bytes before the stream closed`);return l},async write(i,a){await t.write(new W(s(i.byteLength),i),a)},async writeV(i,a){let c=new W(...i.flatMap(l=>[s(l.byteLength),l]));await t.write(c,a)},unwrap(){return t.unwrap()}}}function Ne(r,e){let t=us(r,e),n={read:async(s,o)=>{let i=await t.read(o);return s.decode(i)},write:async(s,o,i)=>{await t.write(o.encode(s),i)},writeV:async(s,o,i)=>{await t.writeV(s.map(a=>o.encode(a)),i)},pb:s=>({read:async o=>n.read(s,o),write:async(o,i)=>n.write(o,s,i),writeV:async(o,i)=>n.writeV(o,s,i),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var JS=1024*1024*4,eA=1024*1024*4,Zu=class{buffer;maxBufferSize;lengthDecoder;maxDataLength;encodingLength;constructor(e={}){this.buffer=new W,this.maxBufferSize=e.maxBufferSize??JS,this.maxDataLength=e.maxDataLength??eA,this.lengthDecoder=e.lengthDecoder??vr,this.encodingLength=e.encodingLength??ge}*decode(e){if(this.buffer.append(e),this.buffer.byteLength>this.maxBufferSize)throw new E(`Buffer length limit exceeded - ${this.buffer.byteLength}/${this.maxBufferSize}`);for(;;){let t;try{t=this.lengthDecoder(this.buffer)}catch(o){if(o instanceof RangeError)break;throw o}if(t<0||t>this.maxDataLength)throw new hc("Invalid message length");let n=this.encodingLength(t),s=n+t;if(this.buffer.byteLength>=s){let o=this.buffer.sublist(n,s);this.buffer.consume(s),o.byteLength>0&&(yield o)}else break}}};var Ju=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Ri=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},ed=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},pc=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function td(r){return r[Symbol.asyncIterator]!=null}function $5(r,e){if(r.byteLength>e)throw new Ri("Message length too long")}var nd=r=>{let e=ge(r),t=de(e);return Mt(r,t),nd.bytes=e,t};nd.bytes=0;function vo(r,e){e=e??{};let t=e.lengthEncoder??nd,n=e?.maxDataLength??4194304;function*s(o){$5(o,n);let i=t(o.byteLength);i instanceof Uint8Array?yield i:yield*i,o instanceof Uint8Array?yield o:yield*o}return td(r)?(async function*(){for await(let o of r)yield*s(o)})():(function*(){for(let o of r)yield*s(o)})()}vo.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??nd,n=e?.maxDataLength??4194304;return $5(r,n),new W(t(r.byteLength),r)};var So;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(So||(So={}));var Kp=r=>{let e=vr(r);return Kp.bytes=ge(e),e};Kp.bytes=0;function mc(r,e){let t=new W,n=So.LENGTH,s=-1,o=e?.lengthDecoder??Kp,i=e?.maxLengthLength??8,a=e?.maxDataLength??4194304;function*c(){for(;t.byteLength>0;){if(n===So.LENGTH)try{if(s=o(t),s<0)throw new Ju("Invalid message length");if(s>a)throw new Ri("Message length too long");let l=o.bytes;t.consume(l),e?.onLength!=null&&e.onLength(s),n=So.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>i)throw new ed("Message length length too long");break}throw l}if(n===So.DATA){if(t.byteLength<s)break;let l=t.sublist(0,s);t.consume(s),e?.onData!=null&&e.onData(l),yield l,n=So.LENGTH}}}return td(r)?(async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new pc("Unexpected end of input")})():(function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new pc("Unexpected end of input")})()}mc.fromReader=(r,e)=>{let t=1,n=(async function*(){for(;;)try{let{done:o,value:i}=await r.next(t);if(o===!0)return;i!=null&&(yield i)}catch(o){if(o.code==="ERR_UNDER_READ")return{done:!0,value:null};throw o}finally{t=1}})();return mc(n,{...e??{},onLength:o=>{t=o}})};var K5=Symbol.for("sindresorhus/unlimited-timeout#brand");function V5(r,e,...t){if(typeof r!="function")throw new TypeError("Expected callback to be a function");e??=0,e=Number(e);let n=!1,s={[K5]:!0,id:void 0,cleared:!1,ref(){return n=!1,s.id?.ref?.(),s},unref(){return n=!0,s.id?.unref?.(),s}};if(e===Number.POSITIVE_INFINITY||e>Number.MAX_SAFE_INTEGER)return s;(!Number.isFinite(e)||e<0)&&(e=0);let o=performance.now()+e,i=a=>{s.cleared||(a<=2147483647?(s.id=globalThis.setTimeout(()=>{s.cleared||r(...t)},a),n&&s.id?.unref?.()):(s.id=globalThis.setTimeout(()=>{let c=performance.now(),l=Math.max(0,o-c);i(l)},2147483647),n&&s.id?.unref?.()))};return i(e),s}function H5(r){!r||typeof r!="object"||!r[K5]||(r.cleared=!0,r.id!==void 0&&(globalThis.clearTimeout(r.id),r.id=void 0))}var nA=new WeakMap;function sA({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:s}={})=>{if(s?.aborted)return Promise.reject(s.reason);let o,i,a,c=r??clearTimeout,l=()=>{c(o),a(s.reason)},u=()=>{s&&s.removeEventListener("abort",l)},d=new Promise((f,h)=>{i=()=>{u(),f(n)},a=h,o=(e??setTimeout)(i,t)});return s&&s.addEventListener("abort",l,{once:!0}),nA.set(d,()=>{c(o),o=null,i()}),d}}var oA=sA({setTimeout:V5,clearTimeout:H5}),q5=oA;var Kt=class extends $t{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};var sd=class extends $t{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};var Pi=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 Vp}consume(e,t=1,n={}){let s=this.getKey(e),o=this._getKeySecDuration(n),i=this.memoryStorage.incrby(s,t,o);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(s,i.consumedPoints,this.blockDuration)),new Hu("Rate limit exceeded",i);return i}penalty(e,t=1,n={}){let s=this.getKey(e),o=this._getKeySecDuration(n),i=this.memoryStorage.incrby(s,t,o);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}reward(e,t=1,n={}){let s=this.getKey(e),o=this._getKeySecDuration(n),i=this.memoryStorage.incrby(s,-t,o);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}block(e,t){let n=t*1e3,s=this.points+1;return this.memoryStorage.set(this.getKey(e),s,t),{remainingPoints:0,msBeforeNext:n===0?-1:n,consumedPoints:s,isFirstInDuration:!1}}set(e,t,n=0){let s=(n>=0?n:this.duration)*1e3;return this.memoryStorage.set(this.getKey(e),t,n),{remainingPoints:0,msBeforeNext:s===0?-1:s,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)}},Vp=class{storage;constructor(){this.storage=new Map}incrby(e,t,n){let s=this.storage.get(e);if(s!=null){let o=s.expiresAt!=null?s.expiresAt.getTime()-new Date().getTime():-1;return s.expiresAt==null||o>0?(s.value+=t,{remainingPoints:0,msBeforeNext:o,consumedPoints:s.value,isFirstInDuration:!1}):this.set(e,t,n)}return this.set(e,t,n)}set(e,t,n){let s=n*1e3,o=this.storage.get(e);o!=null&&clearTimeout(o.timeoutId);let i={value:t,expiresAt:s>0?new Date(Date.now()+s):void 0};return this.storage.set(e,i),s>0&&(i.timeoutId=setTimeout(()=>{this.storage.delete(e)},s),i.timeoutId.unref!=null&&i.timeoutId.unref()),{remainingPoints:0,msBeforeNext:s===0?-1:s,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 Li(r,e,t){let n,s,o=!1;function i(){let l={signal:s.signal},u;t?.timeout!=null&&(u=me([s.signal,AbortSignal.timeout(t.timeout)]),l.signal=u),o=!0,Promise.resolve().then(async()=>{await r(l)}).catch(()=>{}).finally(()=>{u!=null&&(u.aborted?u.clear():u.addEventListener("abort",()=>{u.clear()},{once:!0})),o=!1,!s.signal.aborted&&(n=setTimeout(i,e))})}let a=Tn(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:()=>{o||(clearTimeout(n),a())},start:()=>{c||(c=!0,s=new AbortController,s.signal,t?.runImmediately===!0?queueMicrotask(()=>{i()}):n=setTimeout(i,e))},stop:()=>{clearTimeout(n),s?.abort(),c=!1}}}var Hp=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 Hp({name:e,metrics:t}):n=new Map,n}var od=class{filter;constructor(e,t){this.filter=Ft(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 qp(r,e=.001){return new od(r,e)}var zp=class extends xt{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 gc(r){let{name:e,metrics:t}=r,n;return t!=null?n=new zp({name:e,metrics:t}):n=new xt,n}var yc;(function(r){let e;r.codec=()=>(e==null&&(e=ne((o,i,a={})=>{a.lengthDelimited!==!1&&i.fork(),o.publicKey!=null&&o.publicKey.byteLength>0&&(i.uint32(10),i.bytes(o.publicKey)),o.payloadType!=null&&o.payloadType.byteLength>0&&(i.uint32(18),i.bytes(o.payloadType)),o.payload!=null&&o.payload.byteLength>0&&(i.uint32(26),i.bytes(o.payload)),o.signature!=null&&o.signature.byteLength>0&&(i.uint32(42),i.bytes(o.signature)),a.lengthDelimited!==!1&&i.ldelim()},(o,i,a={})=>{let c={publicKey:z(0),payloadType:z(0),payload:z(0),signature:z(0)},l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{c.publicKey=o.bytes();break}case 2:{c.payloadType=o.bytes();break}case 3:{c.payload=o.bytes();break}case 5:{c.signature=o.bytes();break}default:{o.skipType(u&7);break}}}return c},function*(o,i,a,c={}){let l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{yield{field:`${a}.publicKey`,value:o.bytes()};break}case 2:{yield{field:`${a}.payloadType`,value:o.bytes()};break}case 3:{yield{field:`${a}.payload`,value:o.bytes()};break}case 5:{yield{field:`${a}.signature`,value:o.bytes()};break}default:{o.skipType(u&7);break}}}})),e);function t(o){return te(o,r.codec())}r.encode=t;function n(o,i){return ee(o,r.codec(),i)}r.decode=n;function s(o,i){return re(o,r.codec(),i)}r.stream=s})(yc||(yc={}));var id=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var tr=class r{static createFromProtobuf=e=>{let t=yc.decode(e),n=Xe(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 s=e.domain,o=e.codec,i=e.marshal(),a=z5(s,o,i),c=await t.sign(a.subarray(),n);return new r({publicKey:t.publicKey,payloadType:o,payload:i,signature:c})};static openAndCertify=async(e,t,n)=>{let s=r.createFromProtobuf(e);if(!await s.validate(t,n))throw new id("Envelope signature is not valid for the given domain");return s};publicKey;payloadType;payload;signature;marshaled;constructor(e){let{publicKey:t,payloadType:n,payload:s,signature:o}=e;this.publicKey=t,this.payloadType=n,this.payload=s,this.signature=o}marshal(){return this.marshaled==null&&(this.marshaled=yc.encode({publicKey:tt(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return e==null?!1:Y(this.marshal(),e.marshal())}async validate(e,t){let n=z5(e,this.payloadType,this.payload);return this.publicKey.verify(n.subarray(),this.signature,t)}},z5=(r,e,t)=>{let n=C(r),s=Mt(n.byteLength),o=Mt(e.length),i=Mt(t.length);return new W(s,n,o,e,i,t)};var G5="libp2p-peer-record",W5=Uint8Array.from([3,1]);var wc;(function(r){let e;(function(i){let a;i.codec=()=>(a==null&&(a=ne((d,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),d.multiaddr!=null&&d.multiaddr.byteLength>0&&(f.uint32(10),f.bytes(d.multiaddr)),h.lengthDelimited!==!1&&f.ldelim()},(d,f,h={})=>{let p={multiaddr:z(0)},y=f==null?d.len:d.pos+f;for(;d.pos<y;){let m=d.uint32();m>>>3===1?p.multiaddr=d.bytes():d.skipType(m&7)}return p},function*(d,f,h,p={}){let y=f==null?d.len:d.pos+f;for(;d.pos<y;){let m=d.uint32();m>>>3===1?yield{field:`${h}.multiaddr`,value:d.bytes()}:d.skipType(m&7)}})),a);function c(d){return te(d,i.codec())}i.encode=c;function l(d,f){return ee(d,i.codec(),f)}i.decode=l;function u(d,f){return re(d,i.codec(),f)}i.stream=u})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=ne((i,a,c={})=>{if(c.lengthDelimited!==!1&&a.fork(),i.peerId!=null&&i.peerId.byteLength>0&&(a.uint32(10),a.bytes(i.peerId)),i.seq!=null&&i.seq!==0n&&(a.uint32(16),a.uint64(i.seq)),i.addresses!=null&&i.addresses.length>0)for(let l of i.addresses)a.uint32(26),r.AddressInfo.codec().encode(l,a);c.lengthDelimited!==!1&&a.ldelim()},(i,a,c={})=>{let l={peerId:z(0),seq:0n,addresses:[]},u=a==null?i.len:i.pos+a;for(;i.pos<u;){let d=i.uint32();switch(d>>>3){case 1:{l.peerId=i.bytes();break}case 2:{l.seq=i.uint64();break}case 3:{if(c.limits?.addresses!=null&&l.addresses.length===c.limits.addresses)throw new fe('Decode error - repeated field "addresses" had too many elements');l.addresses.push(r.AddressInfo.codec().decode(i,i.uint32(),{limits:c.limits?.addresses$}));break}default:{i.skipType(d&7);break}}}return l},function*(i,a,c,l={}){let u={addresses:0},d=a==null?i.len:i.pos+a;for(;i.pos<d;){let f=i.uint32();switch(f>>>3){case 1:{yield{field:`${c}.peerId`,value:i.bytes()};break}case 2:{yield{field:`${c}.seq`,value:i.uint64()};break}case 3:{if(l.limits?.addresses!=null&&u.addresses===l.limits.addresses)throw new fe('Streaming decode error - repeated field "addresses" had too many elements');for(let h of r.AddressInfo.codec().stream(i,i.uint32(),`${c}.addresses[]`,{limits:l.limits?.addresses$}))yield{...h,index:u.addresses};u.addresses++;break}default:{i.skipType(f&7);break}}}})),t);function n(i){return te(i,r.codec())}r.encode=n;function s(i,a){return ee(i,r.codec(),a)}r.decode=s;function o(i,a){return re(i,r.codec(),a)}r.stream=o})(wc||(wc={}));function j5(r,e){let t=(n,s)=>n.toString().localeCompare(s.toString());return r.length!==e.length?!1:(e.sort(t),r.sort(t).every((n,s)=>e[s].equals(n)))}var kt=class r{static createFromProtobuf=e=>{let t=wc.decode(e),n=Ge(Se(t.peerId)),s=(t.addresses??[]).map(i=>F(i.multiaddr)),o=t.seq;return new r({peerId:n,multiaddrs:s,seqNumber:o})};static DOMAIN=G5;static CODEC=W5;peerId;multiaddrs;seqNumber;domain=r.DOMAIN;codec=r.CODEC;marshaled;constructor(e){let{peerId:t,multiaddrs:n,seqNumber:s}=e;this.peerId=t,this.multiaddrs=n??[],this.seqNumber=s??BigInt(Date.now())}marshal(){return this.marshaled==null&&(this.marshaled=wc.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||!j5(this.multiaddrs,e.multiaddrs))}};function iA(r){return r[Symbol.asyncIterator]!=null}function aA(r){if(iA(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 Ao=aA;var rr=class extends Error{static name="AbortError";name="AbortError";constructor(e="The operation was aborted",...t){super(e,...t)}};async function ds(r,e,t,n){let s=new rr(n?.errorMessage);n?.errorCode!=null&&(s.code=n.errorCode);let o=n?.errorEvent??"error";return t?.aborted===!0?Promise.reject(s):new Promise((i,a)=>{function c(){Wp(t,"abort",d),Wp(r,e,l),Wp(r,o,u)}let l=f=>{try{if(n?.filter?.(f)===!1)return}catch(h){c(),a(h);return}c(),i(f)},u=f=>{if(c(),f instanceof Error){a(f);return}a(f.detail??n?.error??new Error(`The "${n?.errorEvent}" event was emitted but the event had no '.detail' field. Pass an 'error' option to race-event to change this message.`))},d=()=>{c(),a(s)};Gp(t,"abort",d),Gp(r,e,l),Gp(r,o,u)})}function Gp(r,e,t){r!=null&&(Y5(r)?r.addEventListener(e,t):r.addListener(e,t))}function Wp(r,e,t){r!=null&&(Y5(r)?r.removeEventListener(e,t):r.removeListener(e,t))}function Y5(r){return typeof r.addEventListener=="function"&&typeof r.removeEventListener=="function"}var ad=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var cd=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 rr)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function cA(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var ld=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=cA(),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 rr),this.cleanup())}async join(e={}){let t=new cd(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 De(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 jp(r,e){let t,n=function(){let s=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(s,e)};return n.start=()=>{},n.stop=()=>{clearTimeout(t)},n}var bc=class extends oe{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=jp(this.emitEmpty.bind(this),1),this.emitIdle=jp(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 ad;let n=new ld(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.autoStart&&this.tryToStartAnother(),n.join(t).then(s=>(this.safeDispatchEvent("success",{detail:{job:n,result:s}}),s)).catch(s=>{if(n.status==="queued"){for(let o=0;o<this.queue.length;o++)if(this.queue[o]===n){this.queue.splice(o,1);break}}throw this.safeDispatchEvent("failure",{detail:{job:n,error:s}}),s})}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new rr)}),this.clear()}async onEmpty(e){this.size!==0&&await ds(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await ds(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await ds(this,"idle",e?.signal)}get size(){return this.queue.length}get queued(){return this.queue.length-this.pending}get running(){return this.pending}async*toGenerator(e){e?.signal?.throwIfAborted();let t=Pt({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},s=c=>{c.detail!=null&&t.push(c.detail.result)},o=c=>{n(c.detail.error)},i=()=>{n()},a=()=>{n(new rr("Queue aborted"))};this.addEventListener("success",s),this.addEventListener("failure",o),this.addEventListener("idle",i),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("success",s),this.removeEventListener("failure",o),this.removeEventListener("idle",i),e?.signal?.removeEventListener("abort",a),n()}}};var ud="lock:worker:request-read",dd="lock:worker:abort-read-request",fd="lock:worker:release-read",hd="lock:master:grant-read",pd="lock:master:error-read",md="lock:worker:request-write",gd="lock:worker:abort-write-request",yd="lock:worker:release-write",wd="lock:master:grant-write",bd="lock:master:error-write",Ed="lock:worker:finalize",xd="mortice",Q5={singleProcess:!1};var Yp=(r,e,t,n,s,o,i,a,c)=>l=>{if(l.data==null)return;let u={type:l.data.type,name:l.data.name,identifier:l.data.identifier};u.type===s&&r.safeDispatchEvent(t,{detail:{name:u.name,identifier:u.identifier,handler:async()=>{e.postMessage({type:c,name:u.name,identifier:u.identifier}),await new Promise(d=>{let f=h=>{if(h?.data==null)return;let p={type:h.data.type,name:h.data.name,identifier:h.data.identifier};p.type===a&&p.identifier===u.identifier&&(e.removeEventListener("message",f),d())};e.addEventListener("message",f)})},onError:d=>{e.postMessage({type:i,name:u.name,identifier:u.identifier,error:{message:d.message,name:d.name,stack:d.stack}})}}}),u.type===o&&r.safeDispatchEvent(n,{detail:{name:u.name,identifier:u.identifier}}),u.type===Ed&&r.safeDispatchEvent("finalizeRequest",{detail:{name:u.name}})};var X5=(r=10)=>Math.random().toString().substring(2,r+2);var vd=class{name;channel;constructor(e){this.name=e,this.channel=new BroadcastChannel(xd)}readLock(e){return this.sendRequest(ud,dd,hd,pd,fd,e)}writeLock(e){return this.sendRequest(md,gd,wd,bd,yd,e)}finalize(){this.channel.postMessage({type:Ed,name:this.name}),this.channel.close()}async sendRequest(e,t,n,s,o,i){i?.signal?.throwIfAborted();let a=X5();return this.channel.postMessage({type:e,identifier:a,name:this.name}),new Promise((c,l)=>{let u=()=>{this.channel.postMessage({type:t,identifier:a,name:this.name})};i?.signal?.addEventListener("abort",u,{once:!0});let d=f=>{if(f.data?.identifier===a&&(f.data?.type===n&&(this.channel.removeEventListener("message",d),i?.signal?.removeEventListener("abort",u),c(()=>{this.channel.postMessage({type:o,identifier:a,name:this.name})})),f.data.type===s)){this.channel.removeEventListener("message",d),i?.signal?.removeEventListener("abort",u);let h=new Error;f.data.error!=null&&(h.message=f.data.error.message,h.name=f.data.error.name,h.stack=f.data.error.stack),l(h)}};this.channel.addEventListener("message",d)})}};var Z5=r=>{if(r=Object.assign({},Q5,r),!!globalThis.document||r.singleProcess){let t=new BroadcastChannel(xd),n=new oe;return t.addEventListener("message",Yp(n,t,"requestReadLock","abortReadLockRequest",ud,dd,pd,fd,hd)),t.addEventListener("message",Yp(n,t,"requestWriteLock","abortWriteLockRequest",md,gd,bd,yd,wd)),n}return new vd(r.name)};var To=new Map,Ec;function J5(r){return typeof r?.readLock=="function"&&typeof r?.writeLock=="function"}function lA(r){if(Ec==null&&(Ec=Z5(r),!J5(Ec))){let e=Ec;e.addEventListener("requestReadLock",t=>{let n=t.detail.name,s=t.detail.identifier,o=To.get(n);if(o==null)return;let i=new AbortController,a=c=>{c.detail.name!==n||c.detail.identifier!==s||i.abort()};e.addEventListener("abortReadLockRequest",a),o.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,s=t.detail.identifier,o=To.get(n);if(o==null)return;let i=new AbortController,a=c=>{c.detail.name!==n||c.detail.identifier!==s||i.abort()};e.addEventListener("abortWriteLockRequest",a),o.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,s=To.get(n);s?.finalize()})}return Ec}async function Qp(r,e){let t,n,s=new Promise((i,a)=>{t=i,n=a}),o=()=>{n(new rr)};return e?.signal?.addEventListener("abort",o,{once:!0}),r.add(async()=>{await new Promise(i=>{t(()=>{e?.signal?.removeEventListener("abort",o),i()})})},{signal:e?.signal}).catch(i=>{n(i)}),s}var e8=(r,e)=>{let t=To.get(r);if(t!=null)return t;let n=lA(e);if(J5(n))return t=n,To.set(r,t),t;let s=new bc({concurrency:1}),o;return t={async readLock(i){if(o!=null)return Qp(o,i);o=new bc({concurrency:e.concurrency,autoStart:!1});let a=o,c=Qp(o,i);return s.add(async()=>{a.start(),await a.onIdle().then(()=>{o===a&&(o=null)})}),c},async writeLock(i){return o=null,Qp(s,i)},finalize:()=>{To.delete(r)},queue:s},To.set(r,t),e.autoFinalize===!0&&s.addEventListener("idle",()=>{t.finalize()},{once:!0}),t};var uA={name:"lock",concurrency:1/0,singleProcess:!1,autoFinalize:!1};function Xp(r){let e=Object.assign({},uA,r);return e8(e.name,e)}var Cn;(function(r){let e;(function(a){let c;a.codec=()=>(c==null&&(c=ne((f,h,p={})=>{p.lengthDelimited!==!1&&h.fork(),f.key!=null&&f.key!==""&&(h.uint32(10),h.string(f.key)),f.value!=null&&f.value.byteLength>0&&(h.uint32(18),h.bytes(f.value)),p.lengthDelimited!==!1&&h.ldelim()},(f,h,p={})=>{let y={key:"",value:z(0)},m=h==null?f.len:f.pos+h;for(;f.pos<m;){let g=f.uint32();switch(g>>>3){case 1:{y.key=f.string();break}case 2:{y.value=f.bytes();break}default:{f.skipType(g&7);break}}}return y},function*(f,h,p,y={}){let m=h==null?f.len:f.pos+h;for(;f.pos<m;){let g=f.uint32();switch(g>>>3){case 1:{yield{field:`${p}.key`,value:f.string()};break}case 2:{yield{field:`${p}.value`,value:f.bytes()};break}default:{f.skipType(g&7);break}}}})),c);function l(f){return te(f,a.codec())}a.encode=l;function u(f,h){return ee(f,a.codec(),h)}a.decode=u;function d(f,h){return re(f,a.codec(),h)}a.stream=d})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(a){let c;a.codec=()=>(c==null&&(c=ne((f,h,p={})=>{p.lengthDelimited!==!1&&h.fork(),f.key!=null&&f.key!==""&&(h.uint32(10),h.string(f.key)),f.value!=null&&(h.uint32(18),vc.codec().encode(f.value,h)),p.lengthDelimited!==!1&&h.ldelim()},(f,h,p={})=>{let y={key:""},m=h==null?f.len:f.pos+h;for(;f.pos<m;){let g=f.uint32();switch(g>>>3){case 1:{y.key=f.string();break}case 2:{y.value=vc.codec().decode(f,f.uint32(),{limits:p.limits?.value});break}default:{f.skipType(g&7);break}}}return y},function*(f,h,p,y={}){let m=h==null?f.len:f.pos+h;for(;f.pos<m;){let g=f.uint32();switch(g>>>3){case 1:{yield{field:`${p}.key`,value:f.string()};break}case 2:{yield*vc.codec().stream(f,f.uint32(),`${p}.value`,{limits:y.limits?.value});break}default:{f.skipType(g&7);break}}}})),c);function l(f){return te(f,a.codec())}a.encode=l;function u(f,h){return ee(f,a.codec(),h)}a.decode=u;function d(f,h){return re(f,a.codec(),h)}a.stream=d})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=ne((a,c,l={})=>{if(l.lengthDelimited!==!1&&c.fork(),a.addresses!=null&&a.addresses.length>0)for(let u of a.addresses)c.uint32(10),xc.codec().encode(u,c);if(a.protocols!=null&&a.protocols.length>0)for(let u of a.protocols)c.uint32(18),c.string(u);if(a.publicKey!=null&&(c.uint32(34),c.bytes(a.publicKey)),a.peerRecordEnvelope!=null&&(c.uint32(42),c.bytes(a.peerRecordEnvelope)),a.metadata!=null&&a.metadata.size>0)for(let[u,d]of a.metadata.entries())c.uint32(50),r.Peer$metadataEntry.codec().encode({key:u,value:d},c);if(a.tags!=null&&a.tags.size>0)for(let[u,d]of a.tags.entries())c.uint32(58),r.Peer$tagsEntry.codec().encode({key:u,value:d},c);a.updated!=null&&(c.uint32(64),c.uint64Number(a.updated)),l.lengthDelimited!==!1&&c.ldelim()},(a,c,l={})=>{let u={addresses:[],protocols:[],metadata:new Map,tags:new Map},d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{if(l.limits?.addresses!=null&&u.addresses.length===l.limits.addresses)throw new fe('Decode error - repeated field "addresses" had too many elements');u.addresses.push(xc.codec().decode(a,a.uint32(),{limits:l.limits?.addresses$}));break}case 2:{if(l.limits?.protocols!=null&&u.protocols.length===l.limits.protocols)throw new fe('Decode error - repeated field "protocols" had too many elements');u.protocols.push(a.string());break}case 4:{u.publicKey=a.bytes();break}case 5:{u.peerRecordEnvelope=a.bytes();break}case 6:{if(l.limits?.metadata!=null&&u.metadata.size===l.limits.metadata)throw new Va('Decode error - map field "metadata" had too many elements');let h=r.Peer$metadataEntry.codec().decode(a,a.uint32(),{limits:{value:l.limits?.metadata$value}});u.metadata.set(h.key,h.value);break}case 7:{if(l.limits?.tags!=null&&u.tags.size===l.limits.tags)throw new Va('Decode error - map field "tags" had too many elements');let h=r.Peer$tagsEntry.codec().decode(a,a.uint32(),{limits:{value:l.limits?.tags$value}});u.tags.set(h.key,h.value);break}case 8:{u.updated=a.uint64Number();break}default:{a.skipType(f&7);break}}}return u},function*(a,c,l,u={}){let d={addresses:0,protocols:0,metadata:0,tags:0},f=c==null?a.len:a.pos+c;for(;a.pos<f;){let h=a.uint32();switch(h>>>3){case 1:{if(u.limits?.addresses!=null&&d.addresses===u.limits.addresses)throw new fe('Streaming decode error - repeated field "addresses" had too many elements');for(let p of xc.codec().stream(a,a.uint32(),`${l}.addresses[]`,{limits:u.limits?.addresses$}))yield{...p,index:d.addresses};d.addresses++;break}case 2:{if(u.limits?.protocols!=null&&d.protocols===u.limits.protocols)throw new fe('Streaming decode error - repeated field "protocols" had too many elements');yield{field:`${l}.protocols[]`,index:d.protocols,value:a.string()},d.protocols++;break}case 4:{yield{field:`${l}.publicKey`,value:a.bytes()};break}case 5:{yield{field:`${l}.peerRecordEnvelope`,value:a.bytes()};break}case 6:{if(u.limits?.metadata!=null&&d.metadata===u.limits.metadata)throw new fe('Decode error - map field "metadata" had too many elements');yield*r.Peer$metadataEntry.codec().stream(a,a.uint32(),`${l}.metadata{}`,{limits:{value:u.limits?.metadata$value}}),d.metadata++;break}case 7:{if(u.limits?.tags!=null&&d.tags===u.limits.tags)throw new fe('Decode error - map field "tags" had too many elements');yield*r.Peer$tagsEntry.codec().stream(a,a.uint32(),`${l}.tags{}`,{limits:{value:u.limits?.tags$value}}),d.tags++;break}case 8:{yield{field:`${l}.updated`,value:a.uint64Number()};break}default:{a.skipType(h&7);break}}}})),n);function s(a){return te(a,r.codec())}r.encode=s;function o(a,c){return ee(a,r.codec(),c)}r.decode=o;function i(a,c){return re(a,r.codec(),c)}r.stream=i})(Cn||(Cn={}));var xc;(function(r){let e;r.codec=()=>(e==null&&(e=ne((o,i,a={})=>{a.lengthDelimited!==!1&&i.fork(),o.multiaddr!=null&&o.multiaddr.byteLength>0&&(i.uint32(10),i.bytes(o.multiaddr)),o.isCertified!=null&&(i.uint32(16),i.bool(o.isCertified)),o.observed!=null&&(i.uint32(24),i.uint64Number(o.observed)),a.lengthDelimited!==!1&&i.ldelim()},(o,i,a={})=>{let c={multiaddr:z(0)},l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{c.multiaddr=o.bytes();break}case 2:{c.isCertified=o.bool();break}case 3:{c.observed=o.uint64Number();break}default:{o.skipType(u&7);break}}}return c},function*(o,i,a,c={}){let l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{yield{field:`${a}.multiaddr`,value:o.bytes()};break}case 2:{yield{field:`${a}.isCertified`,value:o.bool()};break}case 3:{yield{field:`${a}.observed`,value:o.uint64Number()};break}default:{o.skipType(u&7);break}}}})),e);function t(o){return te(o,r.codec())}r.encode=t;function n(o,i){return ee(o,r.codec(),i)}r.decode=n;function s(o,i){return re(o,r.codec(),i)}r.stream=s})(xc||(xc={}));var vc;(function(r){let e;r.codec=()=>(e==null&&(e=ne((o,i,a={})=>{a.lengthDelimited!==!1&&i.fork(),o.value!=null&&o.value!==0&&(i.uint32(8),i.uint32(o.value)),o.expiry!=null&&(i.uint32(16),i.uint64(o.expiry)),a.lengthDelimited!==!1&&i.ldelim()},(o,i,a={})=>{let c={value:0},l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{c.value=o.uint32();break}case 2:{c.expiry=o.uint64();break}default:{o.skipType(u&7);break}}}return c},function*(o,i,a,c={}){let l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{yield{field:`${a}.value`,value:o.uint32()};break}case 2:{yield{field:`${a}.expiry`,value:o.uint64()};break}default:{o.skipType(u&7);break}}}})),e);function t(o){return te(o,r.codec())}r.encode=t;function n(o,i){return ee(o,r.codec(),i)}r.decode=n;function s(o,i){return re(o,r.codec(),i)}r.stream=s})(vc||(vc={}));function dA(r,e){if(r.publicKey!=null||e.publicKey==null)return r;let t;r.type==="RSA"&&(t=r.toMultihash());let n=Xe(e.publicKey,t);return Wr(n)}function t8(r,e,t){let n=Cn.decode(e);return ki(r,n,t)}function ki(r,e,t){let n=new Map,s=BigInt(Date.now());for(let[o,i]of e.tags.entries())i.expiry!=null&&i.expiry<s||n.set(o,i);return{...e,id:dA(r,e),addresses:e.addresses.filter(({observed:o})=>o!=null&&o>Date.now()-t).map(({multiaddr:o,isCertified:i})=>({multiaddr:F(o),isCertified:i??!1})),metadata:e.metadata,peerRecordEnvelope:e.peerRecordEnvelope??void 0,tags:n}}function r8(r,e){return fA(r.addresses,e.addresses)&&hA(r.protocols,e.protocols)&&pA(r.publicKey,e.publicKey)&&mA(r.peerRecordEnvelope,e.peerRecordEnvelope)&&gA(r.metadata,e.metadata)&&yA(r.tags,e.tags)}function fA(r,e){return s8(r,e,(t,n)=>!(t.isCertified!==n.isCertified||!Y(t.multiaddr,n.multiaddr)))}function hA(r,e){return s8(r,e,(t,n)=>t===n)}function pA(r,e){return n8(r,e)}function mA(r,e){return n8(r,e)}function gA(r,e){return o8(r,e,(t,n)=>Y(t,n))}function yA(r,e){return o8(r,e,(t,n)=>t.value===n.value&&t.expiry===n.expiry)}function n8(r,e){return r==null&&e==null?!0:r!=null&&e!=null?Y(r,e):!1}function s8(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 o8(r,e,t){if(r.size!==e.size)return!1;for(let[n,s]of r.entries()){let o=e.get(n);if(o==null||!t(s,o))return!1}return!0}var _n="/",i8=new TextEncoder().encode(_n),Sd=i8[0],St=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]!==Sd)throw new Error("Invalid key")}toString(e="utf8"){return k(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(_n))}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=i8),this._buf[0]!==Sd){let e=new Uint8Array(this._buf.byteLength+1);e.fill(Sd,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===Sd;)this._buf=this._buf.subarray(0,-1)}less(e){let t=this.list(),n=e.list();for(let s=0;s<t.length;s++){if(n.length<s+1)return!1;let o=t[s],i=n[s];if(o<i)return!0;if(o>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(_n).slice(1)}type(){return wA(this.baseNamespace())}name(){return bA(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(_n)||(e+=_n),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(_n):new r(e.slice(0,-1).join(_n))}child(e){return this.toString()===_n?e:e.toString()===_n?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(),...EA(e.map(t=>t.namespaces()))])}};function wA(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function bA(r){let e=r.split(":");return e[e.length-1]}function EA(r){return[].concat(...r)}var Zp="/peers/";function Sc(r){if(!Kr(r)||r.type==null)throw new E("Invalid PeerId");let e=r.toCID().toString();return new St(`${Zp}${e}`)}async function a8(r,e,t,n,s){let o=new Map;for(let i of t){if(i==null)continue;if(i.multiaddr instanceof Uint8Array&&(i.multiaddr=F(i.multiaddr)),!Qr(i.multiaddr))throw new E("Multiaddr was invalid");if(!await e(r,i.multiaddr,s))continue;let a=i.isCertified??!1,c=i.multiaddr.toString(),l=o.get(c);l!=null?i.isCertified=l.isCertified||a:o.set(c,{multiaddr:i.multiaddr,isCertified:a})}return[...o.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(F(`/p2p/${r}`))),{isCertified:i,multiaddr:a.bytes}})}async function Td(r,e,t,n){if(e==null)throw new E("Invalid PeerData");if(e.publicKey!=null&&r.publicKey!=null&&!e.publicKey.equals(r.publicKey))throw new E("publicKey bytes do not match peer id publicKey bytes");let s=n.existingPeer?.peer;if(s!=null&&!r.equals(s.id))throw new E("peer id did not match existing peer id");let o=s?.addresses??[],i=new Set(s?.protocols??[]),a=s?.metadata??new Map,c=s?.tags??new Map,l=s?.peerRecordEnvelope;if(t==="patch"){if((e.multiaddrs!=null||e.addresses!=null)&&(o=[],e.multiaddrs!=null&&o.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&o.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=Ad(f,{validate:c8})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=Ad(f,{validate:l8,map:u8})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&o.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&o.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=Ad([...a.entries()],{validate:c8})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),h=new Map(c);for(let[p,y]of f)y==null?h.delete(p):h.set(p,y);c=Ad([...h.entries()],{validate:l8,map:u8})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let u;s?.id.publicKey!=null?u=tt(s.id.publicKey):e.publicKey!=null?u=tt(e.publicKey):r.publicKey!=null&&(u=tt(r.publicKey));let d={addresses:await a8(r,n.addressFilter??(async()=>!0),o,n.existingPeer?.peerPB.addresses,n),protocols:[...i.values()].sort((f,h)=>f.localeCompare(h)),metadata:a,tags:c,publicKey:u,peerRecordEnvelope:l};return d.addresses.forEach(f=>{f.observed=n.existingPeer?.peerPB.addresses?.find(h=>Y(h.multiaddr,h.multiaddr))?.observed??Date.now()}),r.type!=="RSA"&&delete d.publicKey,d}function Ad(r,e){let t=new Map;for(let[n,s]of r)s!=null&&e.validate(n,s);for(let[n,s]of r.sort(([o],[i])=>o.localeCompare(i)))s!=null&&t.set(n,e.map?.(n,s)??s);return t}function c8(r,e){if(typeof r!="string")throw new E("Metadata key must be a string");if(!(e instanceof Uint8Array))throw new E("Metadata value must be a Uint8Array")}function l8(r,e){if(typeof r!="string")throw new E("Tag name must be a string");if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new E("Tag value must be an integer");if(e.value<0||e.value>100)throw new E("Tag value must be between 0-100")}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new E("Tag ttl must be an integer");if(e.ttl<0)throw new E("Tag ttl must be between greater than 0")}}function u8(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 d8(r){let e=r.toString().split("/")[2],t=ie.parse(e,ir);return Rt(t)}function Jp(r,e,t){let n=d8(r);return t8(n,e,t)}function xA(r,e){return{prefix:Zp,filters:(r.filters??[]).map(t=>({key:n,value:s})=>t(Jp(n,s,e))),orders:(r.orders??[]).map(t=>(n,s)=>t(Jp(n.key,n.value,e),Jp(s.key,s.value,e)))}}var Id=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=gc({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:Xp({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 s=await n.lock.readLock(t);return()=>{s(),this.maybeRemoveLock(e,n)}}catch(s){throw this.maybeRemoveLock(e,n),s}}async getWriteLock(e,t){let n=this.getLock(e);try{let s=await n.lock.writeLock(t);return()=>{s(),this.maybeRemoveLock(e,n)}}catch(s){throw this.maybeRemoveLock(e,n),s}}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(Sc(e),t)}async load(e,t){let n=Sc(e),s=await this.datastore.get(n,t),o=Cn.decode(s);if(this.#r(e,o))throw await this.datastore.delete(n,t),new ke;return ki(e,o,this.peerId.equals(e)?1/0:this.maxAddressAge)}async save(e,t,n){let s=await this.#e(e,n),o=await Td(e,t,"patch",{...n,addressFilter:this.addressFilter});return this.#t(e,o,s)}async patch(e,t,n){let s=await this.#e(e,n),o=await Td(e,t,"patch",{...n,addressFilter:this.addressFilter,existingPeer:s});return this.#t(e,o,s)}async merge(e,t,n){let s=await this.#e(e,n),o=await Td(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:s});return this.#t(e,o,s)}async*all(e){for await(let{key:t,value:n}of this.datastore.query(xA(e??{},this.maxAddressAge),e)){let s=d8(t);if(s.equals(this.peerId))continue;let o=Cn.decode(n);if(this.#r(s,o)){await this.datastore.delete(t,e);continue}yield ki(s,o,this.peerId.equals(s)?1/0:this.maxAddressAge)}}async#e(e,t){try{let n=Sc(e),s=await this.datastore.get(n,t),o=Cn.decode(s);if(this.#r(e,o))throw await this.datastore.delete(n,t),new ke;return{peerPB:o,peer:ki(e,o,this.maxAddressAge)}}catch(n){n.name!=="NotFoundError"&&this.log.error("invalid peer data found in peer store - %e",n)}}async#t(e,t,n,s){t.updated=Date.now();let o=Cn.encode(t);return await this.datastore.put(Sc(e),o,s),{peer:ki(e,t,this.maxAddressAge),previous:n?.peer,updated:n==null||!r8(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,s=Date.now()-this.maxAddressAge,o=t.addresses.filter(i=>i.observed!=null&&i.observed>s);return n&&o.length===0}};var em=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 Id(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 Ao(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:s})=>s)}}async save(e,t,n){let s=await this.store.getWriteLock(e,n);try{let o=await this.store.save(e,t,n);return this.#e(e,o),o.peer}finally{s?.()}}async patch(e,t,n){let s=await this.store.getWriteLock(e,n);try{let o=await this.store.patch(e,t,n);return this.#e(e,o),o.peer}finally{s?.()}}async merge(e,t,n){let s=await this.store.getWriteLock(e,n);try{let o=await this.store.merge(e,t,n);return this.#e(e,o),o.peer}finally{s?.()}}async consumePeerRecord(e,t,n){let s=Kr(t)?t:Kr(t?.expectedPeer)?t.expectedPeer:void 0,o=Kr(t)||t===void 0?n:t,i=await tr.openAndCertify(e,kt.DOMAIN,o),a=Rt(i.publicKey.toCID());if(s?.equals(a)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",s,a),!1;let c=kt.createFromProtobuf(i.payload),l;try{l=await this.get(a,o)}catch(u){if(u.name!=="NotFoundError")throw u}if(l?.peerRecordEnvelope!=null){let u=tr.createFromProtobuf(l.peerRecordEnvelope),d=kt.createFromProtobuf(u.payload);if(d.seqNumber>=c.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",d.seqNumber,c.seqNumber),!1}return await this.patch(c.peerId,{peerRecordEnvelope:e,addresses:c.multiaddrs.map(u=>({isCertified:!0,multiaddr:u}))},o),!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 f8(r,e={}){return new em(r,e)}var Cd=class r extends Error{static name="NotFoundError";name=r.name;static code="ERR_NOT_FOUND";code=r.code;constructor(e="Not Found"){super(e)}};function vA(r){return r[Symbol.asyncIterator]!=null}function SA(r){if(vA(r))return(async()=>{for await(let e of r);})();for(let e of r);}var Xr=SA;function AA(r){let[e,t]=r[Symbol.asyncIterator]!=null?[r[Symbol.asyncIterator](),Symbol.asyncIterator]:[r[Symbol.iterator](),Symbol.iterator],n=[];return{peek:()=>e.next(),push:s=>{n.push(s)},next:()=>n.length>0?{done:!1,value:n.shift()}:e.next(),[t](){return this}}}var _d=AA;function TA(r){return r[Symbol.asyncIterator]!=null}function IA(r,e){let t=0;if(TA(r))return(async function*(){for await(let c of r)await e(c,t++)&&(yield c)})();let n=_d(r),{value:s,done:o}=n.next();if(o===!0)return(function*(){})();let i=e(s,t++);if(typeof i.then=="function")return(async function*(){await i&&(yield s);for(let c of n)await e(c,t++)&&(yield c)})();let a=e;return(function*(){i===!0&&(yield s);for(let c of n)a(c,t++)&&(yield c)})()}var Io=IA;function CA(r){return r[Symbol.asyncIterator]!=null}function _A(r,e){return CA(r)?(async function*(){yield*(await Ao(r)).sort(e)})():(function*(){yield*Ao(r).sort(e)})()}var tm=_A;function RA(r){return r[Symbol.asyncIterator]!=null}function PA(r,e){return RA(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 Ac=PA;var Rd=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:s}of e)await this.put(n,s,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,s){e.push({key:n,value:s})},delete(n){t.push(n)},commit:async n=>{await Xr(this.putMany(e,n)),e=[],await Xr(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 s=e.prefix;n=Io(n,o=>o.key.toString().startsWith(s))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((s,o)=>Io(s,o),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((s,o)=>tm(s,o),n)),e.offset!=null){let s=0,o=e.offset;n=Io(n,()=>s++>=o)}return e.limit!=null&&(n=Ac(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let s=e.prefix;n=Io(n,o=>o.toString().startsWith(s))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((s,o)=>Io(s,o),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((s,o)=>tm(s,o),n)),e.offset!=null){let s=e.offset,o=0;n=Io(n,()=>o++>=s)}return e.limit!=null&&(n=Ac(n,e.limit)),n}};var Pd=class extends Rd{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 Cd;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,s]of this.data.entries())yield{key:new St(n),value:s},t?.signal?.throwIfAborted()}*_allKeys(e,t){t?.signal?.throwIfAborted();for(let n of this.data.keys())yield new St(n),t?.signal?.throwIfAborted()}};var h8=864e13;var Ld=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=Q(e),n=t.host;(t.type==="ip4"||t.type==="ip6")&&t.sni!=null&&(n=t.sni);for(let s of this.mappings.values())if(s.domain===n)return!0;return!1}add(e,t){t.forEach(n=>{this.log("add DNS mapping %s to %s",n,e);let s=Ei(n)===!0;this.mappings.set(n,{domain:e,verified:s,expires:s?h8-Date.now():0,lastVerified:s?h8-Date.now():void 0})})}remove(e){let t=Q(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;let n=!1;for(let[s,o]of this.mappings.entries())o.domain===t.sni&&(this.log("removing %s to %s DNS mapping %e",s,o.domain),this.mappings.delete(s),n=n||o.verified);return n}getAll(e){let t=[];for(let n=0;n<e.length;n++){let s=e[n].multiaddr;if(!dt(s))continue;let o=Q(s);for(let[i,a]of this.mappings.entries()){if(o.host!==i)continue;let c=this.maybeAddSNIComponent(s,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 s=0;s<n.length;s++)if(n[s].code===448&&n[s+1]?.code!==449)return n.splice(s+1,0,{name:"sni",code:449,value:t}),F(n)}confirm(e,t){let n=Q(e),s=n.host;(n.type==="ip4"||n.type==="ip6")&&n.sni!=null&&(s=n.sni);let o=!1;for(let[i,a]of this.mappings.entries())a.domain===s&&(this.log("marking %s to %s DNS mapping as verified",i,a.domain),o=a.verified,a.verified=!0,a.expires=Date.now()+t,a.lastVerified=Date.now());return o}unconfirm(e,t){let n=Q(e);if(n.type!=="ip4"&&n.type!=="ip6")return!1;let s=n.sni??n.host,o=!1;for(let[i,a]of this.mappings.entries())a.domain===s&&(this.log("removing verification of %s to %s DNS mapping",i,a.domain),o=o||a.verified,a.verified=!1,a.expires=Date.now()+t);return o}};var kd=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=Q(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;for(let n of this.mappings.values())for(let s of n)if(s.externalIp===t.host)return!0;return!1}add(e,t,n,s=t,o="tcp"){let i=`${e}-${t}-${o}`,a=this.mappings.get(i)??[],c={internalIp:e,internalPort:t,externalIp:n,externalPort:s,externalFamily:Cr(n)?4:6,protocol:o,verified:!1,expires:0};a.push(c),this.mappings.set(i,a)}remove(e){let t=Q(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;let n=!1;for(let[s,o]of this.mappings.entries()){for(let i=0;i<o.length;i++){let a=o[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,o.splice(i,1),i--)}o.length===0&&this.mappings.delete(s)}return n}getAll(e){let t=[];for(let{multiaddr:n}of e){if(!dt(n))continue;let s=Q(n);if(s.type!=="ip4"&&s.type!=="ip6")continue;let o;if(s.protocol==="tcp"?o=`${s.host}-${s.port}-tcp`:s.protocol==="udp"&&(o=`${s.host}-${s.port}-udp`),o==null)continue;let i=this.mappings.get(o);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,s,o){let i=e.getComponents(),a=i.findIndex(l=>l.code===4||l.code===41),c=i.findIndex(l=>l.name===s);return a>-1&&c>-1?(i[a].value=t,i[a].code=n===4?4:41,i[c].value=`${o}`,F(i)):e}confirm(e,t){if(!dt(e))return!1;let n=Q(e),s=!1;for(let o of this.mappings.values())for(let i of o)i.externalIp===n.host&&(this.log("marking %s to %s IP mapping as verified",i.internalIp,i.externalIp),s=i.verified,i.verified=!0,i.expires=Date.now()+t,i.lastVerified=Date.now());return s}unconfirm(e,t){if(!dt(e))return!1;let n=Q(e),s=!1;for(let o of this.mappings.values())for(let i=0;i<o.length;i++){let a=o[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),s=s||a.verified,a.verified=!1,a.expires=Date.now()+t)}return s}};var LA={maxObservedAddresses:10},Dd=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??LA.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&&(We(e)||r5(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:F(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(),s=this.addresses.get(n)??{verified:!1,expires:Date.now()+t,lastVerified:Date.now()},o=s.verified;return s.verified=!0,s.expires=Date.now()+t,s.lastVerified=Date.now(),this.log("marking observed address %a as verified",n),this.addresses.set(n,s),o}};var kA={maxObservedAddresses:10},Nd=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??kA.maxObservedAddresses}get(e,t){if(We(e))return{multiaddr:e,verified:!0,type:"transport",expires:Date.now()+t,lastVerified:Date.now()};let n=this.toKey(e),s=this.addresses.get(n);return s==null&&(s={verified:!dt(e),expires:0},this.addresses.set(n,s)),{multiaddr:e,verified:s.verified,type:"transport",expires:s.expires,lastVerified:s.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),s=this.addresses.get(n)??{verified:!1,expires:0,lastVerified:0},o=s.verified;return s.verified=!0,s.expires=Date.now()+t,s.lastVerified=Date.now(),this.addresses.set(n,s),o}unconfirm(e,t){let n=this.toKey(e),s=this.addresses.get(n)??{verified:!1,expires:0},o=s.verified;return s.verified=!1,s.expires=Date.now()+t,this.addresses.set(n,s),o}toKey(e){if(!dt(e))return e.toString();let t=Q(e);return`${t.host}-${t.port}-${t.protocol}`}};var p8=6e4,m8={maxObservedAddresses:10,addressVerificationTTL:p8*10,addressVerificationRetry:p8*5},DA=r=>r;function rm(r,e){let t=r.getComponents().findLast(n=>n.code===421)?.value;return t!=null&&Be(t).equals(e)&&(r=r.decapsulate(F(`/p2p/${e.toString()}`))),r}var Od=class{log;components;listen;announce;appendAnnounce;announceFilter;observed;dnsMappings;ipMappings;transportAddresses;observedAddressFilter;addressVerificationTTL;addressVerificationRetry;constructor(e,t={}){let{listen:n=[],announce:s=[],appendAnnounce:o=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(i=>i.toString()),this.announce=new Set(s.map(i=>i.toString())),this.appendAnnounce=new Set(o.map(i=>i.toString())),this.observed=new Dd(e,t),this.dnsMappings=new Ld(e,t),this.ipMappings=new kd(e,t),this.transportAddresses=new Nd(e,t),this.announceFilter=t.announceFilter??DA,this.observedAddressFilter=Ft(1024),this.addressVerificationTTL=t.addressVerificationTTL??m8.addressVerificationTTL,this.addressVerificationRetry=t.addressVerificationRetry??m8.addressVerificationRetry,this._updatePeerStoreAddresses=Tn(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=>F(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>F(e))}getAppendAnnounceAddrs(){return Array.from(this.appendAnnounce).map(e=>F(e))}getObservedAddrs(){return this.observed.getAll().map(e=>e.multiaddr)}addObservedAddr(e){let t=Q(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=rm(e,this.components.peerId),!this.ipMappings.has(e)&&(this.dnsMappings.has(e)||this.observed.add(e)))}confirmObservedAddr(e,t){e=rm(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=rm(e,this.components.peerId);let n=!0;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 s=n.multiaddr.toString();return e.has(s)?!1:(e.add(s),!0)}).map(n=>n.multiaddr);return this.announceFilter(t.map(n=>{let s=F(n);return s.getComponents().pop()?.value===this.components.peerId.toString()?s:s.encapsulate(`/p2p/${this.components.peerId.toString()}`)}))}getAddressesWithMetadata(){let e=this.getAnnounceAddrs();if(e.length>0)return this.components.transportManager.getListeners().forEach(s=>{s.updateAnnounceAddrs(e)}),e.map(s=>({multiaddr:s,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()}));let t=[];t=t.concat(this.components.transportManager.getAddrs().map(s=>this.transportAddresses.get(s,this.addressVerificationTTL)));let n=this.getAppendAnnounceAddrs();return n.length>0&&(this.components.transportManager.getListeners().forEach(s=>{s.updateAnnounceAddrs(n)}),t=t.concat(n.map(s=>({multiaddr:s,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(F(`/dns/${e}`))&&this._updatePeerStoreAddresses()}addPublicAddressMapping(e,t,n,s=t,o="tcp"){this.ipMappings.add(e,t,n,s,o),this.observed.removePrefixed(`/ip${Cr(n)?4:6}/${n}/${o}/${s}`)}removePublicAddressMapping(e,t,n,s=t,o="tcp"){this.ipMappings.remove(F(`/ip${Cr(n)?4:6}/${n}/${o}/${s}`))&&this._updatePeerStoreAddresses()}maybeUpgradeToIPMapping(e){if(this.ipMappings.has(e)||!dt(e))return!1;let t=Q(e);if(t.type!=="ip4"||Ei(t.host)===!0)return!1;let n=this.components.transportManager.getListeners(),s=[o=>An.exactMatch(o)||Eo.exactMatch(o),o=>bo.exactMatch(o),o=>C5.exactMatch(o)];for(let o of s){if(!o(e))continue;let i=n.filter(l=>l.getAddrs().filter(u=>Q(u).type==="ip4"&&o(u)).length>0);if(i.length!==1)continue;let a=i[0].getAddrs().filter(l=>!rc(l)).pop();if(a==null)continue;let c=Q(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 g8;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(g8||(g8={}));var Bd=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},Md=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},Di=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},Tc=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},Ud=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},Fd=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},$d=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},Ic=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},Kd=class extends Error{constructor(e="No transport was configured to listen on this address"){super(e),this.name="UnsupportedListenAddressError"}},Vd=class extends Error{constructor(e="Configured listen addresses could not be listened on"){super(e),this.name="UnsupportedListenAddressesError"}},Hd=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},qd=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},zd=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},fs=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},Co=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},Gd=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}},Wd=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}};var nm=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=pi())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>ql(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")}},NA=["metrics","connectionProtector","dns"],OA=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function y8(r={}){let e=new nm(r);return new Proxy(e,{get(n,s,o){if(typeof s=="string"&&!OA.includes(s)){let i=e.components[s];if(i==null&&!NA.includes(s))throw new Bd(`${s} not set`);return i}return Reflect.get(n,s,o)},set(n,s,o){return typeof s=="string"?e.components[s]=o:Reflect.set(n,s,o),!0}})}function w8(r){let e={};for(let t of Object.values(r.components))for(let n of BA(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of MA(t))if(e[n]!==!0)throw new Md(`Service "${UA(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function BA(r){return Array.isArray(r?.[ue])?r[ue]:[]}function MA(r){return Array.isArray(r?.[jt])?r[jt]:[]}function UA(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}function b8(r={}){return r.denyDialMultiaddr==null&&(r.denyDialMultiaddr=e=>An.matches(e)?!0:We(e)),r}var FA=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 $A(r,e,t){let n,s=new Promise((o,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:u}=FA(r),d=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(y){n(),i(y);return}c.push(p),t.count===c.length&&(n(),o(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)u(h,d);for(let h of t.rejectionEvents)a.includes(h)||u(h,f)};for(let h of a)l(h,d);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&o(c)});if(s.cancel=n,typeof t.timeout=="number"){let o=Lt(s,{milliseconds:t.timeout});return o.cancel=()=>{n(),o.clear()},o}return s}function Cc(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=$A(r,e,t),s=n.then(o=>o[0]);return s.cancel=n.cancel,s}var Z=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};function jd(r){if(Kr(r))return{peerId:r,multiaddrs:[]};let e=Array.isArray(r)?r:[r],t;if(e.length>0){let n=e[0].getComponents().findLast(s=>s.code===421)?.value;t=n==null?void 0:Be(n),e.forEach(s=>{if(!Qr(s))throw new $r("Invalid multiaddr");let o=s.getComponents().findLast(i=>i.code===421)?.value;if(o==null){if(t!=null)throw new E("Multiaddrs must all have the same peer id or have no peer id")}else{let i=Be(o);if(t?.equals(i)!==!0)throw new E("Multiaddrs must all have the same peer id or have no peer id")}})}return e=e.filter(n=>!x5.exactMatch(n)),{peerId:t,multiaddrs:e}}var KA=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function E8(r,e){let t=r?.streams?.map(s=>s.protocol)??[],n=e?.closableProtocols??KA;if(!(t.filter(s=>s!=null&&!n.includes(s)).length>0))try{await r?.close(e)}catch(s){r?.abort(s)}}function _c(r){let e=Q(r),t=e.cidr;if(e.type!=="ip4"&&e.type!=="ip6")throw new E(`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 E(`Multiaddr ${r} was not an IPv4 or IPv6 address`)}return new mo(e.host,t)}function sm(r){return!st.exactMatch(r)}function Yd(r,e,t){if(r==null||e==null)return;let n=e.filter(o=>o.status==="open").sort((o,i)=>o.direct?-1:i.direct?1:0).find(o=>o.limits==null);if(n==null||n.direct||t==null)return n;if(!t.some(o=>sm(o)))return n}var Qd=class{connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.allow=(t.allow??[]).map(n=>_c(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 s=new xt;for(let c of e){let l=c.remotePeer;if(!s.has(l)){s.set(l,0);try{let u=await this.peerStore.get(l);s.set(l,[...u.tags.values()].reduce((d,f)=>d+f.value,0))}catch(u){u.name!=="NotFoundError"&&this.log.error("error loading peer tags - %e",u)}}}let o=this.sortConnections(e,s),i=Math.max(t-n,0),a=[];for(let c of o)if(this.log("too many connections open - closing a connection to %p",c.remotePeer),this.allow.some(u=>{if(dt(c.remoteAddr)){let d=Q(c.remoteAddr);return u.contains(d.host)}return!0})||a.push(c),a.length===i)break;await Promise.all(a.map(async c=>{await E8(c,{signal:AbortSignal.timeout(1e3)})})),this.events.safeDispatchEvent("connection:prune",{detail:a})}sortConnections(e,t){return e.sort((n,s)=>{let o=n.timeline.open,i=s.timeline.open;return o<i?1:o>i?-1:0}).sort((n,s)=>n.direction==="outbound"&&s.direction==="inbound"?1:n.direction==="inbound"&&s.direction==="outbound"?-1:0).sort((n,s)=>n.streams.length>s.streams.length?1:n.streams.length<s.streams.length?-1:0).sort((n,s)=>{let o=t.get(n.remotePeer)??0,i=t.get(s.remotePeer)??0;return o>i?1:o<i?-1:0})}};var x8="last-dial-failure",v8="last-dial-success";var S8=100,Xd=50;function VA(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function A8(r){return r.sort((e,t)=>D5(e.multiaddr,t.multiaddr)||N5(e.multiaddr,t.multiaddr)||O5(e.multiaddr,t.multiaddr)||VA(e,t)||k5(e.multiaddr,t.multiaddr))}var Zd=class extends AggregateError{static name="DNSQueryFailedError";name="DNSQueryFailedError"};var im=Vo(I8(),1);function am(r,e,t){let n=0,s=r.length;for(;s>0;){let o=Math.trunc(s/2),i=n+o;t(r[i],e)<=0?(n=++i,s-=o+1):s=o}return n}var zA=100,Ni=class{#e=[];#t=0;enqueue(e,t){let{priority:n=0,id:s}=t??{},{size:o}=this,i={priority:n,id:s,run:e};if(o===0){this.#e.length=0,this.#t=0,this.#e.push(i);return}if(this.#e.at(-1).priority>=n){this.#e.push(i);return}this.#r();let a=am(this.#e,i,(c,l)=>l.priority-c.priority);this.#e.splice(a,0,i)}setPriority(e,t){let n=this.#e.findIndex((o,i)=>i>=this.#t&&o.id===e);if(n===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[s]=this.#e.splice(n,1);this.enqueue(s.run,{priority:t,id:e})}remove(e){let t=this.#e.findIndex((n,s)=>s<this.#t?!1:typeof e=="string"?n.id===e:n.run===e);t!==-1&&this.#e.splice(t,1)}dequeue(){if(this.#t===this.#e.length)return;let e=this.#e[this.#t];return this.#t++,this.#t===this.#e.length?(this.#e.length=0,this.#t=0):this.#t>zA&&this.#t>this.#e.length/2&&this.#r(),e?.run}filter(e){let t=[];for(let n=this.#t;n<this.#e.length;n++){let s=this.#e[n];s.priority===e.priority&&t.push(s.run)}return t}get size(){return this.#e.length-this.#t}#r(){this.#t!==0&&(this.#e.splice(0,this.#t),this.#t=0)}};var Pc=class extends im.default{#e;#t;#r=0;#h;#m=!1;#b=!1;#c;#C=0;#E=0;#l;#u;#a;#i=[];#o=0;#n;#_;#s=0;#g;#d;#D=1n;#y=new Map;#x=new Set;timeout;constructor(e){if(super(),e={carryoverIntervalCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:Ni,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.#h=e.intervalCap,this.#c=e.interval,this.#a=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.#d=e.autoStart===!1,this.#K()}#v(e){for(;this.#o<this.#i.length;){let n=this.#i[this.#o];if(n!==void 0&&e-n>=this.#c)this.#o++;else break}(this.#o>100&&this.#o>this.#i.length/2||this.#o===this.#i.length)&&(this.#i=this.#i.slice(this.#o),this.#o=0)}#N(e){this.#a?this.#i.push(e):this.#r++}#O(){this.#a?this.#i.length>this.#o&&this.#i.pop():this.#r>0&&this.#r--}#S(){return this.#i.length-this.#o}get#B(){return this.#t?!0:this.#a?this.#S()<this.#h:this.#r<this.#h}get#M(){return this.#s<this.#g}#U(){this.#s--,this.#s===0&&this.emit("pendingZero"),this.#w(),this.emit("next")}#F(){this.#u=void 0,this.#L(),this.#P()}#$(e){if(this.#a){if(this.#v(e),this.#S()>=this.#h){let n=this.#i[this.#o],s=this.#c-(e-n);return this.#A(s),!0}return!1}if(this.#l===void 0){let t=this.#C-e;if(t<0){if(this.#E>0){let n=e-this.#E;if(n<this.#c)return this.#A(this.#c-n),!0}this.#r=this.#e?this.#s:0}else return this.#A(t),!0}return!1}#A(e){this.#u===void 0&&(this.#u=setTimeout(()=>{this.#F()},e))}#T(){this.#l&&(clearInterval(this.#l),this.#l=void 0)}#R(){this.#u&&(clearTimeout(this.#u),this.#u=void 0)}#w(){if(this.#n.size===0){if(this.#T(),this.emit("empty"),this.#s===0){if(this.#R(),this.#a&&this.#o>0){let t=Date.now();this.#v(t)}this.emit("idle")}return!1}let e=!1;if(!this.#d){let t=Date.now(),n=!this.#$(t);if(this.#B&&this.#M){let s=this.#n.dequeue();this.#t||(this.#N(t),this.#p()),this.emit("active"),s(),n&&this.#P(),e=!0}}return e}#P(){this.#t||this.#l!==void 0||this.#a||(this.#l=setInterval(()=>{this.#L()},this.#c),this.#C=Date.now()+this.#c)}#L(){this.#a||(this.#r===0&&this.#s===0&&this.#l&&this.#T(),this.#r=this.#e?this.#s:0),this.#I(),this.#p()}#I(){for(;this.#w(););}get concurrency(){return this.#g}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.#g=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.#D++).toString()},new Promise((n,s)=>{let o=Symbol(`task-${t.id}`),i=()=>{},a=async()=>{i(),this.#s++,this.#y.set(o,{id:t.id,priority:t.priority??0,startTime:Date.now(),timeout:t.timeout});let l;try{try{t.signal?.throwIfAborted()}catch(f){throw this.#V(),this.#y.delete(o),f}this.#E=Date.now();let u=e({signal:t.signal});if(t.timeout&&(u=Lt(Promise.resolve(u),{milliseconds:t.timeout,message:`Task timed out after ${t.timeout}ms (queue has ${this.#s} running, ${this.#n.size} waiting)`})),t.signal){let{signal:f}=t;u=Promise.race([u,new Promise((h,p)=>{l=()=>{p(f.reason)},f.addEventListener("abort",l,{once:!0})})])}let d=await u;n(d),this.emit("completed",d)}catch(u){s(u),this.emit("error",u)}finally{l&&t.signal?.removeEventListener("abort",l),this.#y.delete(o),queueMicrotask(()=>{this.#U()})}};this.#n.enqueue(a,t);let c=()=>{if(this.#n instanceof Ni){this.#n.remove(a);return}this.#n.remove?.(t.id)};if(t.signal){let{signal:l}=t,u=()=>{i(),c(),s(l.reason),this.#w(),this.emit("next")};if(i=()=>{l.removeEventListener("abort",u),this.#x.delete(i)},l.aborted){u();return}l.addEventListener("abort",u,{once:!0}),this.#x.add(i)}this.emit("add"),this.#w()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#d?(this.#d=!1,this.#I(),this):this}pause(){this.#d=!0}clear(){for(let e of this.#x)e();this.#n=new this.#_,this.#T(),this.#k(),this.emit("empty"),this.#s===0&&(this.#R(),this.emit("idle")),this.emit("next")}async onEmpty(){this.#n.size!==0&&await this.#f("empty")}async onSizeLessThan(e){this.#n.size<e||await this.#f("next",()=>this.#n.size<e)}async onIdle(){this.#s===0&&this.#n.size===0||await this.#f("idle")}async onPendingZero(){this.#s!==0&&await this.#f("pendingZero")}async onRateLimit(){this.isRateLimited||await this.#f("rateLimit")}async onRateLimitCleared(){this.isRateLimited&&await this.#f("rateLimitCleared")}onError(){return new Promise((e,t)=>{let n=s=>{this.off("error",n),t(s)};this.on("error",n)})}async#f(e,t){return new Promise(n=>{let s=()=>{t&&!t()||(this.off(e,s),n())};this.on(e,s)})}get size(){return this.#n.size}sizeBy(e){return this.#n.filter(e).length}get pending(){return this.#s}get isPaused(){return this.#d}#K(){this.#t||(this.on("add",()=>{this.#n.size>0&&this.#p()}),this.on("next",()=>{this.#p()}))}#p(){this.#t||this.#b||(this.#b=!0,queueMicrotask(()=>{this.#b=!1,this.#k()}))}#V(){this.#t||(this.#O(),this.#p())}#k(){let e=this.#m;if(this.#t||this.#n.size===0){e&&(this.#m=!1,this.emit("rateLimitCleared"));return}let t;if(this.#a){let s=Date.now();this.#v(s),t=this.#S()}else t=this.#r;let n=t>=this.#h;n!==e&&(this.#m=n,this.emit(n?"rateLimit":"rateLimitCleared"))}get isRateLimited(){return this.#m}get isSaturated(){return this.#s===this.#g&&this.#n.size>0||this.isRateLimited&&this.#n.size>0}get runningTasks(){return[...this.#y.values()].map(e=>({...e,timeoutRemaining:e.timeout?Math.max(0,e.startTime+e.timeout-Date.now()):void 0}))}};function ef(r){let e=[nr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var cm=60;function tf(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:nr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:nr[e.type],TTL:e.TTL??e.ttl??cm,data:e.data instanceof Uint8Array?k(e.data):e.data}))}}var GA=4;function lm(r,e={}){let t=new Pc({concurrency:e.queryConcurrency??GA});return async(n,s={})=>{let o=s?.logger?.forComponent("dns:dns-json-over-https"),i=new URLSearchParams;i.set("name",n),ef(s.types).forEach(c=>{i.append("type",nr[c])}),s.onProgress?.(new Z("dns:query",n)),o?.("GET %s",`${r}?${i}`);let a=await t.add(async()=>{let c=await fetch(`${r}?${i}`,{headers:{accept:"application/dns-json"},signal:s?.signal});if(o?.("GET %s %d",c.url,c.status),c.status!==200)throw new Error(`Unexpected HTTP status: ${c.status} - ${c.statusText}`);let l=tf(await c.json());return s.onProgress?.(new Z("dns:response",l)),l},{signal:s.signal});if(a==null)throw new Error("No DNS response received");return a}}function C8(){return[lm("https://cloudflare-dns.com/dns-query"),lm("https://dns.google/resolve")]}var P8=Vo(R8(),1);var um=class{lru;constructor(e){this.lru=(0,P8.default)(e)}get(e,t){let n=!0,s=[];for(let o of t){let i=this.getAnswers(e,o);if(i.length===0){n=!1;break}s.push(...i)}if(n)return tf({answers:s})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,s=this.lru.get(n);if(s!=null){let o=s.filter(i=>i.expires>Date.now()).map(({expires:i,value:a})=>({...a,TTL:Math.round((i-Date.now())/1e3),type:nr[a.type]}));return o.length===0&&this.lru.remove(n),o}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,s=this.lru.get(n)??[];s.push({expires:Date.now()+(t.TTL??cm)*1e3,value:t}),this.lru.set(n,s)}remove(e,t){let n=`${e.toLowerCase()}-${t}`;this.lru.remove(n)}clear(){this.lru.clear()}};function L8(r){return new um(r)}var WA=1e3,rf=class{resolvers;cache;logger;constructor(e){this.resolvers={},this.cache=L8(e.cacheSize??WA),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["."]=C8())}async query(e,t={}){let n=ef(t.types),s=t.cached!==!1?this.cache.get(e,n):void 0;if(s!=null)return t.onProgress?.(new Z("dns:cache",s)),s;let o=`${e.split(".").pop()}.`,i=(this.resolvers[o]??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 u of l.Answer)this.cache.add(e,u);return l}catch(l){a.push(l),t.onProgress?.(new Z("dns:error",l))}}throw new Zd(a,`DNS lookup of ${e} ${n} failed`)}};var nr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(nr||(nr={}));function k8(r={}){return new rf(r)}var dm=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 o=await this.getDNS(t).query(`_dnsaddr.${n}`,{signal:t?.signal,types:[nr.TXT]}),i=e.getComponents().find(c=>c.name==="p2p")?.value,a=[];for(let c of o.Answer){let l=c.data.replace(/["']/g,"").trim().split("=")[1];l!=null&&(i!=null&&!l.includes(i)||a.push(F(l)))}return a}getDNS(e){return e.dns!=null?e.dns:(this.dns==null&&(this.dns=k8()),this.dns)}},Lc=new dm;async function fm(r,e,t){let n=t.depth??0;if(n>(t.maxRecursiveDepth??32))throw new Wd("Max recursive depth reached");let s=!1,o=[];for(let i of Object.values(e))if(i.canResolve(r)){s=!0;let a=await i.resolve(r,t);for(let c of a)o.push(...await fm(c,e,{...t,depth:n+1}))}return s===!1&&o.push(r),o}var Oi={maxParallelDials:Xd,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:1e4,addressDialTimeout:6e3,resolvers:{dnsaddr:Lc}},nf=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;addressDialTimeout;shutDownController;connections;log;resolvers;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??Oi.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??Oi.maxDialQueueLength,this.dialTimeout=t.dialTimeout??Oi.dialTimeout,this.addressDialTimeout=t.addressDialTimeout??Oi.addressDialTimeout,this.connections=t.connections??new xt,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.resolvers=t.resolvers??Oi.resolvers,this.shutDownController=new AbortController,this.shutDownController.signal,this.queue=new sd({concurrency:t.maxParallelDials??Oi.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("failure",n=>{n.detail?.error.name!==Wt.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:s}=jd(e);if(n!=null&&t.force!==!0){let i=Yd(n,this.connections.get(n),s);if(i!=null)return this.log("already connected to %a",i.remoteAddr),t.onProgress?.(new Z("dial-queue:already-connected",i)),i}let o=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 s)if(a.has(c.toString()))return!0;return!1});if(o!=null){this.log("joining existing dial target for %p",n);for(let i of s)o.options.multiaddrs.add(i.toString());return t.onProgress?.(new Z("dial-queue:already-in-dial-queue")),o.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new Vn("Dial queue is full");return this.log("creating dial target for %p",n,s.map(i=>i.toString())),t.onProgress?.(new Z("dial-queue:add-to-dial-queue")),this.queue.add(async i=>{i.onProgress?.(new Z("dial-queue:start-dial"));let a=me([this.shutDownController.signal,i.signal]);try{return await this.dialPeer(i,a)}finally{a.clear()}},{peerId:n,priority:t.priority??ym,multiaddrs:new Set(s.map(i=>i.toString())),signal:t.signal??AbortSignal.timeout(this.dialTimeout),onProgress:t.onProgress})}async dialPeer(e,t){let n=e.peerId,s=e.multiaddrs,o=new Set,i=e.multiaddrs.size===0,a=0,c=0,l=[];for(this.log("starting dial to %p",n);i||s.size>0;){c++,i=!1;let u=[],d=new Set(e.multiaddrs);s.clear(),this.log("calculating addrs to dial %p from %s",n,[...d]);let f=await this.calculateMultiaddrs(n,d,{...e,signal:t});for(let h of f){if(o.has(h.multiaddr.toString())){this.log.trace("skipping previously failed multiaddr %a while dialing %p",h.multiaddr,n);continue}u.push(h)}this.log("%s dial to %p with %s",c===1?"starting":"continuing",n,u.map(h=>h.multiaddr.toString())),e?.onProgress?.(new Z("dial-queue:calculated-addresses",u));for(let h of u){if(a===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",a,e.peerId),new Vn("Peer had more than maxPeerAddrsToDial");a++;let p=me([t,AbortSignal.timeout(this.addressDialTimeout)]);try{let y=await this.components.transportManager.dial(h.multiaddr,{...e,signal:p});this.log("dial to %a succeeded",h.multiaddr);try{await this.components.peerStore.merge(y.remotePeer,{multiaddrs:[y.remoteAddr],metadata:{[v8]:C(Date.now().toString())}})}catch(m){this.log.error("could not update last dial failure key for %p - %e",n,m)}return y}catch(y){if(this.log.error("dial failed to %a - %e",h.multiaddr,y),o.add(h.multiaddr.toString()),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[x8]:C(Date.now().toString())}})}catch(m){this.log.error("could not update last dial failure key for %p - %e",n,m)}if(t.aborted)throw new Kn(y.message);l.push(y)}finally{p.clear()}}}throw l.length===1?l[0]:new AggregateError(l,"All multiaddr dials failed")}async calculateMultiaddrs(e,t=new Set,n={}){let s=[...t].map(d=>({multiaddr:F(d),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new Vn("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new Ic("The dial request is blocked by gater.allowDialPeer");if(s.length===0){this.log("loading multiaddrs for %p",e);try{let d=await this.components.peerStore.get(e);s.push(...d.addresses),this.log("loaded multiaddrs for %p",e,s.map(({multiaddr:f})=>f.toString()))}catch(d){if(d.name!=="NotFoundError")throw d}}if(s.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let d=await this.components.peerRouting.findPeer(e,n);this.log("found multiaddrs for %p in the peer routing",e,s.map(({multiaddr:f})=>f.toString())),s.push(...d.multiaddrs.map(f=>({multiaddr:f,isCertified:!1})))}catch(d){d.name==="NoPeerRoutersError"?this.log("no peer routers configured",e):this.log.error("looking up multiaddrs for %p in the peer routing failed - %e",e,d)}}}let o=(await Promise.all(s.map(async d=>{let f=await fm(d.multiaddr,this.resolvers,{dns:this.components.dns,log:this.log,...n});return f.length===1&&f[0].equals(d.multiaddr)?d:f.map(h=>({multiaddr:h,isCertified:!1}))}))).flat();if(e!=null){let d=`/p2p/${e.toString()}`;o=o.map(f=>f.multiaddr.getComponents().pop()?.name!=="p2p"?{multiaddr:f.multiaddr.encapsulate(d),isCertified:f.isCertified}:f)}let i=o.filter(d=>{if(this.components.transportManager.dialTransportForMultiaddr(d.multiaddr)==null)return!1;let f=d.multiaddr.getComponents().findLast(h=>h.code===421)?.value;return e!=null&&f!=null?e.equals(f):!0}),a=new Map;for(let d of i){let f=d.multiaddr.toString(),h=a.get(f);if(h!=null){h.isCertified=h.isCertified||d.isCertified||!1;continue}a.set(f,d)}let c=[...a.values()];if(c.length===0)throw new Hd(`The dial request has no valid addresses for peer: ${e?.toString()??"unknown peer"}`);let l=[];for(let d of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(d.multiaddr)||l.push(d);let u=this.addressSorter==null?A8(l):l.sort(this.addressSorter);if(u.length===0)throw new Ic(`The connection gater denied all addresses in the dial request for peer: ${e?.toString()??"unknown peer"}`);return this.log.trace("addresses for %p before filtering",e??"unknown peer",o.map(({multiaddr:d})=>d.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",u.map(({multiaddr:d})=>d.toString())),u}async isDialable(e,t={}){Array.isArray(e)||(e=[e]);try{let n=await this.calculateMultiaddrs(void 0,new Set(e.map(s=>s.toString())),t);return t.runOnLimitedConnection===!1?n.find(s=>!st.matches(s.multiaddr))!=null:!0}catch{}return!1}};var jA=Object.prototype.toString,YA=r=>jA.call(r)==="[object Error]",QA=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 wm(r){if(!(r&&YA(r)&&r.name==="TypeError"&&typeof r.message=="string"))return!1;let{message:t,stack:n}=r;return t==="Load failed"||t.startsWith("Load failed (")&&t.endsWith(")")?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:QA.has(t)}function XA(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 sf(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}.`)}}function bm(r,e){if(e!==void 0&&typeof e!="function")throw new TypeError(`Expected \`${r}\` to be a function.`)}var Em=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 ZA(r,e){let t=Math.max(1,r+1),n=e.randomize?Math.random()+1:1,s=Math.round(n*e.minTimeout*e.factor**(t-1));return s=Math.min(s,e.maxTimeout),s}function of(r,e){return Number.isFinite(e)?e-(performance.now()-r):e}async function JA(r,e){r<=0||await new Promise((t,n)=>{let s=()=>{clearTimeout(o),e.signal?.removeEventListener("abort",s),n(e.signal.reason)},o=setTimeout(()=>{e.signal?.removeEventListener("abort",s),t()},r);e.unref&&o.unref?.(),e.signal?.addEventListener("abort",s,{once:!0})})}async function eT({error:r,attemptNumber:e,retriesConsumed:t,startTime:n,options:s}){let o=r instanceof Error?r:new TypeError(`Non-error was thrown: "${r}". You should only throw errors.`);if(o instanceof Em)throw o.originalError;let i=Number.isFinite(s.retries)?Math.max(0,s.retries-t):s.retries,a=s.maxRetryTime??Number.POSITIVE_INFINITY,c=ZA(t,s);if(of(n,a)<=0){let g=Object.freeze({error:o,attemptNumber:e,retriesLeft:i,retriesConsumed:t,retryDelay:0});throw await s.onFailedAttempt(g),o}let u=Object.freeze({error:o,attemptNumber:e,retriesLeft:i,retriesConsumed:t,retryDelay:i>0?c:0}),d=await s.shouldConsumeRetry(u),f=d&&i>0?c:0,h=Object.freeze({error:o,attemptNumber:e,retriesLeft:i,retriesConsumed:t,retryDelay:f});if(await s.onFailedAttempt(h),of(n,a)<=0||of(n,a)<=0||i<=0||o instanceof TypeError&&!wm(o)||!await s.shouldRetry(h))throw o;let y=of(n,a);if(y<=0)throw o;if(!d)return s.signal?.throwIfAborted(),!1;let m=Math.min(f,y);return s.signal?.throwIfAborted(),await JA(m,s),s.signal?.throwIfAborted(),!0}async function xm(r,e={}){if(e={...e},XA(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,bm("onFailedAttempt",e.onFailedAttempt),bm("shouldRetry",e.shouldRetry),bm("shouldConsumeRetry",e.shouldConsumeRetry),sf("factor",e.factor,{min:0,allowInfinity:!1}),sf("minTimeout",e.minTimeout,{min:0,allowInfinity:!1}),sf("maxTimeout",e.maxTimeout,{min:0,allowInfinity:!0}),sf("maxRetryTime",e.maxRetryTime,{min:0,allowInfinity:!0}),e.factor>0||(e.factor=1),e.signal?.throwIfAborted();let t=0,n=0,s=performance.now();for(;!Number.isFinite(e.retries)||n<=e.retries;){t++;try{e.signal?.throwIfAborted();let o=await r(t);return e.signal?.throwIfAborted(),o}catch(o){await eT({error:o,attemptNumber:t,retriesConsumed:n,startTime:s,options:e})&&n++}}throw new Error("Retry attempts exhausted without throwing an error.")}var af=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 Kt({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(s=>{this.log.error("failed to maybe reconnect to %p - %e",n.detail,s)})})}async maybeReconnect(e){if(!this.started)return;let t=await this.peerStore.get(e);D8(t)&&(this.queue.has(e)||this.queue.add(async n=>{await xm(async s=>{if(this.started)try{await this.connectionManager.openConnection(e,{signal:n?.signal})}catch(o){throw this.log("reconnecting to %p attempt %d of %d failed - %e",e,s,this.retries,o),o}},{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 s={};[...t.tags.keys()].forEach(o=>{o.startsWith(Fs)&&(s[o]=void 0)}),await this.peerStore.merge(e,{tags:s}),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=>D8(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 D8(r){for(let e of r.tags.keys())if(e.startsWith(Fs))return!0;return!1}var ym=50,vm={maxConnections:S8,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},cf=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??vm.maxConnections,this.maxConnections<1)throw new E("Connection Manager maxConnections must be greater than 0");this.connections=new xt,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=>_c(F(n))),this.deny=(t.deny??[]).map(n=>_c(F(n))),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??vm.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new Pi({points:t.inboundConnectionThreshold??vm.inboundConnectionThreshold,duration:1}),this.connectionPruner=new Qd({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{allow:t.allow?.map(n=>F(n))}),this.dialQueue=new nf(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??Xd,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??1e4,addressDialTimeout:t.addressDialTimeout??6e3,resolvers:t.resolvers??{dnsaddr:Lc},connections:this.connections}),this.reconnectQueue=new af({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 s of n.streams){let o=`${s.direction} ${s.protocol??"unnegotiated"}`;e[o]=(e[o]??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 s of n){let o={};for(let i of s.streams){let a=`${i.direction} ${i.protocol??"unnegotiated"}`;o[a]=(o[a]??0)+1}for(let[i,a]of Object.entries(o))e[i]=e[i]??[],e[i].push(a)}let t={};for(let[n,s]of Object.entries(e)){s=s.sort((i,a)=>i-a);let o=Math.floor(s.length*.9);t[n]=s[o]}return t}}),this.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),await yr(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 Vr(this.reconnectQueue,this.dialQueue,this.connectionPruner);let e=[];for(let t of this.connections.values())for(let n of t)e.push(Promise.all([Cc(n,"close",{signal:AbortSignal.timeout(500)}),n.close({signal:AbortSignal.timeout(500)})]).catch(s=>{n.abort(s)}));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 E("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,s=!this.connections.has(n),o=this.connections.get(n)??[];o.push(t),this.connections.set(n,o),n.publicKey!=null&&n.type==="RSA"&&await this.peerStore.patch(n,{publicKey:n.publicKey}),s&&this.events.safeDispatchEvent("peer:connect",{detail:t.remotePeer})}onDisconnect(e){let{detail:t}=e,n=t.remotePeer,o=(this.connections.get(n)??[]).filter(i=>i.id!==t.id);this.connections.set(n,o),o.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(),t?.onProgress?.(new Z("connection:open",e));let{peerId:n,multiaddrs:s}=jd(e);if(this.peerId.equals(n))throw new zo("Can not dial self");if(n!=null&&t.force!==!0){this.log("dial %p",n);let c=Yd(n,this.getConnections(n),s);if(c!=null)return this.log("had an existing connection to %p as %a",n,c.remoteAddr),t.onProgress?.(new Z("dial-queue:already-connected")),t.onProgress?.(new Z("connection:opened",c)),c}let o=await this.dialQueue.dial(e,{...t,priority:t.priority??ym});if(o.status!=="open")throw new Ns("Remote closed connection during opening");let i=this.connections.get(o.remotePeer);i==null&&(i=[],this.connections.set(o.remotePeer,i));let a=!1;for(let c of i)if(c.id===o.id&&(a=!0),t.force!==!0&&c.id!==o.id&&c.remoteAddr.equals(o.remoteAddr))return o.abort(new $r("Duplicate multiaddr connection")),c;return a||i.push(o),t.onProgress?.(new Z("connection:opened",o)),o}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 s=>{try{await Promise.all([Cc(s,"close",t),s.close(t)])}catch(o){s.abort(o)}}))}acceptIncomingConnection(e){if(this.deny.some(s=>{if(dt(e.remoteAddr)){let o=Q(e.remoteAddr);return s.contains(o.host)}return!1}))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(s=>{if(dt(e.remoteAddr)){let o=Q(e.remoteAddr);return s.contains(o.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(dt(e.remoteAddr)){let s=Q(e.remoteAddr);try{this.inboundConnectionRateLimiter.consume(s.host,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,s.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=>F(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var nT=1e4,sT="1.0.0",oT="ping",iT="ipfs",N8=32,aT=!0,lf=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??iT}/${oT}/${sT}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??nT,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??aT,this.timeout=new Lr({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[ue]=["@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}),s;try{s=await e.newStream(this.protocol,{signal:n,runOnLimitedConnection:!0});let o=Xu(s);t=Date.now(),await Promise.all([o.write(crypto.getRandomValues(new Uint8Array(N8)),{signal:n}),o.read({bytes:N8,signal:n})]),e.rtt=Date.now()-t,await s.close({signal:n})}catch(o){if(s?.abort(o),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 uf=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],s)=>({...s,cid:n.toString()}),getAttributesFromYieldedValue:(n,s)=>({...s,providers:[...Array.isArray(s.providers)?s.providers:[],n.id.toString()]})})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.contentRouting.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],s)=>({...s,cid:n.toString()})})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("libp2p.contentRouting.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],s)=>({...s,cid:n.toString()})})??this.cancelReprovide,this.put=e.metrics?.traceFunction("libp2p.contentRouting.put",this.put.bind(this),{optionsIndex:2,getAttributesFromArgs:([n])=>({key:k(n,"base36")})})??this.put,this.get=e.metrics?.traceFunction("libp2p.contentRouting.get",this.get.bind(this),{optionsIndex:1,getAttributesFromArgs:([n])=>({key:k(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 Di("No content routers available");let n=this,s=new er;for await(let o of In(...n.routers.filter(i=>i.findProviders instanceof Function).map(i=>i.findProviders(e,t))))o!=null&&(o.multiaddrs.length>0&&await this.components.peerStore.merge(o.id,{multiaddrs:o.multiaddrs},t),!s.has(o.id)&&(s.add(o.id),yield o))}async provide(e,t={}){if(this.routers.length===0)throw new Di("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 Di("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(s=>s.put instanceof Function).map(async s=>{await s.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 df=globalThis.CustomEvent??Event;async function*Rn(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered??!1,s=new EventTarget,o=[],i=qe(),a=qe(),c=!1,l,u=!1;s.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let p of r){if(o.length===t&&(i=qe(),await i.promise),u)break;let y={done:!1};o.push(y),p().then(m=>{y.done=!0,y.ok=!0,y.value=m,s.dispatchEvent(new df("task-complete"))},m=>{y.done=!0,y.err=m,s.dispatchEvent(new df("task-complete"))})}c=!0,s.dispatchEvent(new df("task-complete"))}catch(p){l=p,s.dispatchEvent(new df("task-complete"))}});function d(){return n?o[0]?.done:!!o.find(p=>p.done)}function*f(){for(;o.length>0&&o[0].done;){let p=o[0];if(o.shift(),p.ok)yield p.value;else throw u=!0,i.resolve(),p.err;i.resolve()}}function*h(){for(;d();)for(let p=0;p<o.length;p++)if(o[p].done){let y=o[p];if(o.splice(p,1),p--,y.ok)yield y.value;else throw u=!0,i.resolve(),y.err;i.resolve()}}for(;;){if(d()||(a=qe(),await a.promise),l!=null||(n?yield*f():yield*h(),l!=null))throw l;if(c&&o.length===0)break}}var ff=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],s)=>({...s,peer:n.toString()})})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.peerRouting.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],s)=>({...s,key:k(n,"base36")}),getAttributesFromYieldedValue:(n,s)=>({...s,peers:[...Array.isArray(s.peers)?s.peers:[],n.id.toString()]})})??this.getClosestPeers}[Symbol.toStringTag]="@libp2p/peer-routing";async findPeer(e,t){if(this.routers.length===0)throw new Tc("No peer routers available");if(e.toString()===this.peerId.toString())throw new Ud("Should not try to find self");let n=this,s=In(...this.routers.filter(o=>o.findPeer instanceof Function).map(o=>(async function*(){try{yield await o.findPeer(e,t)}catch(i){n.log.error("router failed to find peer - %e",i)}})()));for await(let o of s)if(o!=null)return o.multiaddrs.length>0&&await this.peerStore.merge(o.id,{multiaddrs:o.multiaddrs},t),o;throw new ke}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Tc("No peer routers available");let n=this,s=Ft(1024);for await(let o of Rn((async function*(){let i=In(...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}})()))o!=null&&(o.multiaddrs.length>0&&await this.peerStore.merge(o.id,{multiaddrs:o.multiaddrs},t),!s.has(o.id.toMultihash().bytes)&&(s.add(o.id.toMultihash().bytes),yield o))}};var hf=class extends oe{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=me([this.shutdownController.signal,e?.signal]);try{for(;;)this.needNext?.resolve(),this.needNext=qe(),yield(await Cc(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=me([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 s=crypto.getRandomValues(new Uint8Array(32)),o=Date.now();for await(let i of this.peerRouting.getClosestPeers(s,{signal:e}))e.aborted&&this.log("aborting walk"),e.throwIfAborted(),this.log("found peer %p after %dms for %d walkers",i.id,Date.now()-o,this.walkers),n++,this.safeDispatchEvent("walk:peer",{detail:i}),this.walkers===1&&this.needNext!=null&&(this.log("wait for need next"),await De(this.needNext.promise,e)),o=Date.now();this.log("walk iteration for %b and %d walkers finished, found %d peers",s,this.walkers,n)}catch(s){this.log.error("random walk errored - %e",s),this.safeDispatchEvent("walk:error",{detail:s})}this.log("no walkers left, ended walk")}).catch(s=>{this.log.error("random walk errored - %e",s)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var Sm=32,Am=64,pf=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,s]of this.topologies)t[n]=s.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 Fd(`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 $d(`Handler already registered for protocol ${e}`);this.handlers.set(e,{handler:t,options:{maxInboundStreams:Sm,maxOutboundStreams:Am,...n}}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]},n)}async unhandle(e,t){(Array.isArray(e)?e:[e]).forEach(s=>{this.handlers.delete(s)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()},t)}async register(e,t){if(t==null)throw new E("invalid topology");let n=`${(Math.random()*1e9).toString(36)}${Date.now()}`,s=this.topologies.get(e);return s==null&&(s=new Map,this.topologies.set(e,s)),s.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 s=await this.components.peerStore.get(t,n);for(let o of s.protocols){let i=this.topologies.get(o);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(s){if(s.name==="NotFoundError")return;this.log.error("could not inform topologies of disconnecting peer %p - %e",t,s)}}async _onPeerUpdate(e){let{peer:t,previous:n}=e.detail,s=(n?.protocols??[]).filter(o=>!t.protocols.includes(o));try{for(let o of s){let i=this.topologies.get(o);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(o){this.log.error("could not inform topologies of updated peer %p - %e",t.id,o)}}async _onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,s=e.detail.peerId;try{for(let o of t){let i=this.topologies.get(o);i!=null&&await Promise.all([...i.values()].map(async a=>{n.limits!=null&&a.notifyOnLimitedConnection!==!0||a.filter?.has(s)!==!0&&(a.filter?.add(s),await a.onConnect?.(s,n))}))}}catch(o){this.log.error("could not inform topologies of updated peer after identify %p - %e",s,o)}}};var mf=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??fa.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new E("Transport must have a valid tag");if(this.transports.has(t))throw new E(`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 s=n.pop();s!=null&&e.push(s.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 Gd(`No transport available for address ${String(e)}`);return t?.onProgress?.(new Z("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(o=>{t.errors.set(o.toString(),new Kd)});let n=[];for(let[o,i]of this.transports.entries()){let a=i.listenFilter(e);for(let c of a){this.log("creating listener for %s on %a",o,c);let l=i.createListener({upgrader:this.components.upgrader}),u=this.listeners.get(o)??[];u==null&&(u=[],this.listeners.set(o,u)),u.push(l),l.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:l})}),l.addEventListener("close",()=>{let d=u.findIndex(f=>f===l);u.splice(d,1),this.components.events.safeDispatchEvent("transport:close",{detail:l})}),Rp.matches(c)?t.ipv4.attempts++:Pp.matches(c)&&t.ipv6.attempts++,n.push(l.listen(c).then(()=>{t.errors.delete(c.toString()),Rp.matches(c)&&t.ipv4.success++,Pp.matches(c)&&t.ipv6.success++},d=>{throw this.log.error("transport %s could not listen on address %a - %e",o,c,d),t.errors.set(c.toString(),d),d}))}}let s=await Promise.allSettled(n);if(!(s.length>0&&s.every(o=>o.status==="fulfilled"))){if(this.ipv6Unsupported(t)){this.log("all IPv4 addresses succeed but all IPv6 failed");return}if(this.faultTolerance===fa.NO_FATAL){this.log("failed to listen on any address but fault tolerance allows this");return}throw new Vd(`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:
|
|
13
|
+
${[...t.errors.entries()].map(([o,i])=>`
|
|
14
|
+
${o}: ${`${cT(i)}`.split(`
|
|
15
|
+
`).join(`
|
|
16
|
+
`)}
|
|
17
|
+
`).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 s=t.pop();s!=null&&n.push(s.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 cT(r){return r.stack!=null&&r.stack.trim()!==""?r.stack:r.message!=null?r.message:r.toString()}var Zr="/multistream/1.0.0";var lT=C(`
|
|
18
|
+
`);async function kc(r,e){let n=(await r.read(e)).subarray();if(n.byteLength===0||n[n.length-1]!==lT[0])throw new se("Missing newline");return k(n).trimEnd()}async function Bi(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"),s=us(r,{...t,maxDataLength:1024});for(let o=0;o<e.length;o++){let i=e[o],a;if(o===0){n.trace('write ["%s", "%s"]',Zr,i);let c=C(`${Zr}
|
|
19
|
+
`),l=C(`${i}
|
|
20
|
+
`);if(await s.writeV([c,l],t),n.trace("reading multistream-select header"),a=await kc(s,t),n.trace('read "%s"',a),a!==Zr){n.error("did not read multistream-select header from response");break}}else n.trace('write "%s"',i),await s.write(C(`${i}
|
|
21
|
+
`),t);if(n.trace("reading protocol response"),a=await kc(s,t),n.trace('read "%s"',a),a===i)return n.trace('selected "%s" after negotiation',a),s.unwrap(),i}throw new Ul(`Protocol selection failed - could not negotiate ${e}`)}async function Mi(r,e,t={}){e=Array.isArray(e)?e:[e];let n=r.log.newScope("mss:handle"),s=us(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){n.trace("reading incoming string");let o=await kc(s,t);if(n.trace('read "%s"',o),o===Zr){n.trace('respond with "%s" for "%s"',Zr,o),await s.write(C(`${Zr}
|
|
22
|
+
`),t),n.trace('responded with "%s" for "%s"',Zr,o);continue}if(e.includes(o))return n.trace('respond with "%s" for "%s"',o,o),await s.write(C(`${o}
|
|
23
|
+
`),t),n.trace('responded with "%s" for "%s"',o,o),s.unwrap(),o;if(o==="ls"){let i=new W(...e.map(a=>vo.single(C(`${a}
|
|
24
|
+
`))),C(`
|
|
25
|
+
`));n.trace('respond with "%s" for %s',e,o),await s.write(i,t),n.trace('responded with "%s" for %s',e,o);continue}n.trace('respond with "na" for "%s"',o),await s.write(C(`na
|
|
26
|
+
`),t),n('responded with "na" for "%s"',o)}}var Im=class extends oe{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=sm(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 Hn(n.local,n.error))})}[Symbol.toStringTag]="Connection";[S4]=!0;get streams(){return this.muxer?.streams??[]}get status(){return this.maConn.status}newStream=async(e,t={})=>{if(this.muxer==null)throw new fs("Connection is not multiplexed");if(this.muxer.status!=="open")throw new Ns(`The connection muxer is "${this.muxer.status}" and not "open"`);if(this.maConn.status!=="open")throw new Ns(`The connection is "${this.status}" and not "open"`);if(this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new da("Cannot open protocol stream on limited connection");Array.isArray(e)||(e=[e]),t.onProgress?.(new Z("connection:open-stream",{connection:this,protocols:e})),this.log.trace("starting new stream for protocols %s",e);let n=await this.muxer.createStream({...t,protocol:e.length===1?e[0]:void 0});this.log.trace("started new stream %s for protocols %s",n.id,e);try{if(t.signal==null){n.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",e);let c=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);t={...t,signal:c}}n.protocol===""?(n.log.trace("selecting protocol from protocols %s",e),n.protocol=await Bi(n,e,t),n.log("negotiated protocol %s",n.protocol)):n.log("pre-negotiated protocol %s",n.protocol);let s=fT(n.protocol,this.components.registrar,t),o=M8(n.protocol,"outbound",this);if(o>s){let c=new Go(`Too many outbound protocol streams for protocol "${n.protocol}" - ${o}/${s}`);throw n.abort(c),c}await this.components.peerStore.merge(this.remotePeer,{protocols:[n.protocol]}),this.components.metrics?.trackProtocolStream(n);let i=this.components.registrar.getMiddleware(n.protocol),a=await this.runMiddlewareChain(n,this,i);return t.onProgress?.(new Z("connection:opened-stream",{connection:this,stream:a})),a}catch(s){throw n.status==="open"?n.abort(s):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,s),s}};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 Mi(t,l,{signal:n}),t.log("negotiated protocol %s",t.protocol)}else t.log("pre-negotiated protocol %s",t.protocol);let s=dT(t.protocol,this.components.registrar);if(M8(t.protocol,"inbound",this)>s)throw new Fl(`Too many inbound protocol streams for protocol "${t.protocol}" - limit ${s}`);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 da("Cannot open protocol stream on limited connection");let c=this.components.registrar.getMiddleware(t.protocol);c.push(async(l,u,d)=>{await i(l,u),d(l,u)}),await this.runMiddlewareChain(t,this,c)}catch(s){t.abort(s)}}async runMiddlewareChain(e,t,n){for(let s=0;s<n.length;s++){let o=n[s];e.log.trace("running middleware",s,o),await new Promise((i,a)=>{try{let c=o(e,t,(l,u)=>{e=l,t=u,i()});c instanceof Promise&&c.catch(a)}catch(c){a(c)}}),e.log.trace("ran middleware",s,o)}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 U8(r,e){return new Im(r,e)}function dT(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 Sm}function fT(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??Am}function M8(r,e,t){let n=0;return t.streams.forEach(s=>{s.direction===e&&s.protocol===r&&n++}),n}var gf=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 qd(`The multiaddr connection is blocked by gater.${e}`)}createInboundAbortSignal(e){let t=me([AbortSignal.timeout(this.inboundUpgradeTimeout),e]);return t}async upgradeInbound(e,t){let n=!1,s=this.createInboundAbortSignal(t.signal);try{if(this.metrics.dials?.increment({inbound:!0}),n=this.components.connectionManager.acceptIncomingConnection(e),!n)throw new zd("Connection denied");await De(this.shouldBlockConnection("denyInboundConnection",e),s),await this._performUpgrade(e,"inbound",{...t,signal:s})}catch(o){throw this.metrics.errors?.increment({inbound:!0}),this.metrics.inboundErrors?.increment({[o.name??"Error"]:!0}),o}finally{s.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,s;n!=null&&(s=Be(n),await De(this.shouldBlockConnection("denyOutboundConnection",s,e),t.signal));let o="outbound";return t.initiator===!1&&(o="inbound"),await this._performUpgrade(e,o,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 s=e,o,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 d=this.components.connectionProtector;d!=null&&(e.log("protecting the %s connection",t),s=await d.protect(s,n))}try{if(hT(n)){if(n.remotePeer==null)throw new $r(`${t} connection that skipped encryption must have a peer id`);c="native",o=n.remotePeer}else{let d=e.remoteAddr.getComponents().findLast(h=>h.code===421)?.value,f;d!=null&&(f=Be(d)),n?.onProgress?.(new Z(`upgrader:encrypt-${t}-connection`)),{connection:s,remotePeer:o,protocol:c,streamMuxer:i}=await(t==="inbound"?this._encryptInbound(s,{...n,remotePeer:f}):this._encryptOutbound(s,{...n,remotePeer:f}))}if(o.equals(this.components.peerId)){let d=new zo("Can not dial self");throw e.abort(d),d}await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",o,e),n?.muxerFactory!=null?i=n.muxerFactory:i==null&&this.streamMuxers.size>0&&(n?.onProgress?.(new Z(`upgrader:multiplex-${t}-connection`)),i=await(t==="inbound"?this._multiplexInbound(s,this.streamMuxers,n):this._multiplexOutbound(s,this.streamMuxers,n)))}catch(d){throw e.log.error("failed to upgrade %s connection %s %a - %e",t,t==="inbound"?"from":"to",e.remoteAddr,d),d}i!=null&&(e.log("create muxer %s",i.protocol),a=i.createStreamMuxer(s)),await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",o,e);let u=this._createConnection({id:l,cryptoProtocol:c,direction:t,maConn:e,stream:s,muxer:a,remotePeer:o,limits:n?.limits,closeTimeout:this.connectionCloseTimeout});return u.log("successfully upgraded connection"),u}_createConnection(e){let t=U8(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 s=await Mi(e,n,t),o=this.connectionEncrypters.get(s);if(o==null)throw new Co(`no crypto module found for ${s}`);return e.log("encrypting inbound connection using %s",s),{...await o.secureInbound(e,t),protocol:s}}catch(s){throw new Co(s.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let s=await Bi(e,n,t),o=this.connectionEncrypters.get(s);if(o==null)throw new Co(`no crypto module found for ${s}`);return e.log("encrypting outbound connection using %s",s),{...await o.secureOutbound(e,t),protocol:s}}catch(s){throw new Co(s.message)}}async _multiplexOutbound(e,t,n){let s=Array.from(t.keys());e.log("outbound selecting muxer %s",s);try{e.log.trace("selecting stream muxer from %s",s);let o=await Bi(e,s,n),i=t.get(o);if(i==null)throw new fs(`No muxer configured for protocol "${o}"`);return e.log("selected %s as muxer protocol",o),i}catch(o){throw e.log.error("error multiplexing outbound connection - %e",o),new fs(String(o))}}async _multiplexInbound(e,t,n){let s=Array.from(t.keys());e.log("inbound handling muxers %s",s);try{e.log.trace("selecting stream muxer from %s",s);let o=await Mi(e,s,n),i=t.get(o);if(i==null)throw new fs(`No muxer configured for protocol "${o}"`);return e.log("selected %s as muxer protocol",o),i}catch(o){throw e.log.error("error multiplexing inbound connection - %e",o),o}}getConnectionEncrypters(){return this.connectionEncrypters}getStreamMuxers(){return this.streamMuxers}};function hT(r){return r.skipEncryption===!0}var yf="3.3.4",wf="js-libp2p";function bf(r,e){return`${r??wf}/${e??yf} browser/${globalThis.navigator.userAgent}`}var Dc=class extends oe{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new oe,n=t.dispatchEvent.bind(t);t.dispatchEvent=l=>{let u=n(l),d=this.dispatchEvent(new CustomEvent(l.type,{detail:l.detail}));return u||d},this.peerId=e.peerId,this.logger=e.logger??pi(),this.log=this.logger.forComponent("libp2p"),this.services={};let s=e.nodeInfo?.name??wf,o=e.nodeInfo?.version??yf,i=this.components=y8({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:s,version:o,userAgent:e.nodeInfo?.userAgent??bf(s,o)},logger:this.logger,events:t,datastore:e.datastore??new Pd,connectionGater:b8(e.connectionGater),dns:e.dns});e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),this.peerStore=this.configureComponent("peerStore",f8(i,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),i.events.addEventListener("peer:update",l=>{if(l.detail.previous==null){let u={id:l.detail.peer.id,multiaddrs:l.detail.peer.addresses.map(d=>d.multiaddr)};i.events.safeDispatchEvent("peer:discovery",{detail:u})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(i)),this.components.upgrader=new gf(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((l,u)=>this.configureComponent(`connection-encryption-${u}`,l(this.components))),streamMuxers:(e.streamMuxers??[]).map((l,u)=>this.configureComponent(`stream-muxers-${u}`,l(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout,inboundStreamProtocolNegotiationTimeout:e.connectionManager?.inboundStreamProtocolNegotiationTimeout,outboundStreamProtocolNegotiationTimeout:e.connectionManager?.outboundStreamProtocolNegotiationTimeout,connectionCloseTimeout:e.connectionManager?.connectionCloseTimeout}),this.configureComponent("transportManager",new mf(this.components,e.transportManager)),this.configureComponent("connectionManager",new cf(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new lf(this.components,e.connectionMonitor)),this.configureComponent("registrar",new pf(this.components)),this.configureComponent("addressManager",new Od(this.components,e.addresses));let a=(e.peerRouters??[]).map((l,u)=>this.configureComponent(`peer-router-${u}`,l(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new ff(this.components,{routers:a}));let c=(e.contentRouters??[]).map((l,u)=>this.configureComponent(`content-router-${u}`,l(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new uf(this.components,{routers:c})),this.configureComponent("randomWalk",new hf(this.components)),(e.peerDiscovery??[]).forEach((l,u)=>{this.configureComponent(`peer-discovery-${u}`,l(this.components)).addEventListener("peer",f=>{this.#e(f)})}),e.transports?.forEach((l,u)=>{this.components.transportManager.add(this.configureComponent(`transport-${u}`,l(this.components)))}),e.services!=null)for(let l of Object.keys(e.services)){let u=e.services[l],d=u(this.components);if(d==null){this.log.error("service factory %s returned null or undefined instance",l);continue}this.services[l]=d,this.configureComponent(l,d),d[Ds]!=null&&(this.log("registering service %s for content routing",l),c.push(d[Ds])),d[Us]!=null&&(this.log("registering service %s for peer routing",l),a.push(d[Us])),d[Ms]!=null&&(this.log("registering service %s for peer discovery",l),d[Ms].addEventListener?.("peer",f=>{this.#e(f)}))}w8(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 er;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 E("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new E("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={}){Qr(e)&&(e=Be(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=Le([C("/pk/"),e.toMultihash().bytes]),s=await this.contentRouting.get(n,t),o=Xe(s);return await this.peerStore.patch(e,{publicKey:o},t),o}async handle(e,t,n){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async s=>{await this.components.registrar.handle(s,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 $8(r={}){r.privateKey??=await bu("Ed25519");let e=new Dc({...await $g(r),peerId:Fg(r.privateKey)});return r.start!==!1&&await e.start(),e}var pT=["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"];function Cm(r){return r==null?!1:r instanceof Dc?!0:pT.every(e=>typeof r[e]=="function")}function mT(r){return r[Symbol.asyncIterator]!=null}function gT(r,e){let t=0;if(mT(r))return(async function*(){for await(let c of r)yield e(c,t++)})();let n=_d(r),{value:s,done:o}=n.next();if(o===!0)return(function*(){})();let i=e(s,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 kr=gT;function _m(r){return{...r,id:r.id.toCID()}}var Rm=class{name="libp2p-router";libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async cancelReprovide(e,t){await this.libp2p.contentRouting.cancelReprovide(e,t)}async*findProviders(e,t){yield*kr(this.libp2p.contentRouting.findProviders(e,t),n=>({routing:this.name,..._m(n)}))}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 _m(await this.libp2p.peerRouting.findPeer(Rt(e),t))}async*getClosestPeers(e,t){yield*kr(this.libp2p.peerRouting.getClosestPeers(e,t),_m)}toString(){return"Libp2pRouter()"}};function K8(r){return new Rm(r)}var Nc=Uint32Array.from([1732584193,4023233417,2562383102,271733878,3285377520]),hs=new Uint32Array(80),Pm=class extends Ws{A=Nc[0]|0;B=Nc[1]|0;C=Nc[2]|0;D=Nc[3]|0;E=Nc[4]|0;constructor(){super(64,20,8,!1)}get(){let{A:e,B:t,C:n,D:s,E:o}=this;return[e,t,n,s,o]}set(e,t,n,s,o){this.A=e|0,this.B=t|0,this.C=n|0,this.D=s|0,this.E=o|0}process(e,t){for(let c=0;c<16;c++,t+=4)hs[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)hs[c]=Xl(hs[c-3]^hs[c-8]^hs[c-14]^hs[c-16],1);let{A:n,B:s,C:o,D:i,E:a}=this;for(let c=0;c<80;c++){let l,u;c<20?(l=Jl(s,o,i),u=1518500249):c<40?(l=s^o^i,u=1859775393):c<60?(l=eu(s,o,i),u=2400959708):(l=s^o^i,u=3395469782);let d=Xl(n,5)+l+a+u+hs[c]|0;a=i,i=o,o=Xl(s,30),s=n,n=d}n=n+this.A|0,s=s+this.B|0,o=o+this.C|0,i=i+this.D|0,a=a+this.E|0,this.set(n,s,o,i,a)}roundClean(){wt(hs)}destroy(){this.destroyed=!0,this.set(0,0,0,0,0),wt(this.buffer)}},V8=Sa(()=>new Pm);function H8(r,e,t,n){mn(r);let s=f6({dkLen:32,asyncTick:10},n),{c:o,dkLen:i,asyncTick:a}=s;if(Bt(o,"c"),Bt(i,"dkLen"),Bt(a,"asyncTick"),o<1)throw new Error("iterations (c) must be >= 1");if(i<1)throw new Error('"dkLen" must be >= 1');if(i>(2**32-1)*r.outputLen)throw new Error("derived key too long");let c=V0(e,"password"),l=V0(t,"salt"),u=new Uint8Array(i),d=io.create(r,c),f=d._cloneInto().update(l);return{c:o,dkLen:i,asyncTick:a,DK:u,PRF:d,PRFSalt:f}}function q8(r,e,t,n,s){return r.destroy(),e.destroy(),n&&n.destroy(),wt(s),t}function z8(r,e,t,n){let{c:s,dkLen:o,DK:i,PRF:a,PRFSalt:c}=H8(r,e,t,n),l,u=new Uint8Array(4),d=Gs(u),f=new Uint8Array(a.outputLen);for(let h=1,p=0;p<o;h++,p+=a.outputLen){let y=i.subarray(p,p+a.outputLen);d.setInt32(0,h,!1),(l=c._cloneInto(l)).update(u).digestInto(f),y.set(f.subarray(0,y.length));for(let m=1;m<s;m++){a._cloneInto(l).update(f).digestInto(f);for(let g=0;g<y.length;g++)y[g]^=f[g]}}return q8(a,c,i,l,f)}async function Ef(r,e,t,n){let{c:s,dkLen:o,asyncTick:i,DK:a,PRF:c,PRFSalt:l}=H8(r,e,t,n),u,d=new Uint8Array(4),f=Gs(d),h=new Uint8Array(c.outputLen);for(let p=1,y=0;y<o;p++,y+=c.outputLen){let m=a.subarray(y,y+c.outputLen);f.setInt32(0,p,!1),(u=l._cloneInto(u)).update(d).digestInto(h),m.set(h.subarray(0,m.length)),await d6(s-1,i,()=>{c._cloneInto(u).update(h).digestInto(h);for(let g=0;g<m.length;g++)m[g]^=h[g]})}return q8(c,l,a,u,h)}var G8={sha1:V8,"sha2-256":cr,"sha2-512":qr};function Oc(r,e,t,n,s){if(s!=="sha1"&&s!=="sha2-256"&&s!=="sha2-512"){let a=Object.keys(G8).join(" / ");throw new E(`Hash '${s}' is unknown or not supported. Must be ${a}`)}let o=G8[s],i=z8(o,r,e,{c:t,dkLen:n});return hn.encode(i).substring(1)}var G7=Vo(t7(),1);var Lm={keyLength:64,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"};var Ui={};yt(Ui,{create:()=>RT,derivedEmptyPasswordKey:()=>xf});var xf={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function RT(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,s=r?.digest??"SHA-256",o=r?.saltLength??16,i=r?.iterations??32767,a=ze.get();t*=8;async function c(d,f){let h=a.getRandomValues(new Uint8Array(o)),p=a.getRandomValues(new Uint8Array(n)),y={name:e,iv:p};typeof f=="string"&&(f=C(f));let m;if(f.length===0){m=await a.subtle.importKey("jwk",xf,{name:"AES-GCM"},!0,["encrypt"]);try{let w={name:"PBKDF2",salt:h,iterations:i,hash:{name:s}},v=await a.subtle.importKey("raw",ae(f),{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(w,v,{name:e,length:t},!0,["encrypt"])}catch{m=await a.subtle.importKey("jwk",xf,{name:"AES-GCM"},!0,["encrypt"])}}else{let w={name:"PBKDF2",salt:h,iterations:i,hash:{name:s}},v=await a.subtle.importKey("raw",ae(f),{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(w,v,{name:e,length:t},!0,["encrypt"])}let g=await a.subtle.encrypt(y,m,ae(d));return Le([h,y.iv,new Uint8Array(g)])}async function l(d,f){let h=d.subarray(0,o),p=d.subarray(o,o+n),y=d.subarray(o+n),m={name:e,iv:p};typeof f=="string"&&(f=C(f));let g;if(f.length===0)try{let v={name:"PBKDF2",salt:h,iterations:i,hash:{name:s}},_=await a.subtle.importKey("raw",ae(f),{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(v,_,{name:e,length:t},!0,["decrypt"])}catch{g=await a.subtle.importKey("jwk",xf,{name:"AES-GCM"},!0,["decrypt"])}else{let v={name:"PBKDF2",salt:h,iterations:i,hash:{name:s}},_=await a.subtle.importKey("raw",ae(f),{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(v,_,{name:e,length:t},!0,["decrypt"])}let w=await a.subtle.decrypt(m,g,ae(y));return new Uint8Array(w)}return{encrypt:c,decrypt:l}}var he=Vo(r7());function _o(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 ps(r,e,t=-1){let n=t,s=r,o=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),o=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),o=n}let l=new Uint8Array(c);for(let u=a-1;u>=0;u--){let d=Math.pow(2,u*e);l[o-u-1]=Math.floor(s/d),s-=l[o-u-1]*d}return c}i*=Math.pow(2,e)}return new ArrayBuffer(0)}function Af(...r){let e=0,t=0;for(let o of r)e+=o.length;let n=new ArrayBuffer(e),s=new Uint8Array(n);for(let o of r)s.set(o,t),t+=o.length;return s}function Dm(){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=_o(t,8),s=new ArrayBuffer(this.valueHex.byteLength),o=new Uint8Array(s);for(let a=0;a<this.valueHex.byteLength;a++)o[a]=r[a];return o[0]&=127,_o(o,8)-n}function n7(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=ps(i,8,n),c=new Uint8Array(a);return c[0]|=128,a}let s=ps(e,8,n),o=new Uint8Array(s);if(o[0]&128){let i=s.slice(0),a=new Uint8Array(i);s=new ArrayBuffer(s.byteLength+1),o=new Uint8Array(s);for(let c=0;c<i.byteLength;c++)o[c+1]=a[c];o[0]=0}return s}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function s7(r,e){if(r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let s=0;s<t.length;s++)if(t[s]!==n[s])return!1;return!0}function Vt(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,s=new Array(n);for(let i=0;i<n;i++)s[i]="0";return s.join("").concat(t)}var IG=Math.log(2);function Tf(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function Nm(r){let e=0,t=0;for(let s=0;s<r.length;s++){let o=r[s];e+=o.byteLength}let n=new Uint8Array(e);for(let s=0;s<r.length;s++){let o=r[s];n.set(new Uint8Array(o),t),t+=o.byteLength}return n.buffer}function Bn(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 Uc=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return Nm(this.items)}},Bc=[new Uint8Array([1])],o7="0123456789";var $i="",tn=new ArrayBuffer(0),Om=new Uint8Array(0),Fc="EndOfContent",a7="OCTET STRING",c7="BIT STRING";function Mn(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 s;super(...n);let o=n[0]||{};this.isHexOnly=(s=o.isHexOnly)!==null&&s!==void 0?s:!1,this.valueHexView=o.valueHex?he.BufferSourceConverter.toUint8Array(o.valueHex):Om}fromBER(n,s,o,i){let a=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!Bn(this,a,s,o))return-1;let c=s+o;return this.valueHexView=a.subarray(s,c),this.valueHexView.length?(this.blockLength=o,c):(this.warnings.push("Zero buffer length"),s)}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:he.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var kn=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=$i,warnings:n=[],valueBeforeDecode:s=Om}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=he.BufferSourceConverter.toUint8Array(s)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:he.Convert.ToHex(this.valueBeforeDecodeView)}}};kn.NAME="baseBlock";var ht=class extends kn{fromBER(e,t,n,s){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'")}};ht.NAME="valueBlock";var If=class extends Mn(kn){constructor({idBlock:e={}}={}){var t,n,s,o;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?he.BufferSourceConverter.toUint8Array(e.valueHex):Om,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(s=e.tagNumber)!==null&&s!==void 0?s:-1,this.isConstructed=(o=e.isConstructed)!==null&&o!==void 0?o:!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 s=new Uint8Array(1);if(!e){let o=this.tagNumber;o&=31,t|=o,s[0]=t}return s.buffer}if(!this.isHexOnly){let s=ps(this.tagNumber,7),o=new Uint8Array(s),i=s.byteLength,a=new Uint8Array(i+1);if(a[0]=t|31,!e){for(let c=0;c<i-1;c++)a[c+1]=o[c]|128;a[i]=o[i-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let s=this.valueHexView;for(let o=0;o<s.length-1;o++)n[o+1]=s[o]|128;n[this.valueHexView.byteLength]=s[s.length-1]}return n.buffer}fromBER(e,t,n){let s=he.BufferSourceConverter.toUint8Array(e);if(!Bn(this,s,t,n))return-1;let o=s.subarray(t,t+n);if(o.length===0)return this.error="Zero buffer length",-1;switch(o[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=(o[0]&32)===32,this.isHexOnly=!1;let a=o[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=0;for(;;){let u=c+1;if(u>=o.length)return this.error="End of input reached before message was fully decoded",-1;if(c++,(o[u]&128)===0)break}this.blockLength=c+1;let l=this.valueHexView=new Uint8Array(c);for(let u=0;u<c;u++)l[u]=o[u+1]&127;this.blockLength<=9?this.tagNumber=_o(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}}};If.NAME="identificationBlock";var Cf=class extends kn{constructor({lenBlock:e={}}={}){var t,n,s;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=(s=e.length)!==null&&s!==void 0?s:0}fromBER(e,t,n){let s=he.BufferSourceConverter.toUint8Array(e);if(!Bn(this,s,t,n))return-1;let o=s.subarray(t,t+n);if(o.length===0)return this.error="Zero buffer length",-1;if(o[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=o[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(o[0]&128),this.longFormUsed===!1)return this.length=o[0],this.blockLength=1,t+this.blockLength;let i=o[0]&127;if(i>8)return this.error="Too big integer",-1;if(i+1>o.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=s.subarray(a,a+i);return c[i-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=_o(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 s=ps(this.length,8);if(s.byteLength>127)return this.error="Too big length",tn;if(t=new ArrayBuffer(s.byteLength+1),e)return t;let o=new Uint8Array(s);n=new Uint8Array(t),n[0]=s.byteLength|128;for(let i=0;i<s.byteLength;i++)n[i+1]=o[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}}};Cf.NAME="lengthBlock";var H={},it=class extends kn{constructor({name:e=$i,optional:t=!1,primitiveSchema:n,...s}={},o){super(s),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new If(s),this.lenBlock=new Cf(s),this.valueBlock=o?new o(s):new ht(s)}fromBER(e,t,n,s){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length,s);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 Uc;t||l7(this);let s=this.idBlock.toBER(e);if(n.write(s),this.lenBlock.isIndefiniteForm)n.write(new Uint8Array([128]).buffer),this.valueBlock.toBER(e,n),n.write(new ArrayBuffer(2));else{let o=this.valueBlock.toBER(e);this.lenBlock.length=o.byteLength;let i=this.lenBlock.toBER(e);n.write(i),n.write(o)}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():he.Convert.ToHex(this.toBER())}onAsciiEncoding(){let e=this.constructor.NAME,t=he.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 s7(t,n)}};it.NAME="BaseBlock";function l7(r){var e;if(r instanceof H.Constructed)for(let t of r.valueBlock.value)l7(t)&&(r.lenBlock.isIndefiniteForm=!0);return!!(!((e=r.lenBlock)===null||e===void 0)&&e.isIndefiniteForm)}var _f=class extends it{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor({value:e=$i,...t}={},n){super(t,n),e&&this.fromString(e)}fromBER(e,t,n){let s=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return s===-1?(this.error=this.valueBlock.error,s):(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),s)}onAsciiEncoding(){return`${this.constructor.NAME} : '${this.valueBlock.value}'`}};_f.NAME="BaseStringBlock";var Rf=class extends Mn(ht){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};Rf.NAME="PrimitiveValueBlock";var u7,Pf=class extends it{constructor(e={}){super(e,Rf),this.idBlock.isConstructed=!1}};u7=Pf;H.Primitive=u7;Pf.NAME="PRIMITIVE";var UT=100,FT=1e4,$T=16*1024*1024,KT="Maximum ASN.1 nesting depth exceeded",VT="Maximum ASN.1 node count exceeded",HT="Maximum ASN.1 content length exceeded";function zc(r={}){var e,t,n;return{depth:0,maxDepth:(e=r.maxDepth)!==null&&e!==void 0?e:UT,nodesCount:0,maxNodes:(t=r.maxNodes)!==null&&t!==void 0?t:FT,maxContentLength:(n=r.maxContentLength)!==null&&n!==void 0?n:$T}}function qT(r){let e=new it({},ht);return e.error=r,{offset:-1,result:e}}function zT(r){if(r.nodesCount+=1,r.nodesCount>r.maxNodes)return VT}function GT(r,e){if(r>e.maxContentLength)return HT}function Bm(r,e,t,n){let s=n.depth+1;if(s>n.maxDepth)return qT(KT);n.depth=s;try{return d7(r,e,t,n)}finally{n.depth-=1}}function WT(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 d7(r,e=0,t=r.length,n=zc()){let s=e,o=new it({},ht),i=new kn;if(!Bn(i,r,e,t))return o.error=i.error,{offset:-1,result:o};if(!r.subarray(e,e+t).length)return o.error="Zero buffer length",{offset:-1,result:o};let c=zT(n);if(c)return o.error=c,{offset:-1,result:o};let l=o.idBlock.fromBER(r,e,t);if(o.idBlock.warnings.length&&o.warnings.concat(o.idBlock.warnings),l===-1)return o.error=o.idBlock.error,{offset:-1,result:o};if(e=l,t-=o.idBlock.blockLength,l=o.lenBlock.fromBER(r,e,t),o.lenBlock.warnings.length&&o.warnings.concat(o.lenBlock.warnings),l===-1)return o.error=o.lenBlock.error,{offset:-1,result:o};e=l,t-=o.lenBlock.blockLength;let u=o.lenBlock.isIndefiniteForm?t:o.lenBlock.length,d=GT(u,n);if(d)return o.error=d,{offset:-1,result:o};if(!o.idBlock.isConstructed&&o.lenBlock.isIndefiniteForm)return o.error="Indefinite length form used for primitive encoding form",{offset:-1,result:o};let f=it;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};f=H.EndOfContent;break;case 1:f=H.Boolean;break;case 2:f=H.Integer;break;case 3:f=H.BitString;break;case 4:f=H.OctetString;break;case 5:f=H.Null;break;case 6:f=H.ObjectIdentifier;break;case 10:f=H.Enumerated;break;case 12:f=H.Utf8String;break;case 13:f=H.RelativeObjectIdentifier;break;case 14:f=H.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:f=H.Sequence;break;case 17:f=H.Set;break;case 18:f=H.NumericString;break;case 19:f=H.PrintableString;break;case 20:f=H.TeletexString;break;case 21:f=H.VideotexString;break;case 22:f=H.IA5String;break;case 23:f=H.UTCTime;break;case 24:f=H.GeneralizedTime;break;case 25:f=H.GraphicString;break;case 26:f=H.VisibleString;break;case 27:f=H.GeneralString;break;case 28:f=H.UniversalString;break;case 29:f=H.CharacterString;break;case 30:f=H.BmpString;break;case 31:f=H.DATE;break;case 32:f=H.TimeOfDay;break;case 33:f=H.DateTime;break;case 34:f=H.Duration;break;default:{let h=o.idBlock.isConstructed?new H.Constructed:new H.Primitive;h.idBlock=o.idBlock,h.lenBlock=o.lenBlock,h.warnings=o.warnings,o=h}}break;default:f=o.idBlock.isConstructed?H.Constructed:H.Primitive}return o=WT(o,f),l=o.fromBER(r,e,u,n),o.valueBeforeDecodeView=r.subarray(s,s+o.blockLength),{offset:l,result:o}}function u1(r,e={}){if(!r.byteLength){let t=new it({},ht);return t.error="Input buffer has zero length",{offset:-1,result:t}}return d7(he.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength,zc(e))}function jT(r,e){return r?1:e}var Jr=class extends ht{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n,s){let o=he.BufferSourceConverter.toUint8Array(e),i=s??zc();if(!Bn(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 a=t;for(;jT(this.isIndefiniteForm,n)>0;){let c=Bm(o,a,n,i);if(c.offset===-1)return this.error=c.result.error,this.warnings.concat(c.result.warnings),-1;if(a=c.offset,this.blockLength+=c.result.blockLength,n-=c.result.blockLength,this.value.push(c.result),this.isIndefiniteForm&&c.result.constructor.NAME===Fc)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===Fc?this.value.pop():this.warnings.push("No EndOfContent block encoded")),a}toBER(e,t){let n=t||new Uc;for(let s=0;s<this.value.length;s++)this.value[s].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}};Jr.NAME="ConstructedValueBlock";var f7,ms=class extends it{constructor(e={}){super(e,Jr),this.idBlock.isConstructed=!0}fromBER(e,t,n,s){this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm;let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length,s);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(`
|
|
27
|
+
`).map(s=>` ${s}`).join(`
|
|
28
|
+
`));let t=this.idBlock.tagClass===3?`[${this.idBlock.tagNumber}]`:this.constructor.NAME;return e.length?`${t} :
|
|
29
|
+
${e.join(`
|
|
30
|
+
`)}`:`${t} :`}};f7=ms;H.Constructed=f7;ms.NAME="CONSTRUCTED";var Lf=class extends ht{fromBER(e,t,n){return t}toBER(e){return tn}};Lf.override="EndOfContentValueBlock";var h7,kf=class extends it{constructor(e={}){super(e,Lf),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};h7=kf;H.EndOfContent=h7;kf.NAME=Fc;var p7,Ro=class extends it{constructor(e={}){super(e,ht),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 s=new Uint8Array(n);s[0]=5,s[1]=0}return t&&t.write(n),n}onAsciiEncoding(){return`${this.constructor.NAME}`}};p7=Ro;H.Null=p7;Ro.NAME="NULL";var Df=class extends Mn(ht){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=he.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}fromBER(e,t,n){let s=he.BufferSourceConverter.toUint8Array(e);return Bn(this,s,t,n)?(this.valueHexView=s.subarray(t,t+n),n>1&&this.warnings.push("Boolean value encoded in more then 1 octet"),this.isHexOnly=!0,Dm.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};Df.NAME="BooleanValueBlock";var m7,Nf=class extends it{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor(e={}){super(e,Df),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};m7=Nf;H.Boolean=m7;Nf.NAME="BOOLEAN";var Of=class extends Mn(Jr){constructor({isConstructed:e=!1,...t}={}){super(t),this.isConstructed=e}fromBER(e,t,n,s){let o=0;if(this.isConstructed){if(this.isHexOnly=!1,o=Jr.prototype.fromBER.call(this,e,t,n,s),o===-1)return o;for(let i=0;i<this.value.length;i++){let a=this.value[i].constructor.NAME;if(a===Fc){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(a!==a7)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?Jr.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};Of.NAME="OctetStringValueBlock";var Mm,Dn=class extends it{constructor({idBlock:e={},lenBlock:t={},...n}={}){var s,o;(s=n.isConstructed)!==null&&s!==void 0||(n.isConstructed=!!(!((o=n.value)===null||o===void 0)&&o.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},Of),this.idBlock.tagClass=1,this.idBlock.tagNumber=4}fromBER(e,t,n,s){if(this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,n===0)return this.idBlock.error.length===0&&(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length===0&&(this.blockLength+=this.lenBlock.blockLength),t;if(!this.valueBlock.isConstructed){let i=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+n);try{if(i.byteLength){let a=s??zc(),c=Bm(i,0,i.byteLength,a);c.offset!==-1&&c.offset===n&&(this.valueBlock.value=[c.result])}}catch{}}return super.fromBER(e,t,n,s)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return ms.prototype.onAsciiEncoding.call(this);let e=this.constructor.NAME,t=he.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 Mm&&e.push(t.valueBlock.valueHexView);return he.BufferSourceConverter.concat(e)}};Mm=Dn;H.OctetString=Mm;Dn.NAME=a7;var Bf=class extends Mn(Jr){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,s){if(!n)return t;let o=-1;if(this.isConstructed){if(o=Jr.prototype.fromBER.call(this,e,t,n,s),o===-1)return o;for(let c of this.value){let l=c.constructor.NAME;if(l===Fc){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(l!==c7)return this.error="BIT STRING may consists of BIT STRINGs only",-1;let u=c.valueBlock;if(this.unusedBits>0&&u.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=u.unusedBits}return o}let i=he.BufferSourceConverter.toUint8Array(e);if(!Bn(this,i,t,n))return-1;let a=i.subarray(t,t+n);if(this.unusedBits=a[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let c=a.subarray(1);try{if(c.byteLength){let l=s??zc(),u=Bm(c,0,c.byteLength,l);u.offset!==-1&&u.offset===n-1&&(this.value=[u.result])}}catch{}}return this.valueHexView=a.subarray(1),this.blockLength=a.length,t+n}toBER(e,t){if(this.isConstructed)return Jr.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength){let s=new Uint8Array(1);return s[0]=0,s.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}}};Bf.NAME="BitStringValueBlock";var g7,Mf=class extends it{constructor({idBlock:e={},lenBlock:t={},...n}={}){var s,o;(s=n.isConstructed)!==null&&s!==void 0||(n.isConstructed=!!(!((o=n.value)===null||o===void 0)&&o.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},Bf),this.idBlock.tagClass=1,this.idBlock.tagNumber=3}fromBER(e,t,n,s){return this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,super.fromBER(e,t,n,s)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return ms.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(""),s=this.constructor.NAME,o=n.substring(0,n.length-this.valueBlock.unusedBits);return`${s} : ${o}`}}};g7=Mf;H.BitString=g7;Mf.NAME=c7;var y7;function YT(r,e){let t=new Uint8Array([0]),n=new Uint8Array(r),s=new Uint8Array(e),o=n.slice(0),i=o.length-1,a=s.slice(0),c=a.length-1,l=0,u=c<i?i:c,d=0;for(let f=u;f>=0;f--,d++)!0===d<a.length?l=o[i-d]+a[c-d]+t[0]:l=o[i-d]+t[0],t[0]=l/10,!0===d>=o.length?o=Af(new Uint8Array([l%10]),o):o[i-d]=l%10;return t[0]>0&&(o=Af(t,o)),o}function i7(r){if(r>=Bc.length)for(let e=Bc.length;e<=r;e++){let t=new Uint8Array([0]),n=Bc[e-1].slice(0);for(let s=n.length-1;s>=0;s--){let o=new Uint8Array([(n[s]<<1)+t[0]]);t[0]=o[0]/10,n[s]=o[0]%10}t[0]>0&&(n=Af(t,n)),Bc.push(n)}return Bc[r]}function QT(r,e){let t=0,n=new Uint8Array(r),s=new Uint8Array(e),o=n.slice(0),i=o.length-1,a=s.slice(0),c=a.length-1,l,u=0;for(let d=c;d>=0;d--,u++)l=o[i-u]-a[c-u]-t,!0===l<0?(t=1,o[i-u]=l+10):(t=0,o[i-u]=l);if(t>0)for(let d=i-c+1;d>=0;d--,u++)if(l=o[i-u]-t,l<0)t=1,o[i-u]=l+10;else{t=0,o[i-u]=l;break}return o.slice()}var $c=class extends Mn(ht){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=Dm.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(n7(e))}get valueDec(){return this._valueDec}fromDER(e,t,n,s=0){let o=this.fromBER(e,t,n);if(o===-1)return o;let i=this.valueHexView;return i[0]===0&&(i[1]&128)!==0?this.valueHexView=i.subarray(1):s!==0&&i.length<s&&(s-i.length>1&&(s=i.length+1),this.valueHexView=i.subarray(s-i.length)),o}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 s=super.fromBER(e,t,n);return s===-1||this.setValueHex(),s}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,s,o=this.valueHexView,i="",a=!1;for(let c=o.byteLength-1;c>=0;c--){s=o[c];for(let l=0;l<8;l++)(s&1)===1&&(n===e?(t=QT(i7(n),t),i="-"):t=YT(t,i7(n))),n++,s>>=1}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(i+=o7.charAt(t[c]));return a===!1&&(i+=o7.charAt(0)),i}};y7=$c;$c.NAME="IntegerValueBlock";Object.defineProperty(y7.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var Mc,Nn=class extends it{constructor(e={}){super(e,$c),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return Tf(),BigInt(this.valueBlock.toString())}static fromBigInt(e){Tf();let t=BigInt(e),n=new Uc,s=t.toString(16).replace(/^-/,""),o=new Uint8Array(he.Convert.FromHex(s));if(t<0){let a=new Uint8Array(o.length+(o[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${he.Convert.ToHex(a)}`)+t,u=he.BufferSourceConverter.toUint8Array(he.Convert.FromHex(l.toString(16)));u[0]|=128,n.write(u)}else o[0]&128&&n.write(new Uint8Array([0])),n.write(o);return new Mc({valueHex:n.final()})}convertToDER(){let e=new Mc({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new Mc({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};Mc=Nn;H.Integer=Mc;Nn.NAME="INTEGER";var w7,Uf=class extends Nn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};w7=Uf;H.Enumerated=w7;Uf.NAME="ENUMERATED";var Kc=class extends Mn(ht){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 s=he.BufferSourceConverter.toUint8Array(e);if(!Bn(this,s,t,n))return-1;let o=s.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=o[a]&127,this.blockLength++,(o[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,(o[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=_o(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){Tf();let t=BigInt(e).toString(2);for(;t.length%7;)t="0"+t;let n=new Uint8Array(t.length/7);for(let s=0;s<n.length;s++)n[s]=parseInt(t.slice(s*7,s*7+7),2)+(s+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 s=this.valueHexView,o=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)o[i]=s[i]|128;return o[this.blockLength-1]=s[this.blockLength-1],o.buffer}let t=ps(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 s=new Uint8Array(t),o=t.byteLength-1;for(let i=0;i<o;i++)n[i]=s[i]|128;n[o]=s[o]}return n}toString(){let e="";if(this.isHexOnly)e=he.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}}};Kc.NAME="sidBlock";var Ff=class extends ht{constructor({value:e=$i,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let s=t;for(;n>0;){let o=new Kc;if(s=o.fromBER(e,s,n),s===-1)return this.blockLength=0,this.error=o.error,s;this.value.length===0&&(o.isFirstSid=!0),this.blockLength+=o.blockLength,n-=o.blockLength,this.value.push(o)}return s}toBER(e){let t=[];for(let n=0;n<this.value.length;n++){let s=this.value[n].toBER(e);if(s.byteLength===0)return this.error=this.value[n].error,tn;t.push(s)}return Nm(t)}fromString(e){this.value=[];let t=0,n=0,s="",o=!1;do if(n=e.indexOf(".",t),n===-1?s=e.substring(t):s=e.substring(t,n),t=n+1,o){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(s,10);if(isNaN(c))return;i.valueDec=c+a,o=!1}else{let i=new Kc;if(s>Number.MAX_SAFE_INTEGER){Tf();let a=BigInt(s);i.valueBigInt=a}else if(i.valueDec=parseInt(s,10),isNaN(i.valueDec))return;this.value.length||(i.isFirstSid=!0,o=!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 s=this.value[n].toString();n!==0&&(e=`${e}.`),t?(s=`{${s}}`,this.value[n].isFirstSid?e=`2.{${s} - 80}`:e+=s):e+=s}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}};Ff.NAME="ObjectIdentifierValueBlock";var b7,en=class extends it{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,Ff),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};b7=en;H.ObjectIdentifier=b7;en.NAME="OBJECT IDENTIFIER";var Vc=class extends Mn(kn){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,n){if(n===0)return t;let s=he.BufferSourceConverter.toUint8Array(e);if(!Bn(this,s,t,n))return-1;let o=s.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=o[a]&127,this.blockLength++,(o[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,(o[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=_o(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 s=this.valueHexView,o=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)o[i]=s[i]|128;return o[this.blockLength-1]=s[this.blockLength-1],o.buffer}let t=ps(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 s=new Uint8Array(t),o=t.byteLength-1;for(let i=0;i<o;i++)n[i]=s[i]|128;n[o]=s[o]}return n.buffer}toString(){let e="";return this.isHexOnly?e=he.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};Vc.NAME="relativeSidBlock";var $f=class extends ht{constructor({value:e=$i,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let s=t;for(;n>0;){let o=new Vc;if(s=o.fromBER(e,s,n),s===-1)return this.blockLength=0,this.error=o.error,s;this.blockLength+=o.blockLength,n-=o.blockLength,this.value.push(o)}return s}toBER(e,t){let n=[];for(let s=0;s<this.value.length;s++){let o=this.value[s].toBER(e);if(o.byteLength===0)return this.error=this.value[s].error,tn;n.push(o)}return Nm(n)}fromString(e){this.value=[];let t=0,n=0,s="";do{n=e.indexOf(".",t),n===-1?s=e.substring(t):s=e.substring(t,n),t=n+1;let o=new Vc;if(o.valueDec=parseInt(s,10),isNaN(o.valueDec))return!0;this.value.push(o)}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 s=this.value[n].toString();n!==0&&(e=`${e}.`),t&&(s=`{${s}}`),e+=s}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}};$f.NAME="RelativeObjectIdentifierValueBlock";var E7,Kf=class extends it{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,$f),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};E7=Kf;H.RelativeObjectIdentifier=E7;Kf.NAME="RelativeObjectIdentifier";var x7,Ht=class extends ms{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};x7=Ht;H.Sequence=x7;Ht.NAME="SEQUENCE";var v7,Vf=class extends ms{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};v7=Vf;H.Set=v7;Vf.NAME="SET";var Hf=class extends Mn(ht){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=$i}toJSON(){return{...super.toJSON(),value:this.value}}};Hf.NAME="StringValueBlock";var qf=class extends Hf{};qf.NAME="SimpleStringValueBlock";var Nt=class extends _f{constructor({...e}={}){super(e,qf)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,he.BufferSourceConverter.toUint8Array(e))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t);for(let s=0;s<t;s++)n[s]=e.charCodeAt(s);this.valueBlock.value=e}};Nt.NAME="SIMPLE STRING";var zf=class extends Nt{fromBuffer(e){this.valueBlock.valueHexView=he.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=he.Convert.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=he.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(he.Convert.FromUtf8String(e)),this.valueBlock.value=e}};zf.NAME="Utf8StringValueBlock";var S7,On=class extends zf{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};S7=On;H.Utf8String=S7;On.NAME="UTF8String";var Gf=class extends Nt{fromBuffer(e){this.valueBlock.value=he.Convert.ToUtf16String(e),this.valueBlock.valueHexView=he.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(he.Convert.FromUtf16String(e))}};Gf.NAME="BmpStringValueBlock";var A7,Wf=class extends Gf{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};A7=Wf;H.BmpString=A7;Wf.NAME="BMPString";var jf=class extends Nt{fromBuffer(e){let t=ArrayBuffer.isView(e)?e.slice().buffer:e.slice(0),n=new Uint8Array(t);for(let s=0;s<n.length;s+=4)n[s]=n[s+3],n[s+1]=n[s+2],n[s+2]=0,n[s+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 s=0;s<t;s++){let o=ps(e.charCodeAt(s),8),i=new Uint8Array(o);if(i.length>4)continue;let a=4-i.length;for(let c=i.length-1;c>=0;c--)n[s*4+c+a]=i[c]}this.valueBlock.value=e}};jf.NAME="UniversalStringValueBlock";var T7,Yf=class extends jf{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};T7=Yf;H.UniversalString=T7;Yf.NAME="UniversalString";var I7,Qf=class extends Nt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};I7=Qf;H.NumericString=I7;Qf.NAME="NumericString";var C7,Xf=class extends Nt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};C7=Xf;H.PrintableString=C7;Xf.NAME="PrintableString";var _7,Zf=class extends Nt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};_7=Zf;H.TeletexString=_7;Zf.NAME="TeletexString";var R7,Jf=class extends Nt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};R7=Jf;H.VideotexString=R7;Jf.NAME="VideotexString";var P7,e1=class extends Nt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};P7=e1;H.IA5String=P7;e1.NAME="IA5String";var L7,t1=class extends Nt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};L7=t1;H.GraphicString=L7;t1.NAME="GraphicString";var k7,Hc=class extends Nt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};k7=Hc;H.VisibleString=k7;Hc.NAME="VisibleString";var D7,r1=class extends Nt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};D7=r1;H.GeneralString=D7;r1.NAME="GeneralString";var N7,n1=class extends Nt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};N7=n1;H.CharacterString=N7;n1.NAME="CharacterString";var O7,qc=class extends Hc{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 s=0;s<e.length;s++)this.valueBlock.valueHexView[s]=e.charCodeAt(s)}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,he.BufferSourceConverter.toUint8Array(e)))}toBuffer(){let e=this.toString(),t=new ArrayBuffer(e.length),n=new Uint8Array(t);for(let s=0;s<e.length;s++)n[s]=e.charCodeAt(s);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 s=parseInt(n[1],10);s>=50?this.year=1900+s:this.year=2e3+s,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]=Vt(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=Vt(this.month,2),t[2]=Vt(this.day,2),t[3]=Vt(this.hour,2),t[4]=Vt(this.minute,2),t[5]=Vt(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}}};O7=qc;H.UTCTime=O7;qc.NAME="UTCTime";var B7,s1=class extends qc{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="",s="",o=0,i,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),t=!0;else{let d=new Number(e[e.length-1]);if(isNaN(d.valueOf()))throw new Error("Wrong input string for conversion");n=e}if(t){if(n.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(n.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let d=1,f=n.indexOf("+"),h="";if(f===-1&&(f=n.indexOf("-"),d=-1),f!==-1){if(h=n.substring(f+1),n=n.substring(0,f),h.length!==2&&h.length!==4)throw new Error("Wrong input string for conversion");let p=parseInt(h.substring(0,2),10);if(isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");if(a=d*p,h.length===4){if(p=parseInt(h.substring(2,4),10),isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");c=d*p}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let d=new Number(`0${n.substring(l)}`);if(isNaN(d.valueOf()))throw new Error("Wrong input string for conversion");o=d.valueOf(),s=n.substring(0,l)}else s=n;switch(!0){case s.length===8:if(i=/(\d{4})(\d{2})(\d{2})/ig,l!==-1)throw new Error("Wrong input string for conversion");break;case s.length===10:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=60*o;this.minute=Math.floor(d),d=60*(d-this.minute),this.second=Math.floor(d),d=1e3*(d-this.second),this.millisecond=Math.floor(d)}break;case s.length===12:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=60*o;this.second=Math.floor(d),d=1e3*(d-this.second),this.millisecond=Math.floor(d)}break;case s.length===14:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=1e3*o;this.millisecond=Math.floor(d)}break;default:throw new Error("Wrong input string for conversion")}let u=i.exec(s);if(u===null)throw new Error("Wrong input string for conversion");for(let d=1;d<u.length;d++)switch(d){case 1:this.year=parseInt(u[d],10);break;case 2:this.month=parseInt(u[d],10);break;case 3:this.day=parseInt(u[d],10);break;case 4:this.hour=parseInt(u[d],10)+a;break;case 5:this.minute=parseInt(u[d],10)+c;break;case 6:this.second=parseInt(u[d],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let d=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=d.getUTCFullYear(),this.month=d.getUTCMonth(),this.day=d.getUTCDay(),this.hour=d.getUTCHours(),this.minute=d.getUTCMinutes(),this.second=d.getUTCSeconds(),this.millisecond=d.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(Vt(this.year,4)),t.push(Vt(this.month,2)),t.push(Vt(this.day,2)),t.push(Vt(this.hour,2)),t.push(Vt(this.minute,2)),t.push(Vt(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(Vt(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};B7=s1;H.GeneralizedTime=B7;s1.NAME="GeneralizedTime";var M7,o1=class extends On{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};M7=o1;H.DATE=M7;o1.NAME="DATE";var U7,i1=class extends On{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};U7=i1;H.TimeOfDay=U7;i1.NAME="TimeOfDay";var F7,a1=class extends On{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};F7=a1;H.DateTime=F7;a1.NAME="DateTime";var $7,c1=class extends On{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};$7=c1;H.Duration=$7;c1.NAME="Duration";var K7,l1=class extends On{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};K7=l1;H.TIME=K7;l1.NAME="TIME";async function d1(r,e){let n=await Ui.create().encrypt(r,e);return hn.encode(n)}async function Um(r,e,t){if(r.type==="RSA")return eI(r,e,t);if(r.type==="Ed25519")return XT(r,e,t);if(r.type==="secp256k1")return ZT(r,e,t);if(r.type==="ECDSA")return JT(r,e,t);throw new gr}async function XT(r,e,t="libp2p-key"){if(t==="libp2p-key")return d1(ao(r),e);throw new E(`export format '${t}' is not supported`)}async function ZT(r,e,t="libp2p-key"){if(t==="libp2p-key")return d1(ao(r),e);throw new E("Export format is not supported")}async function JT(r,e,t="libp2p-key"){if(t==="libp2p-key")return d1(ao(r),e);throw new E(`export format '${t}' is not supported`)}async function eI(r,e,t="pkcs-8"){if(t==="pkcs-8")return tI(r,e);if(t==="libp2p-key")return d1(ao(r),e);throw new E("Export format is not supported")}async function tI(r,e){let t=ze.get(),s=new Ht({value:[new Nn({value:0}),new Ht({value:[new en({value:"1.2.840.113549.1.1.1"}),new Ro]}),new Dn({valueHex:r.raw})]}).toBER(),o=new Uint8Array(s,0,s.byteLength),i=t.getRandomValues(new Uint8Array(16)),a=await Ef(qr,e,i,{c:1e4,dkLen:32}),c=t.getRandomValues(new Uint8Array(16)),l=await t.subtle.importKey("raw",ae(a),"AES-CBC",!1,["encrypt"]),u=await t.subtle.encrypt({name:"AES-CBC",iv:ae(c)},l,ae(o)),d=new Ht({value:[new Dn({valueHex:i}),new Nn({value:1e4}),new Nn({value:32}),new Ht({value:[new en({value:"1.2.840.113549.2.11"}),new Ro]})]}),f=new Ht({value:[new en({value:"1.2.840.113549.1.5.13"}),new Ht({value:[new Ht({value:[new en({value:"1.2.840.113549.1.5.12"}),d]}),new Ht({value:[new en({value:"2.16.840.1.101.3.4.1.42"}),new Dn({valueHex:c})]})]})]}),p=new Ht({value:[f,new Dn({valueHex:u})]}).toBER(),y=new Uint8Array(p,0,p.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...k(y,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
|
|
31
|
+
`)}async function Fm(r,e){try{let t=await rI(r,e);return Og(t)}catch{}if(!r.includes("BEGIN"))throw new E("Encrypted key was not a libp2p-key or a PEM file");return nI(r,e)}async function rI(r,e){let t=hn.decode(r);return Ui.create().decrypt(t,e)}async function nI(r,e){let t=ze.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let o=C(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:i}=u1(o),{iv:a,salt:c,iterations:l,keySize:u,cipherText:d}=sI(i),f=await Ef(qr,e,c,{c:l,dkLen:u}),h=await t.subtle.importKey("raw",ae(f),"AES-CBC",!1,["decrypt"]),p=Gc(await t.subtle.decrypt({name:"AES-CBC",iv:ae(a)},h,ae(d))),{result:y}=u1(p);n=z7(y)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let o=C(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:i}=u1(o);n=z7(i)}else throw new E("Could not parse private key from PEM data");let s=Bg(n);if(s.type!=="RSA")throw new E("Could not parse RSA private key from PEM data");return s}function sI(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new E("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 E("Only pkcs5PBKDF2 key derivation functions are supported");let o=n.valueBlock.value[1],i=Gc(o.valueBlock.value[0].getValue()),a=1e4,c=32;if(o.valueBlock.value.length===3)a=Number(o.valueBlock.value[1].toBigInt()),c=Number(o.valueBlock.value[2].toBigInt());else if(o.valueBlock.value.length===2)throw new E("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key");let l=e.valueBlock.value[1].valueBlock.value[1],u=l.valueBlock.value[0].toString();if(u!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(u!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new E("Only AES-CBC encryption schemes are supported")}}}}let d=Gc(l.valueBlock.value[1].getValue());return{cipherText:Gc(r.valueBlock.value[1].getValue()),salt:i,iterations:a,keySize:c,iv:d}}function z7(r){return Gc(r.valueBlock.value[2].getValue())}function Gc(r){return new Uint8Array(r,0,r.byteLength)}var oI="/pkcs8/",$m="/info/",Wc=new WeakMap,Po={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3};function Ki(r){return r==null||typeof r!="string"?!1:r===(0,G7.default)(r.trim())&&r.length>0}async function pt(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function Lo(r){return new St(oI+r)}function Vi(r){return new St($m+r)}async function iI(r){let e=ao(r),t=await at.digest(e);return ve.encode(t.bytes).substring(1)}var f1=class{components;init;log;self;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init={...t,dek:{...Lm,...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<Po.minKeyLength)throw new Error(`dek.keyLength must be least ${Po.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Po.minSaltLength)throw new Error(`dek.saltLength must be least ${Po.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Po.minIterationCount)throw new Error(`dek.iterationCount must be least ${Po.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Oc(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Wc.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[ue]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},this.options),t=Math.ceil(Po.minSaltLength/3)*3;return e.dek!=null&&(e.dek.salt=k(crypto.getRandomValues(new Uint8Array(t)),"base64")),e}static get options(){return{dek:{...Lm}}}async findKeyByName(e){if(!Ki(e))throw await pt(),new E(`Invalid key name '${e}'`);let t=Vi(e);try{let n=await this.components.datastore.get(t);return JSON.parse(k(n))}catch(n){throw await pt(),this.log.error("could not read key from datastore - %e",n),new ke(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:$m};for await(let n of this.components.datastore.query(t)){let s=JSON.parse(k(n.value));if(s.id===e)return s}throw new E(`Key with id '${e}' does not exist.`)}catch(t){throw await pt(),t}}async importKey(e,t){if(!Ki(e))throw await pt(),new E(`Invalid key name '${e}'`);if(t==null)throw await pt(),new E("Key is required");let n=Lo(e);if(await this.components.datastore.has(n))throw await pt(),new E(`Key '${e}' already exists`);let o,i;try{o=await iI(t);let l=Wc.get(this);if(l==null)throw new E("dek missing");let u=l.dek;i=await Um(t,u,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await pt(),l}let a={name:e,id:o},c=this.components.datastore.batch();return c.put(n,C(i)),c.put(Vi(e),C(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!Ki(e))throw await pt(),new E(`Invalid key name '${e}'`);let t=Lo(e);try{let n=await this.components.datastore.get(t),s=k(n),o=Wc.get(this);if(o==null)throw new E("dek missing");let i=o.dek;return await Fm(s,i)}catch(n){throw await pt(),n}}async removeKey(e){if(!Ki(e)||e===this.self)throw await pt(),new E(`Invalid key name '${e}'`);let t=Lo(e),n=await this.findKeyByName(e),s=this.components.datastore.batch();return s.delete(t),s.delete(Vi(e)),await s.commit(),n}async listKeys(){let e={prefix:$m},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(k(n.value)));return t}async renameKey(e,t){if(!Ki(e)||e===this.self)throw await pt(),new E(`Invalid old key name '${e}'`);if(!Ki(t)||t===this.self)throw await pt(),new E(`Invalid new key name '${t}'`);let n=Lo(e),s=Lo(t),o=Vi(e),i=Vi(t);if(await this.components.datastore.has(s))throw await pt(),new E(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(o),u=JSON.parse(k(l));u.name=t;let d=this.components.datastore.batch();return d.put(s,c),d.put(i,C(JSON.stringify(u))),d.delete(n),d.delete(o),await d.commit(),u}catch(c){throw await pt(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await pt(),new E(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await pt(),new E(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await pt(),new E(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=Wc.get(this);if(n==null)throw new E("dek missing");let s=n.dek;this.init.pass=t;let o=t!=null&&this.init.dek?.salt!=null?Oc(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Wc.set(this,{dek:o});let i=await this.listKeys();for(let a of i){let c=await this.components.datastore.get(Lo(a.name)),l=k(c),u=await Fm(l,s),d=o.toString(),f=await Um(u,d,u.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(Lo(a.name),C(f)),h.put(Vi(a.name),C(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function W7(r={}){return e=>new f1(e,r)}async function Km(r,e={}){let t=e.selfKey??"self",n=W7(e)({datastore:r,logger:pi()}),s;return await r.has(new St(`/pkcs8/${t}`))?s=await n.exportKey(t):(s=await bu(e.keyType??"Ed25519"),await n.importKey(t,s)),s}var Hi=!!globalThis.process?.env?.DUMP_SESSION_KEYS,Vm=16;function aI(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in r&&r.BYTES_PER_ELEMENT===1}function h1(r){if(typeof r!="boolean")throw new TypeError(`boolean expected, not ${r}`)}function qi(r){if(typeof r!="number")throw new TypeError("number expected, got "+typeof r);if(!Number.isSafeInteger(r)||r<0)throw new RangeError("positive integer expected, got "+r)}function Ze(r,e,t=""){let n=aI(r),s=r?.length,o=e!==void 0;if(!n||o&&s!==e){let i=t&&`"${t}" `,a=o?` of length ${e}`:"",c=n?`length=${s}`:`type=${typeof r}`,l=i+"expected Uint8Array"+a+", got "+c;throw n?new RangeError(l):new TypeError(l)}return r}function Hm(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function j7(r,e,t=!1){Ze(r,void 0,"output");let n=e.outputLen;if(r.length<n)throw new RangeError("digestInto() expects output buffer of length at least "+n);if(t&&!zi(r))throw new Error("invalid output, must be aligned")}function rn(r){return new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4))}function Dr(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function cI(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}var ko=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,lI=r=>r<<24&4278190080|r<<8&16711680|r>>>8&65280|r>>>24&255;var uI=r=>{for(let e=0;e<r.length;e++)r[e]=lI(r[e]);return r},Un=ko?r=>r:uI;function Y7(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function Q7(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}function X7(r,e,t){let n=e,s=t||(()=>[]),o=(a,c)=>n(c,...s(a)).update(a).digest(),i=n(new Uint8Array(r),...s(new Uint8Array(0)));return o.outputLen=i.outputLen,o.blockLen=i.blockLen,o.create=(a,...c)=>n(a,...c),o}var Z7=(r,e)=>{function t(n,...s){if(Ze(n,void 0,"key"),r.nonceLength!==void 0){let u=s[0];Ze(u,r.varSizeNonce?void 0:r.nonceLength,"nonce")}let o=r.tagLength;o&&s[1]!==void 0&&Ze(s[1],void 0,"AAD");let i=e(n,...s),a=(u,d)=>{if(d!==void 0){if(u!==2)throw new Error("cipher output not supported");Ze(d,void 0,"output")}},c=!1;return{encrypt(u,d){if(c)throw new Error("cannot encrypt() twice with same key + nonce");return c=!0,Ze(u),a(i.encrypt.length,d),i.encrypt(u,d)},decrypt(u,d){if(Ze(u),o&&u.length<o)throw new Error('"ciphertext" expected length bigger than tagLength='+o);return a(i.decrypt.length,d),i.decrypt(u,d)}}}return Object.assign(t,r),t};function jc(r,e,t=!0){if(e===void 0)return new Uint8Array(r);if(Ze(e,void 0,"output"),e.length!==r)throw new Error('"output" expected Uint8Array of length '+r+", got: "+e.length);if(t&&!zi(e))throw new Error("invalid output, must be aligned");return e}function J7(r,e,t){qi(r),qi(e),h1(t);let n=new Uint8Array(16),s=cI(n);return s.setBigUint64(0,BigInt(e),t),s.setBigUint64(8,BigInt(r),t),n}function zi(r){return r.byteOffset%4===0}function Gi(r){return Uint8Array.from(Ze(r))}var t9=r=>Uint8Array.from(r.split(""),e=>e.charCodeAt(0)),dI=Un(rn(t9("expand 16-byte k"))),fI=Un(rn(t9("expand 32-byte k")));function ye(r,e){return r<<e|r>>>32-e}var Yc=64,hI=16,qm=2**32-1,e9=Uint32Array.of();function pI(r,e,t,n,s,o,i,a){let c=s.length,l=new Uint8Array(Yc),u=rn(l),d=ko&&zi(s)&&zi(o),f=d?rn(s):e9,h=d?rn(o):e9;if(!ko){for(let p=0;p<c;i++){if(r(e,t,n,u,i,a),Un(u),i>=qm)throw new Error("arx: counter overflow");let y=Math.min(Yc,c-p);for(let m=0,g;m<y;m++)g=p+m,o[g]=s[g]^l[m];p+=y}return}for(let p=0;p<c;i++){if(r(e,t,n,u,i,a),i>=qm)throw new Error("arx: counter overflow");let y=Math.min(Yc,c-p);if(d&&y===Yc){let m=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let g=0,w;g<hI;g++)w=m+g,h[w]=f[w]^u[g];p+=Yc;continue}for(let m=0,g;m<y;m++)g=p+m,o[g]=s[g]^l[m];p+=y}}function r9(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:s,counterRight:o,rounds:i}=Y7({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return qi(s),qi(i),h1(o),h1(t),(a,c,l,u,d=0)=>{Ze(a,void 0,"key"),Ze(c,void 0,"nonce"),Ze(l,void 0,"data");let f=l.length;if(u=jc(f,u,!1),qi(d),d<0||d>=qm)throw new Error("arx: counter overflow");let h=[],p=a.length,y,m;if(p===32)h.push(y=Gi(a)),m=fI;else if(p===16&&t)y=new Uint8Array(32),y.set(a),y.set(a,16),m=dI,h.push(y);else throw Ze(a,32,"arx key"),new Error("invalid key size");(!ko||!zi(c))&&h.push(c=Gi(c));let g=rn(y);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");let _=c.subarray(0,16);if(ko)n(m,g,rn(_),g);else{let P=Un(Uint32Array.from(m));n(P,g,rn(_),g),Dr(P),Un(g)}c=c.subarray(16)}else ko||Un(g);let w=16-s;if(w!==c.length)throw new Error(`arx: nonce must be ${w} or 16 bytes`);if(w!==12){let _=new Uint8Array(12);_.set(c,o?0:12-c.length),c=_,h.push(c)}let v=Un(rn(c));try{return pI(r,m,g,v,l,u,d,i),u}finally{Dr(...h)}}}function mt(r,e){return r[e++]&255|(r[e++]&255)<<8}var zm=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;destroyed=!1;constructor(e){e=Gi(Ze(e,32,"key"));let t=mt(e,0),n=mt(e,2),s=mt(e,4),o=mt(e,6),i=mt(e,8),a=mt(e,10),c=mt(e,12),l=mt(e,14);this.r[0]=t&8191,this.r[1]=(t>>>13|n<<3)&8191,this.r[2]=(n>>>10|s<<6)&7939,this.r[3]=(s>>>7|o<<9)&8191,this.r[4]=(o>>>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 u=0;u<8;u++)this.pad[u]=mt(e,16+2*u)}process(e,t,n=!1){let s=n?0:2048,{h:o,r:i}=this,a=i[0],c=i[1],l=i[2],u=i[3],d=i[4],f=i[5],h=i[6],p=i[7],y=i[8],m=i[9],g=mt(e,t+0),w=mt(e,t+2),v=mt(e,t+4),_=mt(e,t+6),P=mt(e,t+8),D=mt(e,t+10),B=mt(e,t+12),N=mt(e,t+14),U=o[0]+(g&8191),G=o[1]+((g>>>13|w<<3)&8191),V=o[2]+((w>>>10|v<<6)&8191),b=o[3]+((v>>>7|_<<9)&8191),I=o[4]+((_>>>4|P<<12)&8191),T=o[5]+(P>>>1&8191),S=o[6]+((P>>>14|D<<2)&8191),x=o[7]+((D>>>11|B<<5)&8191),R=o[8]+((B>>>8|N<<8)&8191),L=o[9]+(N>>>5|s),A=0,O=A+U*a+G*(5*m)+V*(5*y)+b*(5*p)+I*(5*h);A=O>>>13,O&=8191,O+=T*(5*f)+S*(5*d)+x*(5*u)+R*(5*l)+L*(5*c),A+=O>>>13,O&=8191;let M=A+U*c+G*a+V*(5*m)+b*(5*y)+I*(5*p);A=M>>>13,M&=8191,M+=T*(5*h)+S*(5*f)+x*(5*d)+R*(5*u)+L*(5*l),A+=M>>>13,M&=8191;let q=A+U*l+G*c+V*a+b*(5*m)+I*(5*y);A=q>>>13,q&=8191,q+=T*(5*p)+S*(5*h)+x*(5*f)+R*(5*d)+L*(5*u),A+=q>>>13,q&=8191;let J=A+U*u+G*l+V*c+b*a+I*(5*m);A=J>>>13,J&=8191,J+=T*(5*y)+S*(5*p)+x*(5*h)+R*(5*f)+L*(5*d),A+=J>>>13,J&=8191;let X=A+U*d+G*u+V*l+b*c+I*a;A=X>>>13,X&=8191,X+=T*(5*m)+S*(5*y)+x*(5*p)+R*(5*h)+L*(5*f),A+=X>>>13,X&=8191;let Ce=A+U*f+G*d+V*u+b*l+I*c;A=Ce>>>13,Ce&=8191,Ce+=T*a+S*(5*m)+x*(5*y)+R*(5*p)+L*(5*h),A+=Ce>>>13,Ce&=8191;let _e=A+U*h+G*f+V*d+b*u+I*l;A=_e>>>13,_e&=8191,_e+=T*c+S*a+x*(5*m)+R*(5*y)+L*(5*p),A+=_e>>>13,_e&=8191;let Re=A+U*p+G*h+V*f+b*d+I*u;A=Re>>>13,Re&=8191,Re+=T*l+S*c+x*a+R*(5*m)+L*(5*y),A+=Re>>>13,Re&=8191;let we=A+U*y+G*p+V*h+b*f+I*d;A=we>>>13,we&=8191,we+=T*u+S*l+x*c+R*a+L*(5*m),A+=we>>>13,we&=8191;let Ue=A+U*m+G*y+V*p+b*h+I*f;A=Ue>>>13,Ue&=8191,Ue+=T*d+S*u+x*l+R*c+L*a,A+=Ue>>>13,Ue&=8191,A=(A<<2)+A|0,A=A+O|0,O=A&8191,A=A>>>13,M+=A,o[0]=O,o[1]=M,o[2]=q,o[3]=J,o[4]=X,o[5]=Ce,o[6]=_e,o[7]=Re,o[8]=we,o[9]=Ue}finalize(){let{h:e,pad:t}=this,n=new Uint16Array(10),s=e[1]>>>13;e[1]&=8191;for(let a=2;a<10;a++)e[a]+=s,s=e[a]>>>13,e[a]&=8191;e[0]+=s*5,s=e[0]>>>13,e[0]&=8191,e[1]+=s,s=e[1]>>>13,e[1]&=8191,e[2]+=s,n[0]=e[0]+5,s=n[0]>>>13,n[0]&=8191;for(let a=1;a<10;a++)n[a]=e[a]+s,s=n[a]>>>13,n[a]&=8191;n[9]-=8192;let o=(s^1)-1;for(let a=0;a<10;a++)n[a]&=o;o=~o;for(let a=0;a<10;a++)e[a]=e[a]&o|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;Dr(n)}update(e){Hm(this),Ze(e),e=Gi(e);let{buffer:t,blockLen:n}=this,s=e.length;for(let o=0;o<s;){let i=Math.min(n-this.pos,s-o);if(i===n){for(;n<=s-o;o+=n)this.process(e,o);continue}t.set(e.subarray(o,o+i),this.pos),this.pos+=i,o+=i,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){this.destroyed=!0,Dr(this.h,this.r,this.buffer,this.pad)}digestInto(e){Hm(this),j7(e,this),this.finished=!0;let{buffer:t,h:n}=this,{pos:s}=this;if(s){for(t[s++]=1;s<16;s++)t[s]=0;this.process(t,0,!0)}this.finalize();let o=0;for(let i=0;i<8;i++)e[o++]=n[i]>>>0,e[o++]=n[i]>>>8}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}},n9=X7(32,r=>new zm(r));function mI(r,e,t,n,s,o=20){let i=r[0],a=r[1],c=r[2],l=r[3],u=e[0],d=e[1],f=e[2],h=e[3],p=e[4],y=e[5],m=e[6],g=e[7],w=s,v=t[0],_=t[1],P=t[2],D=i,B=a,N=c,U=l,G=u,V=d,b=f,I=h,T=p,S=y,x=m,R=g,L=w,A=v,O=_,M=P;for(let J=0;J<o;J+=2)D=D+G|0,L=ye(L^D,16),T=T+L|0,G=ye(G^T,12),D=D+G|0,L=ye(L^D,8),T=T+L|0,G=ye(G^T,7),B=B+V|0,A=ye(A^B,16),S=S+A|0,V=ye(V^S,12),B=B+V|0,A=ye(A^B,8),S=S+A|0,V=ye(V^S,7),N=N+b|0,O=ye(O^N,16),x=x+O|0,b=ye(b^x,12),N=N+b|0,O=ye(O^N,8),x=x+O|0,b=ye(b^x,7),U=U+I|0,M=ye(M^U,16),R=R+M|0,I=ye(I^R,12),U=U+I|0,M=ye(M^U,8),R=R+M|0,I=ye(I^R,7),D=D+V|0,M=ye(M^D,16),x=x+M|0,V=ye(V^x,12),D=D+V|0,M=ye(M^D,8),x=x+M|0,V=ye(V^x,7),B=B+b|0,L=ye(L^B,16),R=R+L|0,b=ye(b^R,12),B=B+b|0,L=ye(L^B,8),R=R+L|0,b=ye(b^R,7),N=N+I|0,A=ye(A^N,16),T=T+A|0,I=ye(I^T,12),N=N+I|0,A=ye(A^N,8),T=T+A|0,I=ye(I^T,7),U=U+G|0,O=ye(O^U,16),S=S+O|0,G=ye(G^S,12),U=U+G|0,O=ye(O^U,8),S=S+O|0,G=ye(G^S,7);let q=0;n[q++]=i+D|0,n[q++]=a+B|0,n[q++]=c+N|0,n[q++]=l+U|0,n[q++]=u+G|0,n[q++]=d+V|0,n[q++]=f+b|0,n[q++]=h+I|0,n[q++]=p+T|0,n[q++]=y+S|0,n[q++]=m+x|0,n[q++]=g+R|0,n[q++]=w+L|0,n[q++]=v+A|0,n[q++]=_+O|0,n[q++]=P+M|0}var gI=r9(mI,{counterRight:!1,counterLength:4,allowShortKeys:!1});var yI=new Uint8Array(16),s9=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(yI.subarray(t))},wI=new Uint8Array(32);function o9(r,e,t,n,s){s!==void 0&&Ze(s,void 0,"AAD");let o=r(e,t,wI),i=J7(n.length,s?s.length:0,!0),a=n9.create(o);s&&s9(a,s),s9(a,n),a.update(i);let c=a.digest();return Dr(o,i),c}var bI=r=>(e,t,n)=>({encrypt(o,i){let a=o.length;i=jc(a+16,i,!1),i.set(o);let c=i.subarray(0,-16);r(e,t,c,c,1);let l=o9(r,e,t,c,n);return i.set(l,a),Dr(l),i},decrypt(o,i){i=jc(o.length-16,i,!1);let a=o.subarray(0,-16),c=o.subarray(-16),l=o9(r,e,t,a,n);if(!Q7(c,l))throw Dr(l),new Error("invalid tag");return i.set(o.subarray(0,-16)),r(e,t,i,i,1),Dr(l),i}}),Gm=Z7({blockSize:64,nonceLength:12,tagLength:16},bI(gI));function a9(r,e,t){return mn(r),t===void 0&&(t=new Uint8Array(r.outputLen)),io(r,t,e)}var Wm=Uint8Array.of(0),i9=Uint8Array.of();function c9(r,e,t,n=32){mn(r),Bt(n,"length"),ct(e,void 0,"prk");let s=r.outputLen;if(e.length<s)throw new Error('"prk" must be at least HashLen octets');if(n>255*s)throw new Error("Length must be <= 255*HashLen");let o=Math.ceil(n/s);t===void 0?t=i9:ct(t,void 0,"info");let i=new Uint8Array(o*s),a=io.create(r,e),c=a._cloneInto(),l=new Uint8Array(a.outputLen);for(let u=0;u<o;u++)Wm[0]=u+1,c.update(u===0?i9:l).update(t).update(Wm).digestInto(l),i.set(l,s*u),a._cloneInto(c);return a.destroy(),c.destroy(),wt(l,Wm),i.slice(0,n)}var jm={hashSHA256(r){return cr(r.subarray())},getHKDF(r,e){let t=a9(cr,e,r),s=c9(cr,t,void 0,96),o=s.subarray(0,32),i=s.subarray(32,64),a=s.subarray(64,96);return[o,i,a]},generateX25519KeyPair(){let r=Na.utils.randomSecretKey();return{publicKey:Na.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:Na.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return Na.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return Gm(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,s){return Gm(n,e,t).decrypt(r.subarray(),s)}};var l9=jm;function u9(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 Wi=r=>{let e=de(2);return e[0]=r>>8,e[1]=r,e};Wi.bytes=2;var ji=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)};ji.bytes=2;function d9(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 Ym(r,e){!e.enabled||!Hi||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${k(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${k(r.privateKey,"hex")}`)):e("Missing local static keys."))}function Qm(r,e){!e.enabled||!Hi||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${k(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${k(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function f9(r,e){!e.enabled||!Hi||e(r?`REMOTE_STATIC_PUBLIC_KEY ${k(r.subarray(),"hex")}`:"Missing remote static public key.")}function Xm(r,e){!e.enabled||!Hi||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${k(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function Zm(r,e,t){!t.enabled||!Hi||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&k(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&k(e.k,"hex")}`))}var p9=Symbol.for("@achingbrain/uint8arraylist");function h9(r,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let t=0;for(let n of r){let s=t+n.byteLength;if(e<s)return{buf:n,index:e-t};t=s}throw new RangeError("index is out of bounds")}function p1(r){return!!r?.[p9]}var nn=class r{bufs;length;[p9]=!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(p1(n)){t+=n.byteLength;for(let s of n.bufs)this.bufs.push(s)}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(p1(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=h9(this.bufs,e);return t.buf[t.index]}set(e,t){let n=h9(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(p1(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:s}=this._subList(e,t);return Le(n,s)}subarray(e,t){let{bufs:n,length:s}=this._subList(e,t);return n.length===1?n[0]:Le(n,s)}sublist(e,t){let{bufs:n,length:s}=this._subList(e,t),o=new r;return o.length=s,o.bufs=n,o}_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=[],s=0;for(let o=0;o<this.bufs.length;o++){let i=this.bufs[o],a=s,c=a+i.byteLength;if(s=c,e>=c)continue;let l=e>=a&&e<c,u=t>a&&t<=c;if(l&&u){if(e===a&&t===c){n.push(i);break}let d=e-a;n.push(i.subarray(d,d+(t-e)));break}if(l){if(e===0){n.push(i);continue}n.push(i.subarray(e-a));continue}if(u){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(!p1(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 s=n.byteLength;if(s===0)throw new TypeError("search must be at least 1 byte long");let o=256,i=new Int32Array(o);for(let d=0;d<o;d++)i[d]=-1;for(let d=0;d<s;d++)i[n[d]]=d;let a=i,c=this.byteLength-n.byteLength,l=n.byteLength-1,u;for(let d=t;d<=c;d+=u){u=0;for(let f=l;f>=0;f--){let h=this.get(d+f);if(n[f]!==h){u=Math.max(1,f-a[h]);break}}if(u===0)return d}return-1}getInt8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getInt8(0)}setInt8(e,t){let n=de(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 s=z(2);new DataView(s.buffer,s.byteOffset,s.byteLength).setInt16(0,t,n),this.write(s,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 s=z(4);new DataView(s.buffer,s.byteOffset,s.byteLength).setInt32(0,t,n),this.write(s,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 s=z(8);new DataView(s.buffer,s.byteOffset,s.byteLength).setBigInt64(0,t,n),this.write(s,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=de(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 s=z(2);new DataView(s.buffer,s.byteOffset,s.byteLength).setUint16(0,t,n),this.write(s,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 s=z(4);new DataView(s.buffer,s.byteOffset,s.byteLength).setUint32(0,t,n),this.write(s,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 s=z(8);new DataView(s.buffer,s.byteOffset,s.byteLength).setBigUint64(0,t,n),this.write(s,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 s=z(4);new DataView(s.buffer,s.byteOffset,s.byteLength).setFloat32(0,t,n),this.write(s,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 s=z(8);new DataView(s.buffer,s.byteOffset,s.byteLength).setFloat64(0,t,n),this.write(s,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(!Y(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((s,o)=>s+o.byteLength,0)),n.length=t,n}};var Yi=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var EI=0,xI=4294967295,vI="Cipherstate has reached maximum n, a new handshake must be performed",m1=class{n;bytes;view;constructor(e=EI){this.n=e,this.bytes=z(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>xI)throw new Error(vI)}};var Do=z(0),Qi=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new m1(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 s=this.crypto.decrypt(t,this.n.getBytes(),e,this.k,n);return this.n.increment(),s}},Jm=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=C(t,"utf-8");this.h=SI(e,n),this.ck=this.h,this.cs=new Qi(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new Qi(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new nn(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,Do);return[new Qi(this.crypto,e),new Qi(this.crypto,t)]}},e3=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:s,initiator:o,s:i,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new Jm(t,n),this.ss.mixHash(s),this.initiator=o,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 s=e.sublist(t,t+n);return this.rs=this.ss.decryptAndHash(s),n}readEE(){this.writeEE()}readES(){this.writeES()}readSE(){this.writeSE()}},Qc=class extends e3{writeMessageA(e){return new nn(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new nn(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new nn(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new Yi(`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 Yi(`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 Yi(`handshake stage 2 validation fail: ${t.message}`)}}};function SI(r,e){if(e.length<=32){let t=z(32);return t.set(e),t}else return r.hash(e)}var t3=new Float32Array([-0]),gs=new Uint8Array(t3.buffer);function m9(r,e,t){t3[0]=r,e[t]=gs[0],e[t+1]=gs[1],e[t+2]=gs[2],e[t+3]=gs[3]}function g9(r,e){return gs[0]=r[e],gs[1]=r[e+1],gs[2]=r[e+2],gs[3]=r[e+3],t3[0]}var r3=new Float64Array([-0]),Tt=new Uint8Array(r3.buffer);function y9(r,e,t){r3[0]=r,e[t]=Tt[0],e[t+1]=Tt[1],e[t+2]=Tt[2],e[t+3]=Tt[3],e[t+4]=Tt[4],e[t+5]=Tt[5],e[t+6]=Tt[6],e[t+7]=Tt[7]}function w9(r,e){return Tt[0]=r[e],Tt[1]=r[e+1],Tt[2]=r[e+2],Tt[3]=r[e+3],Tt[4]=r[e+4],Tt[5]=r[e+5],Tt[6]=r[e+6],Tt[7]=r[e+7],r3[0]}var AI=BigInt(Number.MAX_SAFE_INTEGER),TI=BigInt(Number.MIN_SAFE_INTEGER),sr=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 No;if(e<AI&&e>TI)return this.fromNumber(Number(e));let t=e<0n;t&&(e=-e);let n=e>>32n,s=e-(n<<32n);return t&&(n=~n|0n,s=~s|0n,++s>b9&&(s=0n,++n>b9&&(n=0n))),new r(Number(s),Number(n))}static fromNumber(e){if(e===0)return No;let t=e<0;t&&(e=-e);let n=e>>>0,s=(e-n)/4294967296>>>0;return t&&(s=~s>>>0,n=~n>>>0,++n>4294967295&&(n=0,++s>4294967295&&(s=0))),new r(n,s)}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):No}},No=new sr(0,0);No.toBigInt=function(){return 0n};No.zzEncode=No.zzDecode=function(){return this};No.length=function(){return 1};var b9=4294967296n;function E9(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 x9(r,e,t){if(t-e<1)return"";let s,o=[],i=0,a;for(;e<t;)a=r[e++],a<128?o[i++]=a:a>191&&a<224?o[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,o[i++]=55296+(a>>10),o[i++]=56320+(a&1023)):o[i++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,i>8191&&((s??(s=[])).push(String.fromCharCode.apply(String,o)),i=0);return s!=null?(i>0&&s.push(String.fromCharCode.apply(String,o.slice(0,i))),s.join("")):String.fromCharCode.apply(String,o.slice(0,i))}function n3(r,e,t){let n=t,s,o;for(let i=0;i<r.length;++i)s=r.charCodeAt(i),s<128?e[t++]=s:s<2048?(e[t++]=s>>6|192,e[t++]=s&63|128):(s&64512)===55296&&((o=r.charCodeAt(i+1))&64512)===56320?(s=65536+((s&1023)<<10)+(o&1023),++i,e[t++]=s>>18|240,e[t++]=s>>12&63|128,e[t++]=s>>6&63|128,e[t++]=s&63|128):(e[t++]=s>>12|224,e[t++]=s>>6&63|128,e[t++]=s&63|128);return t-n}function Nr(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function g1(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var s3=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,Nr(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 Nr(this,4);return g1(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Nr(this,4);return g1(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Nr(this,4);let e=g9(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Nr(this,4);let e=w9(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 Nr(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return x9(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Nr(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Nr(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 sr(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 Nr(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 Nr(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 Nr(this,8);let e=g1(this.buf,this.pos+=4),t=g1(this.buf,this.pos+=4);return new sr(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=Ua(this.buf,this.pos);return this.pos+=ge(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 o3(r){return new s3(r instanceof Uint8Array?r:r.subarray())}function y1(r,e,t){let n=o3(r);return e.decode(n,void 0,t)}function i3(r){let e=r??8192,t=e>>>1,n,s=e;return function(i){if(i<1||i>t)return de(i);s+i>e&&(n=de(e),s=0);let a=n.subarray(s,s+=i);return(s&7)!==0&&(s=(s|7)+1),a}}var Oo=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function a3(){}var l3=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},II=i3();function CI(r){return globalThis.Buffer!=null?de(r):II(r)}var Zc=class{len;head;tail;states;constructor(){this.len=0,this.head=new Oo(a3,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new Oo(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new u3((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(w1,10,sr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=sr.fromBigInt(e);return this._push(w1,t.length(),t)}uint64Number(e){return this._push(es,ge(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=sr.fromBigInt(e).zzEncode();return this._push(w1,t.length(),t)}sint64Number(e){let t=sr.fromNumber(e).zzEncode();return this._push(w1,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(c3,1,e?1:0)}fixed32(e){return this._push(Xc,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=sr.fromBigInt(e);return this._push(Xc,4,t.lo)._push(Xc,4,t.hi)}fixed64Number(e){let t=sr.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(m9,4,e)}double(e){return this._push(y9,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(c3,1,0):this.uint32(t)._push(RI,t,e)}string(e){let t=E9(e);return t!==0?this.uint32(t)._push(n3,t,e):this._push(c3,1,0)}fork(){return this.states=new l3(this),this.head=this.tail=new Oo(a3,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 Oo(a3,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=CI(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function c3(r,e,t){e[t]=r&255}function _I(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var u3=class extends Oo{next;constructor(e,t){super(_I,e,t),this.next=void 0}};function w1(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 RI(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(Zc.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(PI,e,r),this},Zc.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(LI,e,r),this});function PI(r,e,t){e.set(r,t)}function LI(r,e,t){r.length<40?n3(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(C(r),t)}function d3(){return new Zc}function b1(r,e){let t=d3();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Jc;(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"})(Jc||(Jc={}));function f3(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function E1(r,e){return f3("message",Jc.LENGTH_DELIMITED,r,e)}var el=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"};var x1;(function(r){let e;r.codec=()=>(e==null&&(e=E1((t,n,s={})=>{if(s.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let o of t.webtransportCerthashes)n.uint32(10),n.bytes(o);if(t.streamMuxers!=null)for(let o of t.streamMuxers)n.uint32(18),n.string(o);s.lengthDelimited!==!1&&n.ldelim()},(t,n,s={})=>{let o={webtransportCerthashes:[],streamMuxers:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{if(s.limits?.webtransportCerthashes!=null&&o.webtransportCerthashes.length===s.limits.webtransportCerthashes)throw new el('Decode error - map field "webtransportCerthashes" had too many elements');o.webtransportCerthashes.push(t.bytes());break}case 2:{if(s.limits?.streamMuxers!=null&&o.streamMuxers.length===s.limits.streamMuxers)throw new el('Decode error - map field "streamMuxers" had too many elements');o.streamMuxers.push(t.string());break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>b1(t,r.codec()),r.decode=(t,n)=>y1(t,r.codec(),n)})(x1||(x1={}));var tl;(function(r){let e;r.codec=()=>(e==null&&(e=E1((t,n,s={})=>{s.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),x1.codec().encode(t.extensions,n)),s.lengthDelimited!==!1&&n.ldelim()},(t,n,s={})=>{let o={identityKey:z(0),identitySig:z(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{o.identityKey=t.bytes();break}case 2:{o.identitySig=t.bytes();break}case 4:{o.extensions=x1.codec().decode(t,t.uint32(),{limits:s.limits?.extensions});break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>b1(t,r.codec()),r.decode=(t,n)=>y1(t,r.codec(),n)})(tl||(tl={}));async function p3(r,e,t){let n=await r.sign(A9(e));return tl.encode({identityKey:tt(r.publicKey),identitySig:n,extensions:t})}async function m3(r,e,t){try{let n=tl.decode(r),s=Xe(n.identityKey);if(t?.equals(s)===!1)throw new Error(`Payload identity key ${s} does not match expected remote identity key ${t}`);if(!e)throw new Error("Remote static does not exist");let o=A9(e);if(!await s.verify(o,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new Nl(n.message)}}function A9(r){let e=C("noise-libp2p-static-key:");return r instanceof Uint8Array?Le([e,r],e.length+r.length):(r.prepend(e),r)}var h3=class extends is{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 Zu({lengthDecoder:ji,maxBufferSize:16*1024*1024,encodingLength:()=>2});let s=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",s);let o=c=>{c.error!=null?c.local===!0?this.abort(c.error):this.onRemoteReset():this.onTransportClosed()};this.stream.addEventListener("close",o);let i=()=>{this.safeDispatchEvent("drain")};this.stream.addEventListener("drain",i);let a=()=>{this.onRemoteCloseWrite()};this.stream.addEventListener("remoteCloseWrite",a)}encrypt(e){let t=new nn;for(let n=0;n<e.byteLength;n+=65519){let s=n+65519;s>e.byteLength&&(s=e.byteLength);let o;e instanceof Uint8Array?o=this.handshake.encrypt(e.subarray(n,s)):o=this.handshake.encrypt(e.sublist(n,s)),this.metrics?.encryptedPackets.increment(),t.append(Wi(o.byteLength)),t.append(o)}return t}decrypt(e){let t=new nn;for(let n=0;n<e.byteLength;n+=65535){let s=n+65535;if(s>e.byteLength&&(s=e.byteLength),s-Vm<n)throw new Error("Invalid chunk");let o;e instanceof Uint8Array?o=e.subarray(n,s):o=e.sublist(n,s);let i=e.subarray(n,s-Vm);try{let a=this.handshake.decrypt(o,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 g3(r,e,t){return new h3(r,e,t)}async function T9(r,e){let{log:t,connection:n,crypto:s,privateKey:o,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,u=await p3(o,a.publicKey,l),d=new Qc({crypto:s,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:i,s:a});Ym(d.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(d.writeMessageA(Do),e),t.trace("Stage 0 - Initiator finished sending first message."),Qm(d.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let f=d.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),Xm(d.re,t),f9(d.rs,t),t.trace("Initiator going to check remote's signature...");let h=await m3(f,d.rs,c);t.trace("All good with the signature!"),t.trace("Stage 2 - Initiator sending third handshake message."),await n.write(d.writeMessageC(u),e),t.trace("Stage 2 - Initiator sent message with signed payload.");let[p,y]=d.ss.split();return Zm(p,y,t),{payload:h,encrypt:m=>p.encryptWithAd(Do,m),decrypt:(m,g)=>y.decryptWithAd(Do,m,g)}}async function I9(r,e){let{log:t,connection:n,crypto:s,privateKey:o,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,u=await p3(o,a.publicKey,l),d=new Qc({crypto:s,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:i,s:a});Ym(d.s,t),t.trace("Stage 0 - Responder waiting to receive first message."),d.readMessageA(await n.read(e)),t.trace("Stage 0 - Responder received first message."),Xm(d.re,t),t.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await n.write(d.writeMessageB(u),e),t.trace("Stage 1 - Responder sent the second handshake message with signed payload."),Qm(d.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let f=d.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let h=await m3(f,d.rs,c),[p,y]=d.ss.split();return Zm(p,y,t),{payload:h,encrypt:m=>y.encryptWithAd(Do,m),decrypt:(m,g)=>p.decryptWithAd(Do,m,g)}}var v1=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;log;constructor(e,t={}){let{staticNoiseKey:n,extensions:s,crypto:o,prologueBytes:i}=t,{metrics:a}=e;this.components=e,this.log=e.logger.forComponent("libp2p:noise");let c=o??l9;this.crypto=u9(c),this.extensions={webtransportCerthashes:[],...s},this.metrics=a?d9(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=i??z(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[ue]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=e.log?.newScope("noise")??this.log,s=us(e,{lengthEncoder:Wi,lengthDecoder:ji,maxDataLength:65535}),o=await this.performHandshakeInitiator(s,this.components.privateKey,n,t?.remotePeer?.publicKey,t),i=Xe(o.payload.identityKey);return{connection:g3(s.unwrap(),o,this.metrics),remoteExtensions:o.payload.extensions,remotePeer:Wr(i),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(o.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 s=t.get(n);if(s!=null)return s}if(e.length)throw new Ol("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,s=us(e,{lengthEncoder:Wi,lengthDecoder:ji,maxDataLength:65535}),o=await this.performHandshakeResponder(s,this.components.privateKey,n,t?.remotePeer?.publicKey,t),i=Xe(o.payload.identityKey);return{connection:g3(s.unwrap(),o,this.metrics),remoteExtensions:o.payload.extensions,remotePeer:Wr(i),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(o.payload.extensions?.streamMuxers)}}async performHandshakeInitiator(e,t,n,s,o){let i,a=o?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{i=await T9({connection:e,privateKey:t,remoteIdentityKey:s,log:n.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return i}async performHandshakeResponder(e,t,n,s,o){let i,a=o?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{i=await I9({connection:e,privateKey:t,remoteIdentityKey:s,log:n.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return i}};function S1(r={}){return e=>new v1(e,r)}var _9=Symbol.for("@achingbrain/uint8arraylist");function C9(r,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let t=0;for(let n of r){let s=t+n.byteLength;if(e<s)return{buf:n,index:e-t};t=s}throw new RangeError("index is out of bounds")}function A1(r){return!!r?.[_9]}var Xi=class r{bufs;length;[_9]=!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(A1(n)){t+=n.byteLength;for(let s of n.bufs)this.bufs.push(s)}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(A1(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=C9(this.bufs,e);return t.buf[t.index]}set(e,t){let n=C9(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(A1(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:s}=this._subList(e,t);return Le(n,s)}subarray(e,t){let{bufs:n,length:s}=this._subList(e,t);return n.length===1?n[0]:Le(n,s)}sublist(e,t){let{bufs:n,length:s}=this._subList(e,t),o=new r;return o.length=s,o.bufs=n,o}_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=[],s=0;for(let o=0;o<this.bufs.length;o++){let i=this.bufs[o],a=s,c=a+i.byteLength;if(s=c,e>=c)continue;let l=e>=a&&e<c,u=t>a&&t<=c;if(l&&u){if(e===a&&t===c){n.push(i);break}let d=e-a;n.push(i.subarray(d,d+(t-e)));break}if(l){if(e===0){n.push(i);continue}n.push(i.subarray(e-a));continue}if(u){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(!A1(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 s=n.byteLength;if(s===0)throw new TypeError("search must be at least 1 byte long");let o=256,i=new Int32Array(o);for(let d=0;d<o;d++)i[d]=-1;for(let d=0;d<s;d++)i[n[d]]=d;let a=i,c=this.byteLength-n.byteLength,l=n.byteLength-1,u;for(let d=t;d<=c;d+=u){u=0;for(let f=l;f>=0;f--){let h=this.get(d+f);if(n[f]!==h){u=Math.max(1,f-a[h]);break}}if(u===0)return d}return-1}getInt8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getInt8(0)}setInt8(e,t){let n=de(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 s=z(2);new DataView(s.buffer,s.byteOffset,s.byteLength).setInt16(0,t,n),this.write(s,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 s=z(4);new DataView(s.buffer,s.byteOffset,s.byteLength).setInt32(0,t,n),this.write(s,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 s=z(8);new DataView(s.buffer,s.byteOffset,s.byteLength).setBigInt64(0,t,n),this.write(s,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=de(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 s=z(2);new DataView(s.buffer,s.byteOffset,s.byteLength).setUint16(0,t,n),this.write(s,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 s=z(4);new DataView(s.buffer,s.byteOffset,s.byteLength).setUint32(0,t,n),this.write(s,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 s=z(8);new DataView(s.buffer,s.byteOffset,s.byteLength).setBigUint64(0,t,n),this.write(s,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 s=z(4);new DataView(s.buffer,s.byteOffset,s.byteLength).setFloat32(0,t,n),this.write(s,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 s=z(8);new DataView(s.buffer,s.byteOffset,s.byteLength).setFloat64(0,t,n),this.write(s,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(!Y(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((s,o)=>s+o.byteLength,0)),n.length=t,n}};var Ke;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Ke||(Ke={}));var be;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(be||(be={}));var CY=Object.values(be).filter(r=>typeof r!="string"),R9=0,Je;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Je||(Je={}));var sn=12;var Fn=class extends Error{static name="ProtocolError";reason;constructor(e,t){super(e),this.name="ProtocolError",this.reason=t}};function P9(r){return r?.reason!==null}var or=class extends Fn{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e,Je.ProtocolError),this.name="InvalidFrameError"}},Zi=class extends Fn{static name="UnRequestedPingError";constructor(e="Un-requested ping error"){super(e,Je.ProtocolError),this.name="UnRequestedPingError"}},Ji=class extends Fn{static name="NotMatchingPingError";constructor(e="Not matching ping error"){super(e,Je.ProtocolError),this.name="NotMatchingPingError"}};var T1=class extends Fn{static name="StreamAlreadyExistsError";constructor(e="Stream already exists"){super(e,Je.ProtocolError),this.name="StreamAlreadyExistsError"}},I1=class extends Fn{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e,Je.ProtocolError),this.name="DecodeInvalidVersionError"}},C1=class extends Fn{static name="BothClientsError";constructor(e="Both clients"){super(e,Je.ProtocolError),this.name="BothClientsError"}},ea=class extends Fn{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e,Je.ProtocolError),this.name="ReceiveWindowExceededError"}};var kY=new Set([or.name,Zi.name,Ji.name,T1.name,I1.name,C1.name,ea.name]),nl=256*1024,_1=16*1024*1024;var sl={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,maxMessageSize:64*1024,maxEarlyStreams:10,streamOptions:{initialStreamWindowSize:nl,maxStreamWindowSize:_1,inactivityTimeout:12e4,maxReadBufferLength:4194304,maxWriteBufferLength:1/0}};function L9(r){if(r.keepAliveInterval!=null&&r.keepAliveInterval<=0)throw new E("keep-alive interval must be positive");if(r.maxInboundStreams!=null&&r.maxInboundStreams<0)throw new E("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams!=null&&r.maxOutboundStreams<0)throw new E("max outbound streams must be larger or equal 0");if(r.maxMessageSize!=null&&r.maxMessageSize<1024)throw new E("MaxMessageSize must be greater than a kilobyte");if(r.streamOptions?.initialStreamWindowSize!=null&&r.streamOptions?.initialStreamWindowSize<nl)throw new E("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 E("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.streamOptions?.maxStreamWindowSize!=null&&r.streamOptions?.maxStreamWindowSize>2**32-1)throw new E("MaxStreamWindowSize must be less than equal MAX_UINT32")}function D9(r){return r.header.type===Ke.Data&&r.data!==null}var k9=2**24;function kI(r){if(r[0]!==R9)throw new or("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*k9+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*k9+(r[9]<<16)+(r[10]<<8)+r[11]}}var R1=class{buffer;constructor(){this.buffer=new Xi}*emitFrames(e){for(this.buffer.append(e);;){let t=this.readFrame();if(t===void 0)break;yield t}}readFrame(){let e=sn;if(this.buffer.byteLength<sn)return;let t=kI(this.buffer.subarray(0,sn));if(t.type===Ke.Data){if(e+=t.length,this.buffer.byteLength<e)return;let n=this.buffer.sublist(sn,e);return this.buffer.consume(e),{header:t,data:n}}return this.buffer.consume(e),{header:t}}};function y3(r){let e=new Uint8Array(sn);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 Ot;(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"})(Ot||(Ot={}));var P1=class extends ls{streamId;state;sendWindowCapacity;recvWindow;recvWindowCapacity;maxStreamWindowSize;epochStart;getRTT;sendFrame;constructor(e){let t=e.initialStreamWindowSize??nl;super({...e,maxMessageSize:t-sn}),this.streamId=e.streamId,this.state=e.state,this.sendWindowCapacity=t,this.recvWindow=t,this.recvWindowCapacity=this.recvWindow,this.maxStreamWindowSize=e.maxStreamWindowSize??_1,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame;let n=()=>{this.state=Ot.Finished};this.addEventListener("close",n)}sendData(e){let t=e.byteLength,n=0,s=!0;for(this.log?.trace("send window capacity is %d bytes",this.sendWindowCapacity);e.byteLength>0;){if(this.sendWindowCapacity===0){s=!1,this.log?.trace("sent %d/%d bytes, exhausted send window, waiting for window update",n,t);break}let o=Math.min(this.sendWindowCapacity,e.byteLength),i=this.getSendFlags(),a=e.sublist(0,o);e.consume(o);let c=this.sendFrame({type:Ke.Data,flag:i,streamID:this.streamId,length:o},a);if(this.sendWindowCapacity-=o,n+=o,!c){s=c,this.log.trace("sent %d/%d bytes, wait for muxer to have more send capacity",n,t);break}}return{sentBytes:n,canSendMore:s}}sendReset(){this.sendFrame({type:Ke.WindowUpdate,flag:be.RST,streamID:this.streamId,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|be.FIN;this.sendFrame({type:Ke.WindowUpdate,flag:e,streamID:this.streamId,length:0})}async sendCloseRead(e){e?.signal?.throwIfAborted()}sendPause(){this.state=Ot.Paused}sendResume(){this.state=Ot.Established,this.sendWindowUpdate()}handleWindowUpdate(e){this.processFlags(e.header.flag),this.sendWindowCapacity+=e.header.length,this.maxMessageSize=this.sendWindowCapacity-sn,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(!D9(e))throw new or("Frame was not data frame");if(this.processFlags(e.header.flag),this.recvWindowCapacity<e.header.length)throw new ea("Receive window exceeded");this.recvWindowCapacity-=e.header.length,this.onData(e.data),this.sendWindowUpdate()}processFlags(e){(e&be.ACK)===be.ACK&&this.state===Ot.SYNSent&&(this.state=Ot.Established),(e&be.FIN)===be.FIN&&this.onRemoteCloseWrite(),(e&be.RST)===be.RST&&this.onRemoteReset()}getSendFlags(){switch(this.state){case Ot.Init:return this.state=Ot.SYNSent,be.SYN;case Ot.SYNReceived:return this.state=Ot.Established,be.ACK;default:return 0}}sendWindowUpdate(){if(this.state===Ot.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 s=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:Ke.WindowUpdate,flag:e,streamID:this.streamId,length:s})}};function N9(r){return{type:Ke[r.type],flags:[(r.flag&be.SYN)===be.SYN?"SYN":void 0,(r.flag&be.ACK)===be.ACK?"ACK":void 0,(r.flag&be.FIN)===be.FIN?"FIN":void 0,(r.flag&be.RST)===be.RST?"RST":void 0].filter(Boolean),streamID:r.streamID,length:r.length}}var O9="/yamux/1.0.0",L1=class{protocol=O9;_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[ue]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new w3(e,{...this._init})}},w3=class extends cs{nextStreamID;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;decoder;keepAlive;enableKeepAlive;keepAliveInterval;maxInboundStreams;maxOutboundStreams;constructor(e,t={}){super(e,{...t,protocol:O9,name:"yamux"}),this.client=e.direction==="outbound",L9(t),this.enableKeepAlive=t.enableKeepAlive??sl.enableKeepAlive,this.keepAliveInterval=t.keepAliveInterval??sl.keepAliveInterval,this.maxInboundStreams=t.maxInboundStreams??sl.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??sl.maxOutboundStreams,this.decoder=new R1,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=Li(async n=>{try{await this.ping(n)}catch(s){this.log.error("ping error: %s",s)}},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 pr("Muxer closed remotely");if(this.localGoAway!==void 0)throw new pr("Muxer closed locally");let e=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.maxOutboundStreams)throw new Go("max outbound streams exceeded");this.log.trace("new outgoing stream id=%s",e);let t=this._newStream(e,Ot.Init,"outbound");return this.numOutboundStreams++,queueMicrotask(()=>{t.sendWindowUpdate()}),t}async ping(e){if(this.remoteGoAway!==void 0)throw new pr("Muxer closed remotely");if(this.localGoAway!==void 0)throw new pr("Muxer closed locally");if(this.activePing!=null)return De(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 De(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??Je.NormalTermination;this.log.trace("muxer close reason=%s",Je[t]),await super.close(e),this.sendGoAway(t)}finally{this.keepAlive?.stop()}}abort(e){if(this.status==="open")try{super.abort(e);let t=Je.InternalError;P9(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(o=>o.streamId===e)!=null)throw new E("Stream already exists with that id");let s=new P1({...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 s.addEventListener("close",()=>{this.closeStream(e)},{once:!0}),s}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--}handleFrame(e){let{streamID:t,type:n,length:s}=e.header;if(this.log.trace("received frame %o",N9(e.header)),t===0)switch(n){case Ke.Ping:{this.handlePing(e.header);return}case Ke.GoAway:{this.handleGoAway(s);return}default:throw new or("Invalid frame type")}else switch(e.header.type){case Ke.Data:case Ke.WindowUpdate:{this.handleStreamMessage(e);return}default:throw new or("Invalid frame type")}}handlePing(e){if(e.flag===be.SYN)this.log.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,be.ACK);else if(e.flag===be.ACK)this.log.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new or("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new Zi("ping not requested");if(this.activePing.id!==e)throw new Ji("ping doesn't match our id");this.activePing.resolve(Date.now()-this.activePing.start)}handleGoAway(e){this.log.trace("received GoAway reason=%s",Je[e]??"unknown"),this.remoteGoAway=e,e===Je.NormalTermination?this.onTransportClosed():this.abort(new Error("Remote sent GoAway"))}handleStreamMessage(e){let{streamID:t,flag:n,type:s}=e.header;(n&be.SYN)===be.SYN&&this.incomingStream(t);let o=this.streams.find(i=>i.streamId===t);if(o===void 0){this.log.trace("frame for missing stream id=%s",t);return}switch(s){case Ke.WindowUpdate:{o.handleWindowUpdate(e);return}case Ke.Data:{o.handleData(e);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new E("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:Ke.WindowUpdate,flag:be.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.maxInboundStreams){this.log("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:Ke.WindowUpdate,flag:be.RST,streamID:e,length:0});return}let t=this._newStream(e,Ot.SYNReceived,"inbound");this.numInboundStreams++,this.onRemoteStream(t)}sendFrame(e,t){let n;if(e.type===Ke.Data){if(t==null)throw new or("Invalid frame");n=new Xi(y3(e),t)}else n=y3(e);return this.log.trace("sending frame %o",N9(e)),this.send(n)}sendPing(e,t=be.SYN){t===be.SYN?this.log.trace("sending ping request pingId=%s",e):this.log.trace("sending ping response pingId=%s",e),this.sendFrame({type:Ke.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=Je.NormalTermination){this.log("sending GoAway reason=%s",Je[e]),this.localGoAway=e,this.sendFrame({type:Ke.GoAway,flag:0,streamID:0,length:e})}};function B9(r={}){return()=>new L1(r)}async function*ol(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 k1=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*ta(r,e={}){let t=/\r?\n/,n=new TextDecoder("utf8"),s="";for await(let o of r){if(typeof o=="string"&&(o=new TextEncoder().encode(o)),Qo(o)&&(o=o.subarray()),s+=n.decode(o,{stream:!0}),s.length>(e?.maxMessageLength??s.length))throw new k1("Incoming message too long");let i=s.split(t);s=i.pop()??"";for(let a=0;a<i.length;a++)yield JSON.parse(i[a])}s+=n.decode(),s!==""&&(yield JSON.parse(s))}var Bo=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"}};var D1={concurrentRequests:4,timeout:3e4,cacheTTL:300*1e3,cacheName:"delegated-routing-v1-cache"},N1=class{url;started;httpQueue;shutDownController;timeout;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 $t({concurrency:t.concurrentRequests??D1.concurrentRequests}),this.inFlightRequests=new Map,this.url=t.url instanceof URL?t.url:new URL(t.url),this.timeout=t.timeout??D1.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.cacheName=t.cacheName??D1.cacheName,this.cacheTTL=t.cacheTTL??D1.cacheTTL}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),s=me([this.shutDownController.signal,n,t.signal]);let o=Promise.withResolvers(),i=Promise.withResolvers(),a=0;this.httpQueue.add(async()=>(o.resolve(),i.promise));try{await o.promise;let c=new URL(`${this.url}routing/v1/providers/${e}`);this.#t(c,t.filterAddrs,t.filterProtocols);let l=await this.#r(c.toString(),{headers:{accept:"application/x-ndjson, application/json;q=0.8"},signal:s});if(!l.ok){if(l.status===404)return;throw l.status===422?new Bo("Request does not conform to schema or semantic constraints"):new dr(`Unexpected status code: ${l.status}`)}let u=l.headers.get("Content-Type");if(u==null)throw new dr("No Content-Type header received");if(l.body==null){if(u!=="application/x-ndjson")throw new dr("Routing response had no body");return}if(u.startsWith("application/json")){let f=(await l.json()).Providers??[];for(let h of f){let p=this.#e(h);p!=null&&(a++,yield p)}}else if(u.includes("application/x-ndjson"))for await(let d of ta(ol(l.body))){let f=this.#e(d);f!=null&&(a++,yield f)}else throw new dr(`Unsupported Content-Type: ${u}`)}finally{s.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),s=me([this.shutDownController.signal,n,t.signal]);let o=Promise.withResolvers(),i=Promise.withResolvers();this.httpQueue.add(async()=>(o.resolve(),i.promise));try{await o.promise;let a=new URL(`${this.url}routing/v1/peers/${e}`);this.#t(a,t.filterAddrs,t.filterProtocols);let c=await this.#r(a.toString(),{headers:{Accept:"application/x-ndjson"},signal:s});if(c.status===404)return;if(c.status===422)throw new Bo("Request does not conform to schema or semantic constraints");if(c.body==null)throw new dr("Routing response had no body");if(c.headers.get("Content-Type")?.startsWith("application/json")){let d=(await c.json()).Peers??[];for(let f of d){let h=this.#e(f);h!=null&&(yield h)}}else for await(let u of ta(ol(c.body))){let d=this.#e(u);d!=null&&(yield d)}}catch(a){this.log.error("getPeers errored - %e",a)}finally{s.clear(),i.resolve(),this.log("getPeers finished: %c",e)}}async*getClosestPeers(e,t={}){let n;if(ie.asCID(e)===e||e instanceof ie)n=e.toV1().toString();else throw new E("Key must be CID");this.log("getClosestPeers starts: %s",n);let s=AbortSignal.timeout(this.timeout),o=me([this.shutDownController.signal,s,t.signal]);let i=Promise.withResolvers(),a=Promise.withResolvers();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=await this.#r(c.toString(),{headers:{Accept:"application/x-ndjson"},signal:o});if(l.status===404)return;if(l.status===422)throw new Bo("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 d of ta(ol(l.body))){let f=this.#e(d);f!=null&&(yield f)}}catch(c){this.log.error("getClosestPeers errored - %e",c)}finally{o.clear(),a.resolve(),this.log("getClosestPeers finished: %s",n)}}async getIPNS(e,t={}){this.log("getIPNS starts: %c",e);let n=AbortSignal.timeout(this.timeout),s=me([this.shutDownController.signal,n,t.signal]);let o=Promise.withResolvers(),i=Promise.withResolvers();this.httpQueue.add(async()=>(o.resolve(),i.promise));let a=`${this.url}routing/v1/ipns/${e}`;try{await o.promise;let c=await this.#r(a,{headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:s});if(this.log("getIPNS GET %s %d",a,c.status),c.status===404)throw new ke("No matching records found");if(c.status===422)throw new Bo("Request does not conform to schema or semantic constraints");if(!c.ok)throw new dr(`Unexpected status code: ${c.status}`);let l=c.headers.get("Content-Type");if(l==null||!l.includes("application/vnd.ipfs.ipns-record"))throw new ke("No matching records found");if(c.body==null)throw new dr("GET ipns response had no body");let u=await c.arrayBuffer();return new Uint8Array(u,0,u.byteLength)}catch(c){throw this.log.error("getIPNS GET %s error - %e",a,c),c}finally{s.clear(),i.resolve(),this.log("getIPNS finished: %c",e)}}async putIPNS(e,t,n={}){this.log("putIPNS starts: %c",e);let s=AbortSignal.timeout(this.timeout),o=me([this.shutDownController.signal,s,n.signal]);let i=Promise.withResolvers(),a=Promise.withResolvers();this.httpQueue.add(async()=>(i.resolve(),a.promise));let c=`${this.url}routing/v1/ipns/${e}`;try{await i.promise;let l=await this.#r(c,{method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:ae(t),signal:o});if(this.log("putIPNS PUT %s %d",c,l.status),l.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{o.clear(),a.resolve(),this.log("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(F)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:ie.createV1(114,DI(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 s=t?.join(",")??this.filterAddrs?.join(",")??"";s!==""&&e.searchParams.set("filter-addrs",s)}if(n!=null||this.filterProtocols!=null){let s=n?.join(",")??this.filterProtocols?.join(",")??"";s!==""&&e.searchParams.set("filter-protocols",s)}}async#r(e,t){let n=t.method??"GET",s=`${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",s),this.logResponse(c),c;this.log("evicting cached response for %s",s),await this.cache?.delete(e)}else this.cache!=null&&this.log("cache miss for %s",s)}let o=this.inFlightRequests.get(s);if(o!=null){let c=await o;return this.log("deduplicating outgoing request for %s",s),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,u=new Headers(c.headers);u.set("x-cache-expires",l.toString());let d=new Response(c.clone().body,{status:c.status,statusText:c.statusText,headers:u});await this.cache.put(e,d)}return c}).finally(()=>{this.inFlightRequests.delete(s)});return this.inFlightRequests.set(s,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[s,o]of n.entries())this.log("%s: %s",s,o)}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 DI(r){let e=ve.baseDecode(r);return Se(e)}function NI(r){return r[Symbol.asyncIterator]!=null}function OI(r){if(NI(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var M9=OI;var O1=C("/ipns/");function U9(r){return Y(r.subarray(0,O1.byteLength),O1)}var B1=class{client;constructor(e){this.client=e}get[Ds](){return this}async start(){await this.client.start()}async stop(){await this.client.stop()}async*findProviders(e,t={}){try{yield*kr(this.client.getProviders(e,t),n=>({id:Rt(n.ID),multiaddrs:n.Addrs??[],routing:"delegated-http-routing-v1"}))}catch(n){if(n instanceof ke)return;throw n}}async provide(){}async cancelReprovide(){}async put(e,t,n){if(!U9(e))return;let s=Se(e.slice(O1.length)),o=ie.createV1(114,s);await this.client.putIPNS(o,t,n)}async get(e,t){if(!U9(e))throw new ke("Not found");let n=Se(e.slice(O1.length)),s=ie.createV1(114,n);try{return await this.client.getIPNS(s,t)}catch(o){throw o.name==="BadResponseError"?new ke("Not found"):o}}toString(){return`DelegatedRoutingV1HttpApiClientContentRouting(${this.client.url})`}},M1=class{client;constructor(e){this.client=e}get[Us](){return this}async start(){await this.client.start()}async stop(){await this.client.stop()}async findPeer(e,t={}){let n=await M9(this.client.getPeers(e.toCID(),t));if(n!=null)return{id:Rt(n.ID),multiaddrs:n.Addrs??[]};throw new ke("Not found")}async*getClosestPeers(e,t={}){let n;try{n=ie.decode(e)}catch{try{n=ie.createV1(114,Fe.decode(e))}catch{n=ie.createV1(Wl,Yt.digest(e))}}for await(let s of this.client.getClosestPeers(n,t))yield{id:Rt(s.ID),multiaddrs:s.Addrs??[]}}toString(){return`DelegatedRoutingV1HttpApiClientPeerRouting(${this.client.url})`}};function F9(r){return e=>new N1(e,r)}function $9(r){return e=>new B1(F9(r)(e))}function K9(r){return e=>new M1(F9(r)(e))}function U1(r){return{url:"https://delegated-ipfs.dev",filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var V9="libp2p",H9="autonat",q9="1.0.0";var Me;(function(r){let e;(function(f){f.DIAL="DIAL",f.DIAL_RESPONSE="DIAL_RESPONSE"})(e=r.MessageType||(r.MessageType={}));let t;(function(f){f[f.DIAL=0]="DIAL",f[f.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(t||(t={})),(function(f){f.codec=()=>Qe(t)})(e=r.MessageType||(r.MessageType={}));let n;(function(f){f.OK="OK",f.E_DIAL_ERROR="E_DIAL_ERROR",f.E_DIAL_REFUSED="E_DIAL_REFUSED",f.E_BAD_REQUEST="E_BAD_REQUEST",f.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=r.ResponseStatus||(r.ResponseStatus={}));let s;(function(f){f[f.OK=0]="OK",f[f.E_DIAL_ERROR=100]="E_DIAL_ERROR",f[f.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",f[f.E_BAD_REQUEST=200]="E_BAD_REQUEST",f[f.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(s||(s={})),(function(f){f.codec=()=>Qe(s)})(n=r.ResponseStatus||(r.ResponseStatus={}));let o;(function(f){let h;f.codec=()=>(h==null&&(h=ne((g,w,v={})=>{if(v.lengthDelimited!==!1&&w.fork(),g.id!=null&&(w.uint32(10),w.bytes(g.id)),g.addrs!=null&&g.addrs.length>0)for(let _ of g.addrs)w.uint32(18),w.bytes(_);v.lengthDelimited!==!1&&w.ldelim()},(g,w,v={})=>{let _={addrs:[]},P=w==null?g.len:g.pos+w;for(;g.pos<P;){let D=g.uint32();switch(D>>>3){case 1:{_.id=g.bytes();break}case 2:{if(v.limits?.addrs!=null&&_.addrs.length===v.limits.addrs)throw new fe('Decode error - repeated field "addrs" had too many elements');_.addrs.push(g.bytes());break}default:{g.skipType(D&7);break}}}return _},function*(g,w,v,_={}){let P={addrs:0},D=w==null?g.len:g.pos+w;for(;g.pos<D;){let B=g.uint32();switch(B>>>3){case 1:{yield{field:`${v}.id`,value:g.bytes()};break}case 2:{if(_.limits?.addrs!=null&&P.addrs===_.limits.addrs)throw new fe('Streaming decode error - repeated field "addrs" had too many elements');yield{field:`${v}.addrs[]`,index:P.addrs,value:g.bytes()},P.addrs++;break}default:{g.skipType(B&7);break}}}})),h);function p(g){return te(g,f.codec())}f.encode=p;function y(g,w){return ee(g,f.codec(),w)}f.decode=y;function m(g,w){return re(g,f.codec(),w)}f.stream=m})(o=r.PeerInfo||(r.PeerInfo={}));let i;(function(f){let h;f.codec=()=>(h==null&&(h=ne((g,w,v={})=>{v.lengthDelimited!==!1&&w.fork(),g.peer!=null&&(w.uint32(10),r.PeerInfo.codec().encode(g.peer,w)),v.lengthDelimited!==!1&&w.ldelim()},(g,w,v={})=>{let _={},P=w==null?g.len:g.pos+w;for(;g.pos<P;){let D=g.uint32();D>>>3===1?_.peer=r.PeerInfo.codec().decode(g,g.uint32(),{limits:v.limits?.peer}):g.skipType(D&7)}return _},function*(g,w,v,_={}){let P=w==null?g.len:g.pos+w;for(;g.pos<P;){let D=g.uint32();D>>>3===1?yield*r.PeerInfo.codec().stream(g,g.uint32(),`${v}.peer`,{limits:_.limits?.peer}):g.skipType(D&7)}})),h);function p(g){return te(g,f.codec())}f.encode=p;function y(g,w){return ee(g,f.codec(),w)}f.decode=y;function m(g,w){return re(g,f.codec(),w)}f.stream=m})(i=r.Dial||(r.Dial={}));let a;(function(f){let h;f.codec=()=>(h==null&&(h=ne((g,w,v={})=>{v.lengthDelimited!==!1&&w.fork(),g.status!=null&&(w.uint32(8),r.ResponseStatus.codec().encode(g.status,w)),g.statusText!=null&&(w.uint32(18),w.string(g.statusText)),g.addr!=null&&(w.uint32(26),w.bytes(g.addr)),v.lengthDelimited!==!1&&w.ldelim()},(g,w,v={})=>{let _={},P=w==null?g.len:g.pos+w;for(;g.pos<P;){let D=g.uint32();switch(D>>>3){case 1:{_.status=r.ResponseStatus.codec().decode(g);break}case 2:{_.statusText=g.string();break}case 3:{_.addr=g.bytes();break}default:{g.skipType(D&7);break}}}return _},function*(g,w,v,_={}){let P=w==null?g.len:g.pos+w;for(;g.pos<P;){let D=g.uint32();switch(D>>>3){case 1:{yield{field:`${v}.status`,value:r.ResponseStatus.codec().decode(g)};break}case 2:{yield{field:`${v}.statusText`,value:g.string()};break}case 3:{yield{field:`${v}.addr`,value:g.bytes()};break}default:{g.skipType(D&7);break}}}})),h);function p(g){return te(g,f.codec())}f.encode=p;function y(g,w){return ee(g,f.codec(),w)}f.decode=y;function m(g,w){return re(g,f.codec(),w)}f.stream=m})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=ne((f,h,p={})=>{p.lengthDelimited!==!1&&h.fork(),f.type!=null&&(h.uint32(8),r.MessageType.codec().encode(f.type,h)),f.dial!=null&&(h.uint32(18),r.Dial.codec().encode(f.dial,h)),f.dialResponse!=null&&(h.uint32(26),r.DialResponse.codec().encode(f.dialResponse,h)),p.lengthDelimited!==!1&&h.ldelim()},(f,h,p={})=>{let y={},m=h==null?f.len:f.pos+h;for(;f.pos<m;){let g=f.uint32();switch(g>>>3){case 1:{y.type=r.MessageType.codec().decode(f);break}case 2:{y.dial=r.Dial.codec().decode(f,f.uint32(),{limits:p.limits?.dial});break}case 3:{y.dialResponse=r.DialResponse.codec().decode(f,f.uint32(),{limits:p.limits?.dialResponse});break}default:{f.skipType(g&7);break}}}return y},function*(f,h,p,y={}){let m=h==null?f.len:f.pos+h;for(;f.pos<m;){let g=f.uint32();switch(g>>>3){case 1:{yield{field:`${p}.type`,value:r.MessageType.codec().decode(f)};break}case 2:{yield*r.Dial.codec().stream(f,f.uint32(),`${p}.dial`,{limits:y.limits?.dial});break}case 3:{yield*r.DialResponse.codec().stream(f,f.uint32(),`${p}.dialResponse`,{limits:y.limits?.dialResponse});break}default:{f.skipType(g&7);break}}}})),c);function l(f){return te(f,r.codec())}r.encode=l;function u(f,h){return ee(f,r.codec(),h)}r.decode=u;function d(f,h){return re(f,r.codec(),h)}r.stream=d})(Me||(Me={}));var KI=4,VI=8,F1=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??V9}/${H9}/${q9}`,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=Li(this.findRandomPeers.bind(this),6e4),this.addressFilter=Ft(1024)}[Symbol.toStringTag]="@libp2p/autonat";[ue]=["@libp2p/autonat"];get[jt](){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=me([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(s=>s.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 s=Ne(e,{maxDataLength:this.maxMessageSize}).pb(Me),o=await s.read({signal:n}),i=await this.handleAutonatMessage(o,t,{signal:n});await s.write(i,{signal:n}),await e.close({signal:n})}catch(s){this.log.error("error handling incoming autonat stream - %e",s),e.abort(s)}}async handleAutonatMessage(e,t,n){let s=this.components.addressManager.getAddresses().map(d=>Q(d).host),o=e.dial;if(o==null)return this.log.error("dial was missing from message"),{type:Me.MessageType.DIAL_RESPONSE,dialResponse:{status:Me.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}};let i,a=o.peer;if(a?.id==null)return this.log.error("peerId missing from message"),{type:Me.MessageType.DIAL_RESPONSE,dialResponse:{status:Me.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let d=Se(a.id);i=Ge(d)}catch(d){return this.log.error("invalid PeerId - %e",d),{type:Me.MessageType.DIAL_RESPONSE,dialResponse:{status:Me.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:Me.MessageType.DIAL_RESPONSE,dialResponse:{status:Me.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(d=>F(d)).filter(d=>{try{let f=Q(d);return We(d)?!1:f.host!==Q(t.remoteAddr).host?(this.log.trace("not dialing %a - target host did not match remote host %a",d,t.remoteAddr),!1):s.includes(f.host)?!1:this.components.transportManager.dialTransportForMultiaddr(d)==null?(this.log.trace("not dialing %a - transport unsupported",d),!1):!0}catch{return!1}}).map(d=>(d.getComponents().find(f=>f.code===421)?.value==null&&(d=d.encapsulate(`/p2p/${i.toString()}`)),d));if(c.length===0)return this.log("refused to dial all multiaddrs for %p from message",i),{type:Me.MessageType.DIAL_RESPONSE,dialResponse:{status:Me.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}};this.log("dial multiaddrs %s for peer %p",c.map(d=>d.toString()).join(", "),i);let l="",u=c[0];for(let d of c){let f;u=d;try{if(f=await this.components.connectionManager.openConnection(d,n),!f.remoteAddr.equals(d))throw this.log.error("tried to dial %a but dialed %a",d,f.remoteAddr),new Error("Unexpected remote address");return this.log("successfully dialed %p via %a",i,d),{type:Me.MessageType.DIAL_RESPONSE,dialResponse:{status:Me.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:Me.MessageType.DIAL_RESPONSE,dialResponse:{status:Me.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:u.bytes}}}getFirstUnverifiedMultiaddr(e,t){let n=this.components.addressManager.getAddressesWithMetadata().sort((s,o)=>s.type==="observed"&&o.type!=="observed"?1:o.type==="observed"&&s.type!=="observed"?-1:0).filter(s=>!(!(s.expires<Date.now())||Q(s.multiaddr).type==="ip6"&&(!t||!Cu(s.multiaddr))||We(s.multiaddr)));for(let s of n){let o=s.multiaddr.toString(),i=this.dialResults.get(o);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=s.expires<Date.now();if(a&&this.addressFilter.remove?.(o),this.addressFilter.has(o))continue;this.addressFilter.add(o),this.log.trace("creating dial result %s %s",a?"to revalidate":"for",o),i={multiaddr:s.multiaddr,success:0,failure:0,networkSegments:[],verifyingPeers:Q2(),queue:new Kt({concurrency:3,maxSize:50}),type:s.type,lastVerified:s.lastVerified},this.dialResults.set(o,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})=>Q(i).type==="ip6"),s=this.getNetworkSegment(e.remoteAddr),o=this.getFirstUnverifiedMultiaddr(s,n);if(o==null){this.log.trace("no unverified public addresses found for peer %p to verify, not requesting verification",e.remotePeer);return}if(!this.hasConnectionCapacity()){o.lastVerified!=null?(this.log("automatically re-verifying %a because we are too close to the connection limit",o.multiaddr),this.confirmAddress(o)):this.log("skipping verifying %a because we are too close to the connection limit",o.multiaddr);return}o.queue.add(async i=>{await this.askPeerToVerify(e,s,i)},{peerId:e.remotePeer,multiaddr:o.multiaddr}).catch(i=>{o?.result==null&&this.log.error("error from %p verifying address %a - %e",e.remotePeer,o?.multiaddr,i)})}async askPeerToVerify(e,t,n){let s=this.dialResults.get(n.multiaddr.toString());if(s==null){this.log("%a was verified while %p was queued",n.multiaddr,e.remotePeer);return}let o=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:o});try{let a=Ne(i).pb(Me),[,c]=await Promise.all([a.write({type:Me.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:o}),a.read({signal:o})]);if(c.type!==Me.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!==Me.ResponseStatus.OK&&l!==Me.ResponseStatus.E_DIAL_ERROR)return;if(s=this.dialResults.get(n.multiaddr.toString()),s==null){this.log.trace("peer reported %a as %s but there is no result object",n.multiaddr,c.dialResponse.status);return}if(s.networkSegments.includes(t)){this.log.trace("%a results included network segment %s",n.multiaddr,t);return}if(s.result!=null){this.log.trace("already resolved result for %a, ignoring response from",n.multiaddr,e.remotePeer);return}if(s.verifyingPeers.has(e.remotePeer)){this.log.trace("peer %p has already verified %a, ignoring response",e.remotePeer,n.multiaddr);return}if(s.verifyingPeers.add(e.remotePeer),s.networkSegments.push(t),l===Me.ResponseStatus.OK){if(s.success++,s.type!=="observed"){this.confirmAddress(s);return}}else l===Me.ResponseStatus.E_DIAL_ERROR&&s.failure++;this.log("%a success %d failure %d",s.multiaddr,s.success,s.failure),s.success===KI&&this.confirmAddress(s),s.failure===VI&&this.unconfirmAddress(s)}finally{try{await i.close({signal:o})}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=Q(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 E(`Remote address ${e} was not an IPv4 or Ipv6 address`)}}};function z9(r={}){return e=>new F1(e,r)}var HI="bootstrap",qI=50,zI=1e3,b3=class extends oe{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??zI,this.list=t.list.map(n=>F(n)).filter(n=>Ii.matches(n)?n.getComponents().findLast(o=>o.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:Be(n.getComponents().findLast(s=>s.code===421)?.value??""),multiaddrs:[n]})),this._init=t}[Ms]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[ue]=["@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??HI]:{value:this._init.tagValue??qI,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 G9(r){return e=>new b3(e,r)}var E3=1e3,W9=60*E3;var wX=120*W9,j9=1,$1=5e3,Y9=100;var il=`${Fs}-circuit-relay`,bX=2*W9,EX=BigInt(1<<17),Mo="/libp2p/circuit/relay/0.2.0/hop",x3="/libp2p/circuit/relay/0.2.0/stop",xX=30*E3,vX=30*E3,v3=300,Q9=4096,X9=.001;var bs;(function(r){let e;(function(a){a.RESERVE="RESERVE",a.CONNECT="CONNECT",a.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(a){a[a.RESERVE=0]="RESERVE",a[a.CONNECT=1]="CONNECT",a[a.STATUS=2]="STATUS"})(t||(t={})),(function(a){a.codec=()=>Qe(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((a,c,l={})=>{l.lengthDelimited!==!1&&c.fork(),a.type!=null&&(c.uint32(8),r.Type.codec().encode(a.type,c)),a.peer!=null&&(c.uint32(18),ys.codec().encode(a.peer,c)),a.reservation!=null&&(c.uint32(26),al.codec().encode(a.reservation,c)),a.limit!=null&&(c.uint32(34),ws.codec().encode(a.limit,c)),a.status!=null&&(c.uint32(40),et.codec().encode(a.status,c)),l.lengthDelimited!==!1&&c.ldelim()},(a,c,l={})=>{let u={},d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{u.type=r.Type.codec().decode(a);break}case 2:{u.peer=ys.codec().decode(a,a.uint32(),{limits:l.limits?.peer});break}case 3:{u.reservation=al.codec().decode(a,a.uint32(),{limits:l.limits?.reservation});break}case 4:{u.limit=ws.codec().decode(a,a.uint32(),{limits:l.limits?.limit});break}case 5:{u.status=et.codec().decode(a);break}default:{a.skipType(f&7);break}}}return u},function*(a,c,l,u={}){let d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{yield{field:`${l}.type`,value:r.Type.codec().decode(a)};break}case 2:{yield*ys.codec().stream(a,a.uint32(),`${l}.peer`,{limits:u.limits?.peer});break}case 3:{yield*al.codec().stream(a,a.uint32(),`${l}.reservation`,{limits:u.limits?.reservation});break}case 4:{yield*ws.codec().stream(a,a.uint32(),`${l}.limit`,{limits:u.limits?.limit});break}case 5:{yield{field:`${l}.status`,value:et.codec().decode(a)};break}default:{a.skipType(f&7);break}}}})),n);function s(a){return te(a,r.codec())}r.encode=s;function o(a,c){return ee(a,r.codec(),c)}r.decode=o;function i(a,c){return re(a,r.codec(),c)}r.stream=i})(bs||(bs={}));var on;(function(r){let e;(function(a){a.CONNECT="CONNECT",a.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(a){a[a.CONNECT=0]="CONNECT",a[a.STATUS=1]="STATUS"})(t||(t={})),(function(a){a.codec=()=>Qe(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((a,c,l={})=>{l.lengthDelimited!==!1&&c.fork(),a.type!=null&&(c.uint32(8),r.Type.codec().encode(a.type,c)),a.peer!=null&&(c.uint32(18),ys.codec().encode(a.peer,c)),a.limit!=null&&(c.uint32(26),ws.codec().encode(a.limit,c)),a.status!=null&&(c.uint32(32),et.codec().encode(a.status,c)),l.lengthDelimited!==!1&&c.ldelim()},(a,c,l={})=>{let u={},d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{u.type=r.Type.codec().decode(a);break}case 2:{u.peer=ys.codec().decode(a,a.uint32(),{limits:l.limits?.peer});break}case 3:{u.limit=ws.codec().decode(a,a.uint32(),{limits:l.limits?.limit});break}case 4:{u.status=et.codec().decode(a);break}default:{a.skipType(f&7);break}}}return u},function*(a,c,l,u={}){let d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{yield{field:`${l}.type`,value:r.Type.codec().decode(a)};break}case 2:{yield*ys.codec().stream(a,a.uint32(),`${l}.peer`,{limits:u.limits?.peer});break}case 3:{yield*ws.codec().stream(a,a.uint32(),`${l}.limit`,{limits:u.limits?.limit});break}case 4:{yield{field:`${l}.status`,value:et.codec().decode(a)};break}default:{a.skipType(f&7);break}}}})),n);function s(a){return te(a,r.codec())}r.encode=s;function o(a,c){return ee(a,r.codec(),c)}r.decode=o;function i(a,c){return re(a,r.codec(),c)}r.stream=i})(on||(on={}));var ys;(function(r){let e;r.codec=()=>(e==null&&(e=ne((o,i,a={})=>{if(a.lengthDelimited!==!1&&i.fork(),o.id!=null&&o.id.byteLength>0&&(i.uint32(10),i.bytes(o.id)),o.addrs!=null&&o.addrs.length>0)for(let c of o.addrs)i.uint32(18),i.bytes(c);a.lengthDelimited!==!1&&i.ldelim()},(o,i,a={})=>{let c={id:z(0),addrs:[]},l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{c.id=o.bytes();break}case 2:{if(a.limits?.addrs!=null&&c.addrs.length===a.limits.addrs)throw new fe('Decode error - repeated field "addrs" had too many elements');c.addrs.push(o.bytes());break}default:{o.skipType(u&7);break}}}return c},function*(o,i,a,c={}){let l={addrs:0},u=i==null?o.len:o.pos+i;for(;o.pos<u;){let d=o.uint32();switch(d>>>3){case 1:{yield{field:`${a}.id`,value:o.bytes()};break}case 2:{if(c.limits?.addrs!=null&&l.addrs===c.limits.addrs)throw new fe('Streaming decode error - repeated field "addrs" had too many elements');yield{field:`${a}.addrs[]`,index:l.addrs,value:o.bytes()},l.addrs++;break}default:{o.skipType(d&7);break}}}})),e);function t(o){return te(o,r.codec())}r.encode=t;function n(o,i){return ee(o,r.codec(),i)}r.decode=n;function s(o,i){return re(o,r.codec(),i)}r.stream=s})(ys||(ys={}));var al;(function(r){let e;r.codec=()=>(e==null&&(e=ne((o,i,a={})=>{if(a.lengthDelimited!==!1&&i.fork(),o.expire!=null&&o.expire!==0n&&(i.uint32(8),i.uint64(o.expire)),o.addrs!=null&&o.addrs.length>0)for(let c of o.addrs)i.uint32(18),i.bytes(c);o.voucher!=null&&(i.uint32(26),ll.codec().encode(o.voucher,i)),a.lengthDelimited!==!1&&i.ldelim()},(o,i,a={})=>{let c={expire:0n,addrs:[]},l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{c.expire=o.uint64();break}case 2:{if(a.limits?.addrs!=null&&c.addrs.length===a.limits.addrs)throw new fe('Decode error - repeated field "addrs" had too many elements');c.addrs.push(o.bytes());break}case 3:{c.voucher=ll.codec().decode(o,o.uint32(),{limits:a.limits?.voucher});break}default:{o.skipType(u&7);break}}}return c},function*(o,i,a,c={}){let l={addrs:0},u=i==null?o.len:o.pos+i;for(;o.pos<u;){let d=o.uint32();switch(d>>>3){case 1:{yield{field:`${a}.expire`,value:o.uint64()};break}case 2:{if(c.limits?.addrs!=null&&l.addrs===c.limits.addrs)throw new fe('Streaming decode error - repeated field "addrs" had too many elements');yield{field:`${a}.addrs[]`,index:l.addrs,value:o.bytes()},l.addrs++;break}case 3:{yield*ll.codec().stream(o,o.uint32(),`${a}.voucher`,{limits:c.limits?.voucher});break}default:{o.skipType(d&7);break}}}})),e);function t(o){return te(o,r.codec())}r.encode=t;function n(o,i){return ee(o,r.codec(),i)}r.decode=n;function s(o,i){return re(o,r.codec(),i)}r.stream=s})(al||(al={}));var ws;(function(r){let e;r.codec=()=>(e==null&&(e=ne((o,i,a={})=>{a.lengthDelimited!==!1&&i.fork(),o.duration!=null&&(i.uint32(8),i.uint32(o.duration)),o.data!=null&&(i.uint32(16),i.uint64(o.data)),a.lengthDelimited!==!1&&i.ldelim()},(o,i,a={})=>{let c={},l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{c.duration=o.uint32();break}case 2:{c.data=o.uint64();break}default:{o.skipType(u&7);break}}}return c},function*(o,i,a,c={}){let l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{yield{field:`${a}.duration`,value:o.uint32()};break}case 2:{yield{field:`${a}.data`,value:o.uint64()};break}default:{o.skipType(u&7);break}}}})),e);function t(o){return te(o,r.codec())}r.encode=t;function n(o,i){return ee(o,r.codec(),i)}r.decode=n;function s(o,i){return re(o,r.codec(),i)}r.stream=s})(ws||(ws={}));var et;(function(r){r.UNUSED="UNUSED",r.OK="OK",r.RESERVATION_REFUSED="RESERVATION_REFUSED",r.RESOURCE_LIMIT_EXCEEDED="RESOURCE_LIMIT_EXCEEDED",r.PERMISSION_DENIED="PERMISSION_DENIED",r.CONNECTION_FAILED="CONNECTION_FAILED",r.NO_RESERVATION="NO_RESERVATION",r.MALFORMED_MESSAGE="MALFORMED_MESSAGE",r.UNEXPECTED_MESSAGE="UNEXPECTED_MESSAGE"})(et||(et={}));var S3;(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"})(S3||(S3={}));(function(r){r.codec=()=>Qe(S3)})(et||(et={}));var cl;(function(r){let e;r.codec=()=>(e==null&&(e=ne((o,i,a={})=>{a.lengthDelimited!==!1&&i.fork(),o.relay!=null&&o.relay.byteLength>0&&(i.uint32(10),i.bytes(o.relay)),o.peer!=null&&o.peer.byteLength>0&&(i.uint32(18),i.bytes(o.peer)),o.expiration!=null&&o.expiration!==0n&&(i.uint32(24),i.uint64(o.expiration)),a.lengthDelimited!==!1&&i.ldelim()},(o,i,a={})=>{let c={relay:z(0),peer:z(0),expiration:0n},l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{c.relay=o.bytes();break}case 2:{c.peer=o.bytes();break}case 3:{c.expiration=o.uint64();break}default:{o.skipType(u&7);break}}}return c},function*(o,i,a,c={}){let l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{yield{field:`${a}.relay`,value:o.bytes()};break}case 2:{yield{field:`${a}.peer`,value:o.bytes()};break}case 3:{yield{field:`${a}.expiration`,value:o.uint64()};break}default:{o.skipType(u&7);break}}}})),e);function t(o){return te(o,r.codec())}r.encode=t;function n(o,i){return ee(o,r.codec(),i)}r.decode=n;function s(o,i){return re(o,r.codec(),i)}r.stream=s})(cl||(cl={}));var ll;(function(r){let e;r.codec=()=>(e==null&&(e=ne((o,i,a={})=>{a.lengthDelimited!==!1&&i.fork(),o.publicKey!=null&&o.publicKey.byteLength>0&&(i.uint32(10),i.bytes(o.publicKey)),o.payloadType!=null&&o.payloadType.byteLength>0&&(i.uint32(18),i.bytes(o.payloadType)),o.payload!=null&&(i.uint32(26),cl.codec().encode(o.payload,i)),o.signature!=null&&o.signature.byteLength>0&&(i.uint32(42),i.bytes(o.signature)),a.lengthDelimited!==!1&&i.ldelim()},(o,i,a={})=>{let c={publicKey:z(0),payloadType:z(0),signature:z(0)},l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{c.publicKey=o.bytes();break}case 2:{c.payloadType=o.bytes();break}case 3:{c.payload=cl.codec().decode(o,o.uint32(),{limits:a.limits?.payload});break}case 5:{c.signature=o.bytes();break}default:{o.skipType(u&7);break}}}return c},function*(o,i,a,c={}){let l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{yield{field:`${a}.publicKey`,value:o.bytes()};break}case 2:{yield{field:`${a}.payloadType`,value:o.bytes()};break}case 3:{yield*cl.codec().stream(o,o.uint32(),`${a}.payload`,{limits:c.limits?.payload});break}case 5:{yield{field:`${a}.signature`,value:o.bytes()};break}default:{o.skipType(u&7);break}}}})),e);function t(o){return te(o,r.codec())}r.encode=t;function n(o,i){return ee(o,r.codec(),i)}r.decode=n;function s(o,i){return re(o,r.codec(),i)}r.stream=s})(ll||(ll={}));var ul=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},K1=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},V1=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function A3(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var dl=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}},H1=Ie(pe(Ii.matchers[0],Te(290))),q1=Ie(Te(290));var z1=class extends oe{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(Mo,{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(Mo)],orders:[()=>Math.random()<.5?1:-1,(n,s)=>{let o=Z9(n),i=Z9(s);return o>i?-1:i>o?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 Kt({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(s=>s.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(s=>{this.log.error("error opening connection to random peer %p - %e",n.id,s)})}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(s=>{this.log.error("error opening connection to discovered peer %p - %e",e.detail.id,s)})}async dialPeer({peerId:e,signal:t}){let n=me([AbortSignal.timeout(5e3),t]);try{await this.components.connectionManager.openConnection(e,{signal:n})}finally{n.clear()}}};function Z9(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(k(e)).getTime()}var T3=class extends oe{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??$1,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(q1.exactMatch(e))this.log("searching for circuit relay servers"),this.reservationId=this.reservationStore.reserveRelay();else if(H1.exactMatch(e)){this.log("listen on specific relay server %a",e);let t=AbortSignal.timeout(this.listenTimeout);let n=e.decapsulate("/p2p-circuit"),s=await this.connectionManager.openConnection(n,{signal:t});if(!this.reservationStore.hasReservation(s.remotePeer)){this.log("making reservation on peer %p",s.remotePeer);let o=await this.reservationStore.addRelay(s.remotePeer,"configured");this.addedRelay(o)}}else throw new Bs(`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=>F(t).encapsulate("/p2p-circuit")),this.listeningAddrs.forEach(t=>{this.addressManager.confirmObservedAddr(t,{type:"transport"})}),queueMicrotask(()=>{this.safeDispatchEvent("listening")})}};function J9(r){return new T3(r)}var ey="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var ty=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=ey[t[r]&63];return e};var GI=60*1e3*10,WI=60*1e3*5,jI=30*1e3,G1=class extends oe{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 xt,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??Y9,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??$1,this.started=!1,this.relayFilter=Ft(100),this.reserveQueue=new Kt({concurrency:t?.reservationConcurrency??j9,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("connection:close",n=>{[...this.reservations.values()].find(o=>o.connection===n.detail.id)!=null&&this.#t(n.detail.remotePeer).catch(o=>{this.log("could not remove relay %p - %e",n.detail,o)})})}isStarted(){return this.started}start(){this.started=!0}afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(il)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[il]: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=ty();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 Bs("Cannot use self as relay");if(this.reserveQueue.size>this.maxReservationQueueLength)throw new V1("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 Bs("The relay was previously invalid");return this.log.trace("try to reserve relay slot with %p",e),this.reserveQueue.add(async()=>{let s=Date.now();try{let o=this.reservations.get(e);if(o!=null){let p=this.connectionManager.getConnections(e),y=!1;if(p.length===0&&this.log("already have relay reservation with %p but we are no longer connected",e),p.map(m=>m.id).includes(o.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),y=!0),y&&A3(o.reservation.expire)>GI)return this.log("already have relay reservation with %p but we are still connected and it does not expire soon",e),{relay:e,details:o};await this.#t(e)}if(t==="discovered"&&this.pendingReservations.length===0)throw new ul("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(st.matches(a.remoteAddr))throw new K1("not creating reservation over relayed connection");let c=await this.#e(a,{signal:i}),l=A3(c.expire);this.log("created reservation on relay peer %p, expiry date is %s",e,new Date(Date.now()+l).toString());let u=Math.min(Math.max(l-WI,jI),Math.pow(2,31)-1),d=setTimeout(()=>{this.log("refresh reservation to relay %p",e),this.addRelay(e,t).catch(async p=>{this.log.error("could not refresh reservation to relay %p - %e",e,p),await this.#t(e)}).catch(p=>{this.log.error("could not remove expired reservation to relay %p - %e",e,p)})},u),f;if(t==="discovered"){let p=this.pendingReservations.pop();if(p==null)throw new ul("Made reservation on relay but did not need any more discovered relays");f={timeout:d,reservation:c,type:t,connection:a.id,id:p}}else f={timeout:d,reservation:c,type:t,connection:a.id};this.reservations.set(e,f),await this.peerStore.merge(e,{tags:{[il]:{value:1,ttl:l}}}),this.#r();let h={relay:e,details:f};return this.safeDispatchEvent("relay:created-reservation",{detail:h}),h}catch(o){throw t==="discovered"&&o.name==="HadEnoughRelaysError"||this.log.error("could not reserve slot on %p after %dms - %e",e,Date.now()-s,o),(o.name==="DialError"||o.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)}),o}},{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(Mo,t),o=Ne(n).pb(bs);this.log.trace("send RESERVE to %p",e.remotePeer),await o.write({type:bs.Type.RESERVE},t);let i;try{this.log.trace("reading response from %p",e.remotePeer),i=await o.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===et.OK&&i.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of i.reservation.addrs){let u=F(l);u.getComponents().find(d=>d.code===421)==null&&(u=u.encapsulate(`/p2p/${e.remotePeer}`)),u=F(u.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(u.toString())}return i.reservation.addrs=[...c].map(l=>F(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:{[il]: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=Ft(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var I3=class extends as{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 C3(r){return new I3(r)}var YI=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(F)}catch{return!1}return!0},ry={maxInboundStopStreams:v3,maxOutboundStopStreams:v3,stopTimeout:3e4},W1=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??ry.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??ry.maxOutboundStopStreams,this.shutdownController=new AbortController,this.discovery=new z1(e,{filter:t.discoveryFilter??qp(Q9,X9)}),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(s=>{s.name!=="HadEnoughRelaysError"&&s.name!=="RelayQueueFullError"&&this.log.error("could not add discovered relay %p - %e",n.detail,s)})}),this.reservationStore=new G1(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";[ue]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[jt](){return this.discovery!=null?["@libp2p/identify"]:[]}[qn]=!0;isStarted(){return this.started}async start(){this.shutdownController=new AbortController,this.shutdownController.signal,await this.components.registrar.handle(x3,this.onStop,{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await yr(this.discovery,this.reservationStore),this.started=!0}async stop(){this.shutdownController.abort(),await Vr(this.discovery,this.reservationStore),await this.components.registrar.unhandle(x3),this.started=!1}async dial(e,t){let n=e.toString().split("/p2p-circuit"),s=F(n[0]),o=F(n[n.length-1]),i=s.getComponents().find(h=>h.code===421)?.value,a=o.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 Vn(`C${h}`)}let c=Be(i),l=Be(a),d=this.components.connectionManager.getConnections(c)[0];d==null?(await this.components.peerStore.merge(c,{multiaddrs:[s]}),t.onProgress?.(new Z("circuit-relay:open-connection")),d=await this.components.connectionManager.openConnection(c,t)):t.onProgress?.(new Z("circuit-relay:reuse-connection"));let f;try{t.onProgress?.(new Z("circuit-relay:open-hop-stream")),f=await d.newStream(Mo,t);let h=Ne(f).pb(bs);t.onProgress?.(new Z("circuit-relay:write-connect-message")),await h.write({type:bs.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[F(o).bytes]}},t),t.onProgress?.(new Z("circuit-relay:read-connect-response"));let p=await h.read(t);if(p.status!==et.OK)throw new se(`failed to connect via relay with status ${p?.status?.toString()??"undefined"}`);let y=new dl(p.limit),m=C3({stream:h.unwrap().unwrap(),remoteAddr:e,localAddr:s.encapsulate(`/p2p-circuit/p2p/${this.components.peerId.toString()}`),onDataRead:y.onData,onDataWrite:y.onData,log:f.log.newScope("circuit-relay:connection")}),g=await this.components.upgrader.upgradeOutbound(m,{...t,limits:y.getLimits()});return g.log("outbound relayed connection established to %p with limits %o, over connection %s",g.remotePeer,p.limit??"none",d.id),g}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 J9({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=>H1.exactMatch(t)||q1.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>st.exactMatch(t))}async onStop(e,t){let n=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);try{if(!this.reservationStore.hasReservation(t.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.components.transportManager.listen([t.remoteAddr.encapsulate("/p2p-circuit")])}catch(d){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on - %e",d)}let s=Ne(e).pb(on),o=await s.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",t.remotePeer,o.type),o?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",t.remotePeer),await s.write({type:on.Type.STATUS,status:et.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(o.type!==on.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await s.write({type:on.Type.STATUS,status:et.UNEXPECTED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(!YI(o)){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await s.write({type:on.Type.STATUS,status:et.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}let i=Ge(Se(o.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 s.write({type:on.Type.STATUS,status:et.PERMISSION_DENIED},{signal:n}),await e.close({signal:n});return}this.log.trace("sending success response to %p",t.remotePeer),await s.write({type:on.Type.STATUS,status:et.OK},{signal:n});let a=new dl(o.limit),c=t.remoteAddr.encapsulate(`/p2p-circuit/p2p/${i.toString()}`),l=this.components.addressManager.getAddresses()[0],u=C3({stream:s.unwrap().unwrap(),remoteAddr:c,localAddr:l,onDataRead:a.onData,onDataWrite:a.onData,log:e.log.newScope("circuit-relay:connection")});await this.components.upgrader.upgradeInbound(u,{limits:a.getLimits(),signal:n}),u.log("inbound relayed connection established to %p with limits %o, over connection %s",i,o.limit??"none",t.id)}finally{n?.clear()}}};function ny(r={}){return e=>new W1(e,r)}var Or;(function(r){let e;(function(a){a.UNUSED="UNUSED",a.CONNECT="CONNECT",a.SYNC="SYNC"})(e=r.Type||(r.Type={}));let t;(function(a){a[a.UNUSED=0]="UNUSED",a[a.CONNECT=100]="CONNECT",a[a.SYNC=300]="SYNC"})(t||(t={})),(function(a){a.codec=()=>Qe(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((a,c,l={})=>{if(l.lengthDelimited!==!1&&c.fork(),a.type!=null&&(c.uint32(8),r.Type.codec().encode(a.type,c)),a.observedAddresses!=null&&a.observedAddresses.length>0)for(let u of a.observedAddresses)c.uint32(18),c.bytes(u);l.lengthDelimited!==!1&&c.ldelim()},(a,c,l={})=>{let u={observedAddresses:[]},d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{u.type=r.Type.codec().decode(a);break}case 2:{if(l.limits?.observedAddresses!=null&&u.observedAddresses.length===l.limits.observedAddresses)throw new fe('Decode error - repeated field "observedAddresses" had too many elements');u.observedAddresses.push(a.bytes());break}default:{a.skipType(f&7);break}}}return u},function*(a,c,l,u={}){let d={observedAddresses:0},f=c==null?a.len:a.pos+c;for(;a.pos<f;){let h=a.uint32();switch(h>>>3){case 1:{yield{field:`${l}.type`,value:r.Type.codec().decode(a)};break}case 2:{if(u.limits?.observedAddresses!=null&&d.observedAddresses===u.limits.observedAddresses)throw new fe('Streaming decode error - repeated field "observedAddresses" had too many elements');yield{field:`${l}.observedAddresses[]`,index:d.observedAddresses,value:a.bytes()},d.observedAddresses++;break}default:{a.skipType(h&7);break}}}})),n);function s(a){return te(a,r.codec())}r.encode=s;function o(a,c){return ee(a,r.codec(),c)}r.decode=o;function i(a,c){return re(a,r.codec(),c)}r.stream=i})(Or||(Or={}));function _3(r,e){return st.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:v5.matches(r)?!0:I5.matches(r)?!We(r):!1}var sy=1024*4,oy=100,j1={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},Y1=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??j1.timeout,this.retries=t.retries??j1.retries,this.maxInboundStreams=t.maxInboundStreams??j1.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??j1.maxOutboundStreams,this.handleIncomingUpgrade=this.handleIncomingUpgrade.bind(this)}[Symbol.toStringTag]="@libp2p/dcutr";[jt]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(fl,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{st.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(fl,this.handleIncomingUpgrade,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(fl),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 s={signal:AbortSignal.timeout(this.timeout)};try{t=await e.newStream([fl],{signal:s.signal,runOnLimitedConnection:!0});let o=Ne(t,{maxDataLength:sy}).pb(Or);this.log("B sending connect to %p",e.remotePeer);let i=Date.now();await o.write({type:Or.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(d=>d.bytes)},s),this.log("B receiving connect from %p",e.remotePeer);let a=await o.read(s);if(a.type!==Or.Type.CONNECT)throw this.log("A sent wrong message type"),new se("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 se("DCUtR connect message had no multiaddrs");let l=Date.now()-i;this.log("A sending sync, rtt %dms",l),await o.write({type:Or.Type.SYNC,observedAddresses:[]},s),this.log("A waiting for half RTT"),await q5(l/2),this.log("B dialing",c);let u=await this.connectionManager.openConnection(c,{signal:s.signal,priority:oy,force:!0,initiator:!1});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,u.remoteAddr),await e.close(s);break}catch(o){if(this.log.error("error while attempting DCUtR on attempt %d of %d - %e",n+1,this.retries,o),t?.abort(o),n===this.retries)throw o}finally{t!=null&&await t.close(s)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(s=>{let o=s.multiaddr;return o.getComponents().find(i=>i.code===421)?.value==null?o.encapsulate(`/p2p/${e.remotePeer}`):o}).filter(s=>_3(s,this.transportManager));if(n.length>0){let s=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let o=await this.connectionManager.openConnection(n,{signal:s,force:!0});if(st.exactMatch(o.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,o.remoteAddr),await e.close({signal:s}),!0}catch(o){this.log.error("unilateral connection upgrade to %p on addresses %a failed - %e",e.remotePeer,n,o)}}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)},s=Ne(e,{maxDataLength:sy}).pb(Or);this.log("A receiving connect");let o=await s.read(n);if(o.type!==Or.Type.CONNECT)throw this.log("B sent wrong message type"),new se("DCUtR message type was incorrect");if(o.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new se("DCUtR connect message had no multiaddrs");let i=this.getDialableMultiaddrs(o.observedAddresses);if(i.length===0)throw this.log("B had no dialable multiaddrs in %o",o.observedAddresses.map(l=>F(l))),new se("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await s.write({type:Or.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await s.read(n)).type!==Or.Type.SYNC)throw new se("DCUtR message type was incorrect");this.log("A dialing",i);let c=await this.connectionManager.openConnection(i,{signal:n.signal,priority:oy,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 s=F(n);if(!_3(s,this.transportManager))continue;t.push(s)}catch{}return t}};var fl="/libp2p/dcutr";function iy(r={}){return e=>new Y1(e,r)}function K(r){if(r!==void 0&&r!==K.REQUEST&&r!==K.RESPONSE)throw new Error("type must be REQUEST or RESPONSE");r===void 0||this.initialize(r),this.maxHeaderSize=K.maxHeaderSize}K.prototype.initialize=function(r,e){if(r!==K.REQUEST&&r!==K.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};K.encoding="ascii";K.maxHeaderSize=80*1024;K.REQUEST="REQUEST";K.RESPONSE="RESPONSE";var ay=K.kOnHeaders=1,R3=K.kOnHeadersComplete=2,Q1=K.kOnBody=3,P3=K.kOnMessageComplete=4;K.prototype[ay]=K.prototype[R3]=K.prototype[Q1]=K.prototype[P3]=function(){};var cy=!0;Object.defineProperty(K,"kOnExecute",{get:function(){return cy=!1,99}});var ly=K.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"],uy=ly.indexOf("CONNECT");K.prototype.reinitialize=K;K.prototype.close=K.prototype.pause=K.prototype.resume=K.prototype.remove=K.prototype.free=function(){};K.prototype._compatMode0_11=!1;K.prototype.getAsyncId=function(){return 0};var QI={REQUEST_LINE:!0,RESPONSE_LINE:!0,HEADER:!0};K.prototype.execute=function(r,e,t){if(!(this instanceof K))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(s){if(this.isUserCall)throw s;return this.hadError=!0,s}return this.chunk=null,t=this.offset-e,QI[this.state]&&(this.headerSize+=t,this.headerSize>(this.maxHeaderSize||K.maxHeaderSize))?new Error("max header size exceeded"):t};var XI={REQUEST_LINE:!0,RESPONSE_LINE:!0,BODY_RAW:!0};K.prototype.finish=function(){if(!this.hadError){if(!XI[this.state])return new Error("invalid state for EOF");this.state==="BODY_RAW"&&this.userCall()(this[P3]())}};K.prototype.consume=K.prototype.unconsume=K.prototype.getCurrentBuffer=function(){};K.prototype.userCall=function(){this.isUserCall=!0;var r=this;return function(e){return r.isUserCall=!1,e}};K.prototype.nextRequest=function(){this.userCall()(this[P3]()),this.reinitialize(this.type)};K.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+k(e.subarray(this.offset,t),K.encoding);return n.charAt(n.length-1)==="\r"&&(n=n.substr(0,n.length-1)),this.line="",this.offset=t+1,n}this.line+=k(e.subarray(this.offset,this.end),K.encoding),this.offset=this.end};var ZI=/^([^: \t]+):[ \t]*((?:.*[^ \t])|)/,JI=/^[ \t]+(.*[^ \t])/;K.prototype.parseHeader=function(r,e){if(r.indexOf("\r")!==-1)throw X1("HPE_LF_EXPECTED");var t=ZI.exec(r),n=t&&t[1];if(n)e.push(n),e.push(t[2]);else{var s=JI.exec(r);s&&e.length&&(e[e.length-1]&&(e[e.length-1]+=" "),e[e.length-1]+=s[1])}};var eC=/^([A-Z-]+) ([^ ]+) HTTP\/(\d)\.(\d)$/;K.prototype.REQUEST_LINE=function(){var r=this.consumeLine();if(r){var e=eC.exec(r);if(e===null)throw X1("HPE_INVALID_CONSTANT");if(this.info.method=this._compatMode0_11?e[1]:ly.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 tC=/^HTTP\/(\d)\.(\d) (\d{3}) ?(.*)$/;K.prototype.RESPONSE_LINE=function(){var r=this.consumeLine();if(r){var e=tC.exec(r);if(e===null)throw X1("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"}};K.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)};K.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,s,o=!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(s=+t[i+1],n){if(s!==this.body_bytes)throw X1("HPE_UNEXPECTED_CONTENT_LENGTH")}else n=!0,this.body_bytes=s;break;case"connection":this.connection+=t[i+1].toLowerCase();break;case"upgrade":o=!0;break}this.isChunked&&n&&(n=!1,this.body_bytes=null),o&&this.connection.indexOf("upgrade")!=-1?e.upgrade=this.type===K.REQUEST||e.statusCode===101:e.upgrade=e.method===uy,this.isChunked&&e.upgrade&&(this.isChunked=!1),e.shouldKeepAlive=this.shouldKeepAlive();var a;if(cy?a=this.userCall()(this[R3](e)):a=this.userCall()(this[R3](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"}}}};K.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")};K.prototype.BODY_CHUNK=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[Q1](this.chunk.slice(this.offset,this.offset+r),0,r)),this.offset+=r,this.body_bytes-=r,this.body_bytes||(this.state="BODY_CHUNKEMPTYLINE")};K.prototype.BODY_CHUNKEMPTYLINE=function(){var r=this.consumeLine();if(r!==void 0){if(r!=="")throw new Error("Expected empty line");this.state="BODY_CHUNKHEAD"}};K.prototype.BODY_CHUNKTRAILERS=function(){var r=this.consumeLine();r!==void 0&&(r?this.parseHeader(r,this.trailers):(this.trailers.length&&this.userCall()(this[ay](this.trailers,"")),this.nextRequest()))};K.prototype.BODY_RAW=function(){this.userCall()(this[Q1](this.chunk.slice(this.offset,this.end),0,this.end-this.offset)),this.offset=this.end};K.prototype.BODY_SIZED=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[Q1](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=K["kOn"+r];Object.defineProperty(K.prototype,"on"+r,{get:function(){return this[e]},set:function(t){return this._compatMode0_11=!0,uy="CONNECT",this[e]=t}})});function X1(r){var e=new Error("Parse Error");return e.code=r,e}var rC=[6,53,56,54,55];function dy(r){return py("sni",r)?.value}function fy(r){let e=py("tcp",r)?.value;return e==null?"":`:${e}`}function py(r,e){return e.find(t=>t.name===r)}function hy(r){return r.some(({code:e})=>e===448)}function Br(r,e){let t=my[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 my={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://${Br(t,e)}:${r.value}`},udp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`udp://${Br(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`${Br(t,e)}`},p2p:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${Br(t,e)}`},http:(r,e)=>{let t=hy(e),n=dy(e),s=fy(e);if(t&&n!=null)return`https://${n}${s}`;let o=t?"https://":"http://",i=e.pop();if(i==null)throw new Error("Unexpected end of multiaddr");let a=Br(i,e);return a=a?.replace("tcp://",""),`${o}${a}`},"http-path":(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Br(t,e),s=decodeURIComponent(r.value??"");return`${n}${s}`},tls:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return Br(t,e)},sni:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return Br(t,e)},https:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Br(t,e);return n=n?.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=hy(e),n=dy(e),s=fy(e);if(t&&n!=null)return`wss://${n}${s}`;let o=t?"wss://":"ws://",i=e.pop();if(i==null)throw new Error("Unexpected end of multiaddr");let a=Br(i,e);return a=a?.replace("tcp://",""),`${o}${a}`},wss:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Br(t,e);return n=n?.replace("tcp://",""),`wss://${n}`}};function Z1(r,e){let n=F(r).getComponents(),s=n.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let o=my[s.name];if(o==null)throw new Error(`No interpreter found for ${s.name}`);let i=o(s,n)??"";return e?.assumeHttp!==!1&&rC.includes(s.code)&&(i=i.replace(/^.*:\/\//,""),s.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 gy="[a-fA-F\\d:]",Es=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${gy})|(?<=${gy})(?=\\s|$))`:"",Mr="(?: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}",je="[a-fA-F\\d]{1,4}",J1=`
|
|
32
|
+
(?:
|
|
33
|
+
(?:${je}:){7}(?:${je}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
|
|
34
|
+
(?:${je}:){6}(?:${Mr}|:${je}|:)| // 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
|
|
35
|
+
(?:${je}:){5}(?::${Mr}|(?::${je}){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
|
|
36
|
+
(?:${je}:){4}(?:(?::${je}){0,1}:${Mr}|(?::${je}){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
|
|
37
|
+
(?:${je}:){3}(?:(?::${je}){0,2}:${Mr}|(?::${je}){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
|
|
38
|
+
(?:${je}:){2}(?:(?::${je}){0,3}:${Mr}|(?::${je}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
|
|
39
|
+
(?:${je}:){1}(?:(?::${je}){0,4}:${Mr}|(?::${je}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
|
|
40
|
+
(?::(?:(?::${je}){0,5}:${Mr}|(?::${je}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
|
|
41
|
+
)(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
|
|
42
|
+
`.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),nC=new RegExp(`(?:^${Mr}$)|(?:^${J1}$)`),sC=new RegExp(`^${Mr}$`),oC=new RegExp(`^${J1}$`),L3=r=>r&&r.exact?nC:new RegExp(`(?:${Es(r)}${Mr}${Es(r)})|(?:${Es(r)}${J1}${Es(r)})`,"g");L3.v4=r=>r&&r.exact?sC:new RegExp(`${Es(r)}${Mr}${Es(r)}`,"g");L3.v6=r=>r&&r.exact?oC:new RegExp(`${Es(r)}${J1}${Es(r)}`,"g");var k3=L3;function D3(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function yy(){return!1}var{toString:iC}=Object.prototype;function N3(r){return iC.call(r)==="[object RegExp]"}var wy={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function O3(r,e={}){if(!N3(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(wy).map(s=>(typeof e[s]=="boolean"?e[s]:r[s])?wy[s]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function B3(r,e,{timeout:t}={}){try{return D3(()=>O3(r).test(e),{timeout:t})()}catch(n){if(yy(n))return!1;throw n}}var aC=15,cC=45,by={timeout:400};function M3(r){return r.length>cC?!1:B3(k3.v6({exact:!0}),r,by)}function Ey(r){return r.length>aC?!1:B3(k3.v4({exact:!0}),r,by)}var xy={http:"80",https:"443",ws:"80",wss:"443"},lC=["http","https","ws","wss"];function vy(r,e){e=e??{};let t=e.defaultDnsType??"dns",{scheme:n,hostname:s,port:o,path:i}=uC(r),a=[dC(s,t),fC(o,n),hC(n)];i!=null&&a.push(pC(i));let c="/"+a.filter(l=>!!l).reduce((l,u)=>l.concat(u),[]).join("/");return F(c)}function uC(r){let[e]=r.split(":");lC.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:s,pathname:o,search:i}=new URL(r);if(s==null||s===""){let c=mC(e);c!=null&&(s=c),c==null&&t==="http:"&&(s="80")}let a;return o!=null&&o!==""&&o!=="/"&&(o.startsWith("/")&&(o=o.substring(1)),a=o),i!=null&&i!==""&&(a=a??"",a+=i),{scheme:e,hostname:n,port:s,path:a}}function dC(r,e){if(!(r==null||r==="")){if(Ey(r))return["ip4",r];if(M3(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(M3(t))return["ip6",t]}return[e,r]}}function fC(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function hC(r){if(r.match(/^tcp$|^udp$/)==null)return r==="https"?["/tls/http"]:r==="wss"?["/tls/ws"]:[r]}function pC(r){if(!(r==null||r===""))return["http-path",encodeURIComponent(r)]}function mC(r){if(!(r==null||r===""||xy[r]==null))return xy[r]}function Sy(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 U3(r,e={}){let t=Sy(r),n={_cancelled:!1,async start(){this._cancelled=!1},async pull(s){try{let{value:o,done:i}=await t.next();if(this._cancelled)return;if(i===!0){s.close();return}s.enqueue(o)}catch(o){s.error(o)}},cancel(){this._cancelled=!0}};return new globalThis.ReadableStream(n,e)}var gC=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),Ay=wa({name:"sha-1",code:17,encode:gC("SHA-1")});var eh=class extends globalThis.Request{constructor(e,t={}){let n=t.method??"GET",s=an(t),o=t.body;th(n,s)&&(t.method="UPGRADE"),super(e,t),Object.defineProperties(this,{body:{value:o,writable:!1},method:{value:n,writable:!1},headers:{value:s,writable:!1}})}};var Ty={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 cn=class extends globalThis.Response{constructor(e,t={}){let n=an(t),s=t.status??200;(s<200||s>599)&&(t.status=200),super(e,t),Object.defineProperties(this,{status:{value:s,writable:!1},statusText:{value:Ty[s],writable:!1},headers:{value:n,writable:!1}})}};var yC=["dns","dns4","dns6","dnsaddr"];function pl(r,e){if(r instanceof URL)return r;let t=nh(r,e),{httpPath:n}=sh(r);return new URL(`http://${t}${n}`)}function ml(r){return r instanceof Uint8Array?r:r instanceof DataView?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):new Uint8Array(r,0,r.byteLength)}function _y(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=bC(e,r.headers.get("content-length"))),t.body=U3(n),t.duplex="half"}return new eh(F3(r).toString(),t)}async function Ry(r,e){if(e.send(C([`HTTP/1.1 ${r.status} ${r.statusText}`,...rh(r.headers),"",""].join(`\r
|
|
43
|
+
`))),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 Py=C(["HTTP/1.1 404 Not Found","Connection: close","",""].join(`\r
|
|
44
|
+
`)),wC=C(["HTTP/1.1 400 Bad Request","Connection: close","",""].join(`\r
|
|
45
|
+
`)),UJ=C(["HTTP/1.1 500 Internal Server Error","Connection: close","",""].join(`\r
|
|
46
|
+
`)),FJ=C(["HTTP/1.1 501 Not Implemented","Connection: close","",""].join(`\r
|
|
47
|
+
`));function rh(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*bC(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 ra(r,e){if(typeof r=="string"&&(r.startsWith("/")?r=F(r):r=new URL(r)),Kr(r)&&(r=F(`/p2p/${r}`)),r instanceof URL&&r.protocol==="multiaddr:"&&(r=vy(r.toString())),Qr(r)&&(r=[r]),Array.isArray(r)){for(let t of r)if(t.getComponents().some(({name:s})=>s==="http")){let s=Z1(t);return new URL(`${s}${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 an(r={}){return r.headers instanceof Headers||(r.headers=new Headers(r.headers)),r.headers}function hl(r){return r!=null&&r!==""}function Iy(r){switch(r){case"https:":return 443;case"wss:":return 443;case"http:":return 80;case"ws:":return 80;default:return 80}}function nh(r,e){let t,n=80,s="http:";if(r instanceof URL&&(n=r.port===""?Iy(r.protocol):parseInt(r.port,10),t=r.hostname,s=r.protocol),hl(t)||(t=e.get("host")??void 0),!hl(t)&&Array.isArray(r))for(let o of r){let a=o.getComponents().filter(({name:c})=>yC.includes(c))?.[0]?.value;if(a!=null){t=a;break}}if(!hl(t)&&Array.isArray(r))for(let o of r){let i=o.getComponents().findLast(a=>a.code===421)?.value;try{let a=Q(o);a.port!=null&&(n=a.port)}catch{}if(i!=null){t=Be(i).toCID().toString(Ks);break}}if(!hl(t)&&Array.isArray(r))for(let o of r)try{let i=Q(o);i.host!=null&&(t=i.host);break}catch{}if(hl(t))return n!==Iy(s)&&(t=`${t}:${n}`),t;throw new E("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 sh(r){let e="/";return r=r.map(t=>F(t.getComponents().filter(n=>n.name==="http-path"?(e=n.value??"/",!1):!0))),{httpPath:e,addresses:r}}function oh(r,e=["GET"]){return r==null?e:(typeof r=="string"&&(r=[r]),r.map(t=>t.toUpperCase()))}function F3(r){let e=r.url??"/";if(e.startsWith("http"))return new URL(e);let t=EC(r);return new URL(`http://${t}${e}`)}function EC(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 E("Could not read host");return e}function th(r,e){return r==="GET"&&e.get("connection")?.toLowerCase()==="upgrade"&&e.get("upgrade")?.toLowerCase()==="websocket"}function Cy(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 $3(r){if(Cy(r,"sec-websocket-version")!=="13")throw new Os("Invalid version");let e=Cy(r,"sec-websocket-key");if(e==null)throw new Os("Missing sec-websocket-key");let t=`${e}258EAFA5-E914-47DA-95CA-C5AB0DC85B11`,n=await Ay.digest(C(t)),s=ga.encode(n.digest).substring(1);return new Headers({Upgrade:"websocket",Connection:"upgrade","Sec-WebSocket-Accept":s})}async function Ly(r,e){let t=new K("REQUEST"),n=new W,s;t[K.kOnHeadersComplete]=o=>{let i=new Headers;for(let a=0;a<o.headers.length;a+=2)i.set(o.headers[a].toLowerCase(),o.headers[a+1]);s={...o,headers:i,raw:n,method:K.methods[o.method]}};try{for(;;){let{data:o}=await ds(r,"message",e?.signal),i=o.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)),s!=null)return s}}catch(o){r.abort(o)}finally{t.finish()}throw new Error("Failed to read header info from request")}var ih=class extends Error{static name="InvalidResponseError";name="InvalidResponseError"};var xC=[101,204,205,304];async function ky(r,e,t){let n=Promise.withResolvers(),s=new TransformStream,o=s.writable.getWriter(),i=!1,a=new K("RESPONSE");a.maxHeaderSize=t.maxHeaderSize??K.maxHeaderSize,a[K.kOnHeadersComplete]=l=>{t.log("response headers complete"),i=!0;let u=new Headers;for(let h=0;h<l.headers.length;h+=2)u.append(l.headers[h],l.headers[h+1]);let d=s.readable;xC.includes(l.statusCode)&&(s.writable.close().catch(()=>{}),s.readable.cancel().catch(()=>{}),d=null);let f=new cn(d,{status:l.statusCode,statusText:l.statusMessage,headers:u});n.resolve(f)},a[K.kOnBody]=l=>{t.log("response read body %d bytes",l.byteLength),o.write(l).catch(u=>{n.reject(u)})},a[K.kOnMessageComplete]=()=>{t.log("response message complete"),o.close().catch(l=>{n.reject(l)})};let c=0;return r.addEventListener("message",({data:l})=>{t.log("response stream read %d bytes",l.byteLength),c+=l.byteLength;let u=a.execute(l.subarray(),0,l.byteLength);u instanceof Error&&(r.abort(u),a.finish())}),r.addEventListener("remoteCloseWrite",()=>{i||n.reject(new ih(`Response ended before headers were received, read ${c} bytes`)),a.finish()}),n.promise}function Dy(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 Ny(r,e){return e.set("Content-Length",`${r.byteLength}`),e.set("Content-Type","application/octet-stream"),new ReadableStream({start(t){t.enqueue(ml(r)),t.close()}})}function vC(r,e,t){let n=[`--${t}`],s=0,o=2;return typeof e=="string"?(n.push(`Content-Disposition: form-data; name="${r}"`,'Content-Type: text/plain; charset="UTF-8"',`Content-Length: ${e.length}`,""),s=e.length+o):(n.push(`Content-Disposition: form-data; name="${r}"; filename="${encodeURIComponent(e.name)}"`,"Content-Type: application/octet-stream",`Content-Length: ${e.size}`,""),s=e.size+o),C(n.join(`\r
|
|
48
|
+
`)).byteLength+s}function Oy(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+=vC(c,l,t);e.set("Content-Length",`${n}`);let s=r.entries(),o;function i(c,l,u,d){let f=[`--${d}`];typeof u=="string"?f.push(`Content-Disposition: form-data; name="${l}"`,'Content-Type: text/plain; charset="UTF-8"',`Content-Length: ${u.length}`,"",u,""):(f.push(`Content-Disposition: form-data; name="${l}"; filename="${encodeURIComponent(u.name)}"`,"Content-Type: application/octet-stream",`Content-Length: ${u.size}`,""),o=u.stream().getReader()),c.enqueue(C(f.join(`\r
|
|
49
|
+
`)))}async function a(c,l){if(o!=null){let f=await o.read();f.value!=null&&c.enqueue(f.value),f.done&&(c.enqueue(C(`\r
|
|
50
|
+
`)),o=void 0);return}let{done:u,value:d}=s.next();if(d!=null){let[f,h]=d;i(c,f,h,l)}u===!0&&c.close()}return new ReadableStream({async pull(c){await a(c,t)}})}function By(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:s,value:o}=await t.read();o!=null&&(n.enqueue(C(`${o.byteLength}\r
|
|
51
|
+
`)),n.enqueue(o),n.enqueue(C(`\r
|
|
52
|
+
`))),s&&(n.enqueue(C(`0\r
|
|
53
|
+
\r
|
|
54
|
+
`)),n.close())}})}function K3(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 My(r,e){if(r!=null){if(typeof r=="string")return K3(r,e);if(r instanceof Blob)return Dy(r,e);if(SC(r))return Ny(r,e);if(r instanceof URLSearchParams)return K3(r.toString(),e);if(r instanceof ReadableStream)return By(r,e);if(r instanceof FormData)return Oy(r,e);throw new Error("Unsupported body type")}}function SC(r){return r==null?!1:r.byteLength!=null}async function Uy(r,e,t){let n=new Headers(t.headers),s=n.get("host")??e.hostname;n.set("host",s),n.get("user-agent")==null&&n.set("user-agent","libp2p/fetch");let o=My(t.body,n),i=[`${t?.method?.toUpperCase()??"GET"} ${e.pathname??"/"} HTTP/1.1`,...rh(n),"",""];r.send(C(i.join(`\r
|
|
55
|
+
`)))||await r.onDrain({signal:t.signal??void 0}),o!=null&&(t.log("request sending body"),await AC(r,o,t))}async function AC(r,e,t){let n=e.getReader();for(;;){let{done:s,value:o}=await n.read();if(o!=null&&(t.log("request send %d bytes",o.byteLength),r.send(o)||await r.onDrain({signal:t.signal??void 0})),s){t.log("request finished sending body");break}}}async function Fy(r,e,t={}){let n=r.log.newScope("http-fetch");e=typeof e=="string"?new URL(e):e;let[s]=await Promise.all([ky(r,e,{...t,log:n}),Uy(r,e,{...t,log:n})]);return await r.close({signal:t.signal??void 0}),s}var ah=class extends Event{message;error;filename="";lineno=0;colno=0;constructor(e){super("error"),this.error=e,this.message=e.message}},gl=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 TC={CONTINUATION:0,TEXT:1,BINARY:2,CONNECTION_CLOSE:8,PING:9,PONG:10},V3={0:"CONTINUATION",1:"TEXT",2:"BINARY",8:"CONNECTION_CLOSE",9:"PING",10:"PONG"};var yl={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 $y(r){let e=0;if(r.byteLength<e+1)return;let n=r.get(e)&15;if(e++,V3[n]==null)throw new Error(`Unknown opcode: ${n}`);if(r.byteLength<e+1)return;let s=r.get(e),o=(s&128)===128,i=s&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:V3[n]};let a;if(o){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=Ky(c,a)),r.consume(e),{type:V3[n],data:c}}function Ky(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 Vy(r,e,t){let s=new W(Uint8Array.from([128|TC[r]])),o=e?.byteLength??0;if(o<126)s.append(Uint8Array.from([o|(t===!0?128:0)]));else if(o<65535){let i=new W(new Uint8Array(3));i.set(0,126|(t===!0?128:0)),i.setUint16(1,o),s.append(i)}else if(o<18446744073709552e3){let i=new W(new Uint8Array(9));i.set(0,127|(t===!0?128:0)),i.setUint32(1,o),s.append(i)}else throw new Error("Payload too large");if(t===!0&&e!=null){let i=Uint8Array.from([0,0,0,0]);s.append(i),e=Ky(e,i)}return e!=null&&s.append(e),s}function Hy(r){if(r instanceof ArrayBuffer)return ml(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);if(typeof r=="string")return C(r);if(r instanceof Blob)return r.arrayBuffer().then(e=>ml(e));throw new E("Unsupported data type")}async function qy(r,e){return new Promise((t,n)=>{let s=!1,o=new K("RESPONSE");o[K.kOnHeadersComplete]=i=>{s=!0;let a=[];for(let c=0;c<i.headers.length;c+=2)a.push([i.headers[c],i.headers[c+1]]);t(new cn(null,{status:i.statusCode,statusText:i.statusMessage,headers:new Headers(a)}))},Promise.resolve().then(async()=>{for(;;){let{data:i}=await ds(r,"message",e.signal),a=i.subarray(),c=o.execute(a,0,a.byteLength);if(c instanceof Error)throw c;if(c<a.byteLength&&r.push(a.subarray(c)),s)break}}).catch(i=>{n(i)})})}async function*zy(r,e=[],t){let n=ga.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(([s,o])=>`${s}: ${o}`),"",""].join(`\r
|
|
56
|
+
`))}var IC=["BINARY","TEXT","CONTINUATION"],CC=10485760;var _C="/http/1.1",ch=class extends oe{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 W,this.closeController=new AbortController,this.maxMessageSize=t.maxMessageSize??CC}send(e){if(this.readyState!==this.OPEN)throw new Error("WebSocket was not open");let t=Hy(e);Yu(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=Vy(e,t,this.isClient),s=n.byteLength;this.bufferedAmount+=s,this._write(n,o=>{this.bufferedAmount-=s,o!=null&&this._errored(o)})}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 ah(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(yl.MESSAGE_TOO_BIG,"Max message size exceeded");return}for(;;){let t=$y(this.buffer);if(t==null)break;if(IC.includes(t.type)&&t.data!=null){let n;this.binaryType==="blob"?n=new Blob([Uint8Array.from(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 gl("close"))}))}}_remoteClosed(e){this.readyState=this.CLOSING,this._close(e,()=>{this.readyState=this.CLOSED,this.dispatchEvent(new gl("close"))})}};var wl=class extends ch{writer;writable;constructor(e,t,n={}){if(super(new URL(e.url),{...n,isClient:!1}),e.body==null)throw new E("Request body cannot be null");this.readyState=this.OPEN,this.writable=t,this.writer=t.getWriter();let s=e.body.getReader();Promise.resolve().then(async()=>{for(this.dispatchEvent(new Event("open"));;){let{value:o,done:i}=await s.read();if(o!=null&&this._push(o),i){this._remoteClosed();break}}}).catch(o=>{this._errored(o)})}_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()})}},bl=class extends ch{stream;handshakeTimeout;drainTimeout;constructor(e,t,n,s){super(t,{...s,isClient:!0}),this.handshakeTimeout=s.handshakeTimeout??1e4,this.drainTimeout=s.drainTimeout??1e4,Promise.resolve().then(async()=>{let o=AbortSignal.timeout(this.handshakeTimeout);this.stream=await n.openStream(e,_C,{...s,signal:o});for await(let a of zy(t,s.protocols,an(s)))this.stream.send(a)||await this.stream.onDrain({signal:o});let i=await qy(this.stream,{signal:o});if(i.status!==101)throw new Error("Invalid WebSocket handshake - response status "+i.status);await s.onHandshakeResponse?.(i,{signal:o}),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(o=>{this._errored(o)})}_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 El="/http/1.1";var lh=Symbol.for("@libp2p/http/websocket-handler");var Zy=Vo(Qy(),1),dh=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 s=t.headers.get("origin");if(s==null||s==="null")return;let o=pl(e,t.headers),i=(this.cookies.get(o.hostname)??[]).filter(a=>!(a.expires!=null&&a.expires<Date.now()||a.path!=null&&!o.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"){Xy(n);return}let o=t.headers.get("origin");if(o==null||o==="null")return;let i=pl(e,t.headers);for(let a of n.headers.getSetCookie()){let c=[...this.cookies.get(i.hostname)??[],...MC(Zy.default.parse(a))];this.cookies.set(i.hostname,c)}Xy(n)}};function Xy(r){return r.headers.has("set-cookie")&&r.headers.delete("set-cookie"),r}function MC(r){let e={},t=[];return Object.entries(r).forEach(([n,s])=>{n.toLowerCase()==="domain"&&s!=null&&(e.domain=s),n.toLowerCase()==="max-age"&&s!=null&&(e.expires=Date.now()+parseInt(s,10)*1e3),!UC.includes(n.toLowerCase())&&s!=null&&t.push({name:n,value:s})}),t.map(n=>({...n,...e}))}var UC=["domain","expires","httponly","max-age","partitioned","path","samesite","secure"];var fh=class{async prepareRequest(e,t){if(t.headers.get("origin")!=null||t.mode==="no-cors")return;let n=pl(e,t.headers);t.headers.set("origin",`${n.protocol}//${n.host}`)}};function FC(r){return typeof r.init=="function"}function hh(r,e){if(FC(r)){let t=r;return t.handler=r.init(e),delete t.init,t}return r}function Jy(r){let e=oh(r.method,["GET"]);if(r.fallback==null&&e.filter(n=>n!=="GET").length>0)throw new E("WebSocket handlers only support the GET HTTP method");let t={...r,init:n=>{let s=hh(r,n);return t[lh]=s.handler,async o=>{if(!th(o.method,o.headers))return r?.fallback!=null?r.fallback(o):new cn(null,{status:400});let i=new TransformStream;try{let a=new cn(i.readable,{status:101,headers:await $3(o.headers)}),c=new wl(o,i.writable,r);return s.handler(c),a}catch{return new cn(null,{status:500})}}}};return t}var ph="/.well-known/libp2p/protocols";function ew(r){return Jy({path:ph,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 mh=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("",ew(this))}async start(){await this.components.registrar.handle(El,this.onStream.bind(this))}async stop(){await this.components.registrar.unhandle(El)}async onStream(e,t){let n=await Ly(e);if(this.canHandle(n)){this.log("handling incoming request %s %s",n.method,n.url);let s=await this.onRequest(_y(n,e));await Ry(s,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(Py),await e.close();return}this.log("passing incoming request %s %s to endpoint",n.method,n.url),this.endpoint.inject(n,e,t).catch(s=>{this.log.error("error injecting request to endpoint - %e",s),e.abort(s)})}canHandle(e){let t=F3(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}),$C(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[lh];if(n!=null){n(e);return}}e.close(yl.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(s=>s.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 E(`HTTP protocol handler for ${e} already registered`);(t.path===""||!t.path.startsWith("/"))&&(t.path=`/${t.path}`),t.cors=t.cors??!0,t.method=oh(t.method),t=hh(t,this.components),this.protocols.push({protocol:e,route:t}),this.protocols.sort(({route:{path:n}},{route:{path:s}})=>s.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 $C(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 tw(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function rw(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function nw(r,e,t){for(let n of e.middleware)t=await n.processResponse?.(r,e,t)??t;return t}var gh=class{log;components;httpRegistrar;origin;cookies;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:http"),this.httpRegistrar=new mh(e,t),this.origin=new fh,this.cookies=new dh(e,t)}[Symbol.toStringTag]="@libp2p/http";[ue]=["@libp2p/http"];async start(){await yr(this.httpRegistrar)}async stop(){await Vr(this.httpRegistrar)}agent(...e){throw new la("This method is not supported in browsers")}dispatcher(...e){throw new la("This method is not supported in browsers")}async connect(e,t={}){let n=ra(e),s=an(t),o={...t,headers:s,method:"GET",middleware:t.middleware?.map(i=>i(this.components))??[]};return s.set("connection","upgrade"),s.set("upgrade","websocket"),rw(n,o,async()=>{if(n instanceof URL){let c=new globalThis.WebSocket(n,t.protocols);return c.binaryType="arraybuffer",c}let{addresses:i,httpPath:a}=sh(n);return new bl(i,new URL(`http://${nh(n,o.headers)}${decodeURIComponent(a)}`),this.components.connectionManager,o)})}async fetch(e,t={}){let n=ra(e),s={...t,headers:an(t),method:"GET",middleware:[this.origin,this.cookies,...t.middleware?.map(i=>i(this.components))??[]]},o=await tw(n,s,async()=>this.sendRequest(n,t));return nw(n,s,o)}async connectProtocol(e,t,n){let s=await this.getProtocolPath(e,t,n),o=ra(e,s);return this.connect(o,n)}async fetchProtocol(e,t,n={}){let s=await this.getProtocolPath(e,t,n),o=ra(e,s);return this.fetch(o,n)}async getSupportedProtocols(e,t={}){let n=ra(e,ph),s=await this.fetch(n,{method:"GET",headers:{Accept:"application/json"},signal:t.signal});if(s.status!==200)throw new Error(`Unexpected status code: ${s.status}`);return s.json()}async getProtocolPath(e,t,n={}){let s=await this.getSupportedProtocols(e,n);if(s[t]==null)throw new Error(`Peer does not serve protocol: ${t}`);return s[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=nh(e,an(t)),{addresses:s,httpPath:o}=sh(e),a=await(await this.components.connectionManager.openConnection(s,{signal:t.signal??void 0})).newStream(El,{signal:t.signal??void 0});return Fy(a,new URL(`http://${n}${decodeURIComponent(o)}`),t)}};function sw(r={}){return e=>new gh(e,r)}var ow="0.1.0";var iw="id/push",aw="1.0.0",cw="1.0.0";var vs;(function(r){let e;r.codec=()=>(e==null&&(e=ne((o,i,a={})=>{if(a.lengthDelimited!==!1&&i.fork(),o.protocolVersion!=null&&(i.uint32(42),i.string(o.protocolVersion)),o.agentVersion!=null&&(i.uint32(50),i.string(o.agentVersion)),o.publicKey!=null&&(i.uint32(10),i.bytes(o.publicKey)),o.listenAddrs!=null&&o.listenAddrs.length>0)for(let c of o.listenAddrs)i.uint32(18),i.bytes(c);if(o.observedAddr!=null&&(i.uint32(34),i.bytes(o.observedAddr)),o.protocols!=null&&o.protocols.length>0)for(let c of o.protocols)i.uint32(26),i.string(c);o.signedPeerRecord!=null&&(i.uint32(66),i.bytes(o.signedPeerRecord)),a.lengthDelimited!==!1&&i.ldelim()},(o,i,a={})=>{let c={listenAddrs:[],protocols:[]},l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 5:{c.protocolVersion=o.string();break}case 6:{c.agentVersion=o.string();break}case 1:{c.publicKey=o.bytes();break}case 2:{if(a.limits?.listenAddrs!=null&&c.listenAddrs.length===a.limits.listenAddrs)throw new fe('Decode error - repeated field "listenAddrs" had too many elements');c.listenAddrs.push(o.bytes());break}case 4:{c.observedAddr=o.bytes();break}case 3:{if(a.limits?.protocols!=null&&c.protocols.length===a.limits.protocols)throw new fe('Decode error - repeated field "protocols" had too many elements');c.protocols.push(o.string());break}case 8:{c.signedPeerRecord=o.bytes();break}default:{o.skipType(u&7);break}}}return c},function*(o,i,a,c={}){let l={listenAddrs:0,protocols:0},u=i==null?o.len:o.pos+i;for(;o.pos<u;){let d=o.uint32();switch(d>>>3){case 5:{yield{field:`${a}.protocolVersion`,value:o.string()};break}case 6:{yield{field:`${a}.agentVersion`,value:o.string()};break}case 1:{yield{field:`${a}.publicKey`,value:o.bytes()};break}case 2:{if(c.limits?.listenAddrs!=null&&l.listenAddrs===c.limits.listenAddrs)throw new fe('Streaming decode error - repeated field "listenAddrs" had too many elements');yield{field:`${a}.listenAddrs[]`,index:l.listenAddrs,value:o.bytes()},l.listenAddrs++;break}case 4:{yield{field:`${a}.observedAddr`,value:o.bytes()};break}case 3:{if(c.limits?.protocols!=null&&l.protocols===c.limits.protocols)throw new fe('Streaming decode error - repeated field "protocols" had too many elements');yield{field:`${a}.protocols[]`,index:l.protocols,value:o.string()},l.protocols++;break}case 8:{yield{field:`${a}.signedPeerRecord`,value:o.bytes()};break}default:{o.skipType(d&7);break}}}})),e);function t(o){return te(o,r.codec())}r.encode=t;function n(o,i){return ee(o,r.codec(),i)}r.decode=n;function s(o,i){return re(o,r.codec(),i)}r.stream=s})(vs||(vs={}));var qt={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function uw(r){return r.bytes.length===0}function z3(r){if(r!=null&&r.length>0)try{let e=F(r);if(!uw(e))return e}catch{}}async function yh(r,e,t,n,s){if(t("received identify from %p",n.remotePeer),s==null)throw new se("message was null or undefined");let o={},i=s.listenAddrs.map(z3).filter(l=>l!=null);if(s.listenAddrs.length>0&&(o.addresses=i.map(l=>({isCertified:!1,multiaddr:l}))),s.protocols.length>0&&(o.protocols=s.protocols),s.publicKey!=null){let l=Xe(s.publicKey);if(!Wr(l).equals(n.remotePeer))throw new se("public key did not match remote PeerId");o.publicKey=l}let a;if(s.signedPeerRecord!=null){t.trace("received signedPeerRecord from %p",n.remotePeer);let l=s.signedPeerRecord,u=await tr.openAndCertify(l,kt.DOMAIN),d=kt.createFromProtobuf(u.payload),f=Rt(u.publicKey.toCID());if(!d.peerId.equals(f))throw new se("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(d.peerId))throw new se("signing key does not match remote PeerId");let h;try{h=await r.get(d.peerId)}catch(y){if(y.name!=="NotFoundError")throw y}if(h!=null&&(o.metadata=h.metadata,h.peerRecordEnvelope!=null)){let y=tr.createFromProtobuf(h.peerRecordEnvelope),m=kt.createFromProtobuf(y.payload);m.seqNumber>=d.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",m.seqNumber,d.seqNumber),d=m,l=h.peerRecordEnvelope)}o.peerRecordEnvelope=l;let p=d.multiaddrs.filter(y=>!uw(y));o.addresses=p.map(y=>({isCertified:!0,multiaddr:y})),a={seq:d.seqNumber,addresses:p}}else t("%p did not send a signed peer record",n.remotePeer);if(t.trace("patching %p with",n.remotePeer,o),await r.patch(n.remotePeer,o),s.agentVersion!=null||s.protocolVersion!=null){let l={};s.agentVersion!=null&&(l.AgentVersion=C(s.agentVersion)),s.protocolVersion!=null&&(l.ProtocolVersion=C(s.protocolVersion)),t.trace("merging %p metadata",n.remotePeer,l),await r.merge(n.remotePeer,{metadata:l})}let c={peerId:n.remotePeer,protocolVersion:s.protocolVersion,agentVersion:s.agentVersion,publicKey:s.publicKey,listenAddrs:i,observedAddr:s.observedAddr==null?void 0:F(s.observedAddr),protocols:s.protocols,signedPeerRecord:a,connection:n};return e.safeDispatchEvent("peer:identify",{detail:c}),c}function wh(r){let e={...r[0]};for(let t of r.slice(1))t.protocolVersion!=null&&(e.protocolVersion=t.protocolVersion),t.agentVersion!=null&&(e.agentVersion=t.agentVersion),t.publicKey!=null&&(e.publicKey=t.publicKey),t.observedAddr!=null&&(e.observedAddr=t.observedAddr),t.signedPeerRecord!=null&&(e.signedPeerRecord=t.signedPeerRecord),e.listenAddrs=[...e.listenAddrs,...t.listenAddrs],e.protocols=[...new Set([...e.protocols,...t.protocols])];return e}async function bh(r,e,t,n){let s=Ne(r,{maxDataLength:e}).pb(vs),o=[];for(let i=0;i<10;i++)try{o.push(await s.read(t))}catch(a){if(o.length===0)throw a;n.trace("stopped reading identify - %e",a);break}o.length>=10&&n("reached MAX_IDENTIFY_MESSAGES, returning truncated identify");try{await r.close(t)}catch(i){n.trace("error closing identify stream after read - %e",i),r.abort(i)}return o}var na=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??qt.timeout,this.maxInboundStreams=t.maxInboundStreams??qt.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??qt.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??qt.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??qt.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??qt.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??qt.protocolPrefix}/${ow}`,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 Eh=class extends na{connectionManager;concurrency;_push;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??qt.protocolPrefix}/${iw}/${cw}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??qt.concurrency,this._push=Tn(this.sendPushMessage.bind(this),t.debounce??1e3),(t.runOnSelfUpdate??qt.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(s=>{this.log.error("error pushing updates to peers - %e",s)})})}[ue]=["@libp2p/identify-push"];async push(){this._push()}async sendPushMessage(){if(this.isStarted())try{let e=this.components.addressManager.getAddresses().map(u=>u.decapsulateCode(421)),t=new kt({peerId:this.components.peerId,multiaddrs:e}),n=await tr.seal(t,this.components.privateKey),s=this.components.registrar.getProtocols(),o=await this.components.peerStore.get(this.components.peerId),i=k(o.metadata.get("AgentVersion")??C(this.host.agentVersion)),a=k(o.metadata.get("ProtocolVersion")??C(this.host.protocolVersion)),c=this;async function*l(){for(let u of c.connectionManager.getConnections())(await c.components.peerStore.get(u.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let f,h=AbortSignal.timeout(c.timeout);try{f=await u.newStream(c.protocol,{signal:h,runOnLimitedConnection:c.runOnLimitedConnection}),await Ne(f,{maxDataLength:c.maxMessageSize}).pb(vs).write({listenAddrs:e.map(y=>y.bytes),signedPeerRecord:n.marshal(),protocols:s,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 Xr(Rn(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 s={signal:AbortSignal.timeout(this.timeout)},o=await bh(e,this.maxMessageSize,s,n);await yh(this.components.peerStore,this.components.events,n,t,wh(o)),n.trace("handled push from %p",t.remotePeer)}};var xh=class extends na{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??qt.protocolPrefix}/${"id"}/${aw}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??qt.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let s=n.detail;this.identify(s).catch(()=>{})})}[ue]=["@libp2p/identify"];async _identify(e,t={}){let n,s;if(t.signal==null){let o=AbortSignal.timeout(this.timeout);t={...t,signal:o}}this.log("run identify on new connection %a",e.remoteAddr);try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection}),s=n.log.newScope("identify");let o=await bh(n,this.maxMessageSize,t,s);return wh(o)}catch(o){throw s?.error("identify failed - %e",o),n?.abort(o),o}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:s,protocols:o,observedAddr:i}=n;if(s==null)throw new se("Public key was missing from identify message");let a=Xe(s),c=Rt(a.toCID());if(!e.remotePeer.equals(c))throw new se("Identified peer does not match the expected peer");if(this.components.peerId.equals(c))throw new se("Identified peer is our own peer id?");return this.maybeAddObservedAddress(i),this.log("completed for peer %p and protocols %o",c,o),yh(this.components.peerStore,this.components.events,this.log,e,n)}maybeAddObservedAddress(e){let t=z3(e);if(t==null||(this.log.trace("our observed address was %a",t),We(t)))return;let n=t.getComponents();if((n[0].code===41||n[0].code===42&&n[1].code===41)&&!Cu(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}bo.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 s=AbortSignal.timeout(this.timeout);let o=await this.components.peerStore.get(this.components.peerId,{signal:s}),i=this.components.addressManager.getAddresses().map(u=>u.decapsulateCode(421)),a=o.peerRecordEnvelope;if(i.length>0&&a==null){let u=new kt({peerId:this.components.peerId,multiaddrs:i});a=(await tr.seal(u,this.components.privateKey,{signal:s})).marshal().subarray()}let c=t.remoteAddr.bytes;T5.matches(t.remoteAddr)||(c=void 0);let l=Ne(e).pb(vs);n("send response"),await l.write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:tt(this.components.privateKey.publicKey),listenAddrs:i.map(u=>u.bytes),signedPeerRecord:a,observedAddr:c,protocols:o.protocols},{signal:s}),n("close write"),await l.unwrap().unwrap().close({signal:s})}};function dw(r={}){return e=>new xh(e,r)}function fw(r={}){return e=>new Eh(e,r)}var Uo=1e3,G3=60*Uo,vh=60*G3,hw="/ipfs/kad/1.0.0",Sh=48*vh;var pw=24*vh,mw=10,gw=16384,yw=vh,W3=vh,hre=10*Uo,ww=10*Uo;var Ah=20,Ss=10,bw=5*G3,Ew=Uo,xw=5*Uo,vw=5*G3,Sw=30*Uo,Aw=180*Uo,j3=`${Fs}-kad-dht`;var xl;(function(r){let e;r.codec=()=>(e==null&&(e=ne((o,i,a={})=>{a.lengthDelimited!==!1&&i.fork(),o.key!=null&&o.key.byteLength>0&&(i.uint32(10),i.bytes(o.key)),o.value!=null&&o.value.byteLength>0&&(i.uint32(18),i.bytes(o.value)),o.timeReceived!=null&&o.timeReceived!==""&&(i.uint32(42),i.string(o.timeReceived)),a.lengthDelimited!==!1&&i.ldelim()},(o,i,a={})=>{let c={key:z(0),value:z(0),timeReceived:""},l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{c.key=o.bytes();break}case 2:{c.value=o.bytes();break}case 5:{c.timeReceived=o.string();break}default:{o.skipType(u&7);break}}}return c},function*(o,i,a,c={}){let l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{yield{field:`${a}.key`,value:o.bytes()};break}case 2:{yield{field:`${a}.value`,value:o.bytes()};break}case 5:{yield{field:`${a}.timeReceived`,value:o.string()};break}default:{o.skipType(u&7);break}}}})),e);function t(o){return te(o,r.codec())}r.encode=t;function n(o,i){return ee(o,r.codec(),i)}r.decode=n;function s(o,i){return re(o,r.codec(),i)}r.stream=s})(xl||(xl={}));function Tw(r){let e=r.getUTCFullYear(),t=String(r.getUTCMonth()+1).padStart(2,"0"),n=String(r.getUTCDate()).padStart(2,"0"),s=String(r.getUTCHours()).padStart(2,"0"),o=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${s}:${o}:${i}.${c}Z`}function Iw(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),s=parseInt(t[2],10)-1,o=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,s,o,i,a,c,l))}var gt=class r{key;value;timeReceived;constructor(e,t,n){if(!(e instanceof Uint8Array))throw new Error("key must be a Uint8Array");if(!(t instanceof Uint8Array))throw new Error("value must be a Uint8Array");this.key=e,this.value=t,this.timeReceived=n}serialize(){return xl.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:Tw(this.timeReceived)}}static deserialize(e){let t=xl.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=Iw(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 As=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},Th=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},Ih=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var Cw;(function(r){let e;r.codec=()=>(e==null&&(e=ne((o,i,a={})=>{a.lengthDelimited!==!1&&i.fork(),o.key!=null&&(i.uint32(10),i.bytes(o.key)),o.value!=null&&(i.uint32(18),i.bytes(o.value)),o.author!=null&&(i.uint32(26),i.bytes(o.author)),o.signature!=null&&(i.uint32(34),i.bytes(o.signature)),o.timeReceived!=null&&(i.uint32(42),i.string(o.timeReceived)),a.lengthDelimited!==!1&&i.ldelim()},(o,i,a={})=>{let c={},l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{c.key=o.bytes();break}case 2:{c.value=o.bytes();break}case 3:{c.author=o.bytes();break}case 4:{c.signature=o.bytes();break}case 5:{c.timeReceived=o.string();break}default:{o.skipType(u&7);break}}}return c},function*(o,i,a,c={}){let l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{yield{field:`${a}.key`,value:o.bytes()};break}case 2:{yield{field:`${a}.value`,value:o.bytes()};break}case 3:{yield{field:`${a}.author`,value:o.bytes()};break}case 4:{yield{field:`${a}.signature`,value:o.bytes()};break}case 5:{yield{field:`${a}.timeReceived`,value:o.string()};break}default:{o.skipType(u&7);break}}}})),e);function t(o){return te(o,r.codec())}r.encode=t;function n(o,i){return ee(o,r.codec(),i)}r.decode=n;function s(o,i){return re(o,r.codec(),i)}r.stream=s})(Cw||(Cw={}));var Ee;(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"})(Ee||(Ee={}));var Ch;(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"})(Ch||(Ch={}));(function(r){r.codec=()=>Qe(Ch)})(Ee||(Ee={}));var Fo;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(Fo||(Fo={}));var Y3;(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"})(Y3||(Y3={}));(function(r){r.codec=()=>Qe(Y3)})(Fo||(Fo={}));var Ts;(function(r){let e;r.codec=()=>(e==null&&(e=ne((o,i,a={})=>{if(a.lengthDelimited!==!1&&i.fork(),o.id!=null&&o.id.byteLength>0&&(i.uint32(10),i.bytes(o.id)),o.multiaddrs!=null&&o.multiaddrs.length>0)for(let c of o.multiaddrs)i.uint32(18),i.bytes(c);o.connection!=null&&(i.uint32(24),Fo.codec().encode(o.connection,i)),a.lengthDelimited!==!1&&i.ldelim()},(o,i,a={})=>{let c={id:z(0),multiaddrs:[]},l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{c.id=o.bytes();break}case 2:{if(a.limits?.multiaddrs!=null&&c.multiaddrs.length===a.limits.multiaddrs)throw new fe('Decode error - repeated field "multiaddrs" had too many elements');c.multiaddrs.push(o.bytes());break}case 3:{c.connection=Fo.codec().decode(o);break}default:{o.skipType(u&7);break}}}return c},function*(o,i,a,c={}){let l={multiaddrs:0},u=i==null?o.len:o.pos+i;for(;o.pos<u;){let d=o.uint32();switch(d>>>3){case 1:{yield{field:`${a}.id`,value:o.bytes()};break}case 2:{if(c.limits?.multiaddrs!=null&&l.multiaddrs===c.limits.multiaddrs)throw new fe('Streaming decode error - repeated field "multiaddrs" had too many elements');yield{field:`${a}.multiaddrs[]`,index:l.multiaddrs,value:o.bytes()},l.multiaddrs++;break}case 3:{yield{field:`${a}.connection`,value:Fo.codec().decode(o)};break}default:{o.skipType(d&7);break}}}})),e);function t(o){return te(o,r.codec())}r.encode=t;function n(o,i){return ee(o,r.codec(),i)}r.decode=n;function s(o,i){return re(o,r.codec(),i)}r.stream=s})(Ts||(Ts={}));var Is;(function(r){let e;r.codec=()=>(e==null&&(e=ne((o,i,a={})=>{if(a.lengthDelimited!==!1&&i.fork(),o.type!=null&&Ch[o.type]!==0&&(i.uint32(8),Ee.codec().encode(o.type,i)),o.clusterLevel!=null&&(i.uint32(80),i.int32(o.clusterLevel)),o.key!=null&&(i.uint32(18),i.bytes(o.key)),o.record!=null&&(i.uint32(26),i.bytes(o.record)),o.closer!=null&&o.closer.length>0)for(let c of o.closer)i.uint32(66),Ts.codec().encode(c,i);if(o.providers!=null&&o.providers.length>0)for(let c of o.providers)i.uint32(74),Ts.codec().encode(c,i);a.lengthDelimited!==!1&&i.ldelim()},(o,i,a={})=>{let c={type:Ee.PUT_VALUE,closer:[],providers:[]},l=i==null?o.len:o.pos+i;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{c.type=Ee.codec().decode(o);break}case 10:{c.clusterLevel=o.int32();break}case 2:{c.key=o.bytes();break}case 3:{c.record=o.bytes();break}case 8:{if(a.limits?.closer!=null&&c.closer.length===a.limits.closer)throw new fe('Decode error - repeated field "closer" had too many elements');c.closer.push(Ts.codec().decode(o,o.uint32(),{limits:a.limits?.closer$}));break}case 9:{if(a.limits?.providers!=null&&c.providers.length===a.limits.providers)throw new fe('Decode error - repeated field "providers" had too many elements');c.providers.push(Ts.codec().decode(o,o.uint32(),{limits:a.limits?.providers$}));break}default:{o.skipType(u&7);break}}}return c},function*(o,i,a,c={}){let l={closer:0,providers:0},u=i==null?o.len:o.pos+i;for(;o.pos<u;){let d=o.uint32();switch(d>>>3){case 1:{yield{field:`${a}.type`,value:Ee.codec().decode(o)};break}case 10:{yield{field:`${a}.clusterLevel`,value:o.int32()};break}case 2:{yield{field:`${a}.key`,value:o.bytes()};break}case 3:{yield{field:`${a}.record`,value:o.bytes()};break}case 8:{if(c.limits?.closer!=null&&l.closer===c.limits.closer)throw new fe('Streaming decode error - repeated field "closer" had too many elements');for(let f of Ts.codec().stream(o,o.uint32(),`${a}.closer[]`,{limits:c.limits?.closer$}))yield{...f,index:l.closer};l.closer++;break}case 9:{if(c.limits?.providers!=null&&l.providers===c.limits.providers)throw new fe('Streaming decode error - repeated field "providers" had too many elements');for(let f of Ts.codec().stream(o,o.uint32(),`${a}.providers[]`,{limits:c.limits?.providers$}))yield{...f,index:l.providers};l.providers++;break}default:{o.skipType(d&7);break}}}})),e);function t(o){return te(o,r.codec())}r.encode=t;function n(o,i){return ee(o,r.codec(),i)}r.decode=n;function s(o,i){return re(o,r.codec(),i)}r.stream=s})(Is||(Is={}));function Q3(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 vl(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 _h(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function Ur(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function X3(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function Sl(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function Z3(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function _w(r,e={}){let t={...r,name:"PATH_ENDED",type:8};return e.onProgress?.(new CustomEvent("kad-dht:query:path-ended",{detail:t})),t}async function Rw(r,e,t){if(t.length===0)throw new E("No records given");let s=k(e).split("/");if(s.length<3)throw new E("Record key does not have a selector function");let o=r[s[1].toString()];if(o==null)throw new Ih(`No selector function configured for key type "${s[1]}"`);return t.length===1?0:o(e,t)}function GC(r,e){return 0}var Pw={pk:GC};async function sa(r,e,t){let n=e.key,o=k(n).split("/");if(o.length<3)throw new E("Record key is missing a namespace");let i=r[o[1].toString()];if(i==null)throw new E(`No validator available for key type "${o[1]}"`);await i(n,e.value,t)}var WC=async(r,e,t)=>{if(!(r instanceof Uint8Array))throw new E('"key" must be a Uint8Array');if(r.byteLength<5)throw new E("Invalid public key record");if(k(r.subarray(0,4))!=="/pk/")throw new E("key was not prefixed with /pk/");let s=Xe(e),o=r.slice(4);if(!Y(o,s.toMultihash().bytes))throw new E("public key does not match passed in key")},Lw={pk:WC};var jC=C("/pk/");function kw(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>!We(e))}}async function Cs(r,e){let t=await at.digest(r);return e?.signal?.throwIfAborted(),t.digest}async function zt(r,e){return Cs(r.toMultihash().bytes,e)}function _s(r,e){return new St(`${r}/${k(e,"base32")}`,!1)}function Dw(r){return Le([jC,r.toMultihash().bytes])}function Nw(r){return k(r.subarray(0,4))==="/pk/"}function Ow(r){let e=Se(r.subarray(4));return Ge(e)}function J3(r,e){let t=new Date;return new gt(r,e,t).serialize()}function Rh(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:ie.createV1(Wl,Se(C(n,"base32"))),peerId:Be(t)}}function Ph(r,e,t){let n=typeof e=="string"?e:k(e.multihash.bytes,"base32"),s=[r,n];return t!=null&&s.push(t.toString()),new St(s.join("/"))}function Lh(r){return new Date(vr(r))}function $o(r,e,t){return async function*(...n){let s=e.queryTime?.timer(t),o=e.errorTime?.timer(t),i=!1;try{e.queries?.increment({[t]:!0}),yield*r(...n)}catch(a){throw i=!0,o?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),i||s?.()}}}function kh(r,e,t){return async function(...n){let s=e?.queryTime?.timer(t),o=e?.errorTime?.timer(t),i=!1;try{return e.queries?.increment({[t]:!0}),await r(...n)}catch(a){throw i=!0,o?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),i||s?.()}}}var Dh=class{log;components;validators;selectors;peerRouting;queryManager;network;datastorePrefix;constructor(e,t){let{validators:n,selectors:s,peerRouting:o,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=s,this.peerRouting=o,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=_s(this.datastorePrefix,e);this.log("fetching record for key %k",n);let s=await this.components.datastore.get(n,t);this.log("found %k in local datastore",n);let o=gt.deserialize(s);return await sa(this.validators,o,t),o}async*sendCorrectionRecord(e,t,n,s){this.log("sendCorrection for %b",e);let o=J3(e,n);for(let{value:i,from:a}of t){if(Y(i,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let u=_s(this.datastorePrefix,e);this.log(`Storing corrected record for key ${u.toString()}`),await this.components.datastore.put(u,o.subarray(),s)}catch(u){this.log.error("failed error correcting self - %e",u)}continue}let c=!1,l={type:Ee.PUT_VALUE,key:e,record:o};for await(let u of this.network.sendRequest(a,l,s))u.name==="PEER_RESPONSE"&&u.record!=null&&Y(u.record.value,gt.deserialize(o).value)&&(c=!0),yield u;if(!c)throw new As("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 s=J3(e,t),o=_s(this.datastorePrefix,e);this.log(`storing record for key ${o.toString()}`),await this.components.datastore.put(o,s.subarray(),n),yield*fc(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),i=>kr(i,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:Ee.PUT_VALUE,key:e,record:s};this.log("send put to %p",a.peer.id);for await(let u of this.network.sendRequest(a.peer.id,l,{...n,path:a.path}))c.push(u),u.name==="PEER_RESPONSE"&&(u.record!=null&&Y(u.record.value,gt.deserialize(s).value)||c.push(Ur({from:a.peer.id,error:new As("Value not put correctly"),path:u.path},n)));return c}),i=>Rn(i,{ordered:!1,concurrency:Ss}),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 s=n.map(a=>a.value),o=0;try{o=await Rw(this.selectors,e,s)}catch(a){if(a.name!=="InvalidParametersError")throw a}let i=s[o];if(this.log("GetValue %b %b",e,i),i==null)throw new ke("Best value was not found");yield*this.sendCorrectionRecord(e,n,i,{...t,path:{index:-1,queued:0,running:0,total:0}}),yield n[o]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let o=await this.getLocal(e,t);yield Sl({value:o.value,from:this.components.peerId,path:{index:-1,running:0,queued:0,total:0}},t)}catch(o){this.log("error getting local value for %b",e,o)}let n=this,s=async function*({peer:o,signal:i,path:a}){for await(let c of n.peerRouting.getValueOrPeers(o.id,e,{...t,signal:i,path:a}))yield c,c.name==="PEER_RESPONSE"&&c.record!=null&&(yield Sl({from:o.id,value:c.record.value,path:a},t))};yield*this.queryManager.run(e,s,t)}};function Bw(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function Al(r){if(r.id==null)throw new Error("Invalid peer in message");let e=Se(r.id);return{id:Ge(e),multiaddrs:(r.multiaddrs??[]).map(t=>F(t))}}var Nh=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:s,queryManager:o,routingTable:i,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=s,this.queryManager=o,this.routingTable=i,this.providers=a,this.findProviders=e.metrics?.traceFunction("libp2p.kadDHT.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PROVIDER"&&(u.providers??=[],u.providers.push(...l.providers.map(d=>d.id.toString()))),u)})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.kadDHT.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PEER_RESPONSE"&&l.messageName==="ADD_PROVIDER"&&(u.providers??=[],u.providers.push(l.from.toString())),u)})??this.provide}async*provide(e,t,n={}){this.log("provide %s",e);let s=e.multihash.bytes;await this.providers.addProvider(e,this.components.peerId,n);let o={type:Ee.ADD_PROVIDER,key:s,providers:[Bw({id:this.components.peerId,multiaddrs:t})]},i=0,a=this;async function*c(d){try{a.log("sending provider record for %s to %p",e,d.peer.id);for await(let f of a.network.sendMessage(d.peer.id,o,{...n,path:d.path}))f.name==="PEER_RESPONSE"&&(a.log("sent provider record for %s to %p",e,d.peer.id),i++),yield f}catch(f){a.log.error("error sending provide record to peer %p - %e",d.peer.id,f),yield Ur({from:d.peer.id,error:f,path:d.path},n)}}let l=Pt({objectMode:!0}),u=new $t({concurrency:Ss});u.addEventListener("idle",()=>{l.end()}),u.addEventListener("failure",d=>{this.log.error("error publishing provider record to peer - %e",d.detail.error)}),u.add(async()=>{let d=[];for await(let f of this.peerRouting.getClosestPeers(s,n))l.push(f),f.name==="FINAL_PEER"&&d.push(f);d.forEach(f=>{u.add(async()=>{for await(let h of c(f))l.push(h)}).catch(h=>{this.log.error("error publishing provider record to peer - %e",h)})})}).catch(d=>{l.end(d)}),yield*l,this.log("sent provider records to %d peers",i)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,s=0,o=e.multihash.bytes,i=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e,t);if(a.length>0){let u=[];for(let d of a.slice(0,n))try{let f=await this.components.peerStore.get(d,t);u.push({id:d,multiaddrs:f.addresses.map(({multiaddr:h})=>h)})}catch(f){if(f.name!=="NotFoundError")throw f;this.log("no peer store entry for %p",d)}if(yield vl({from:this.components.peerId,messageType:Ee.GET_PROVIDERS,providers:u,path:{index:-1,queued:0,running:0,total:0}},t),yield X3({from:this.components.peerId,providers:u,path:{index:-1,queued:0,running:0,total:0}},t),s+=u.length,s>=n)return}let c=async function*({peer:u,signal:d,path:f}){let h={type:Ee.GET_PROVIDERS,key:o};yield*i.network.sendRequest(u.id,h,{...t,signal:d,path:f})},l=new er(a);for await(let u of this.queryManager.run(o,c,t))if(yield u,u.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",u.providers.length,e,u.closer.length);let d=[];for(let f of u.providers)l.has(f.id)||(l.add(f.id),d.push(f));if(d.length>0&&(yield X3({from:u.from,providers:d,path:u.path},t),s+=d.length,s>=n))return}}};var Oh=class extends oe{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 Lr({...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,s],o){return{...o,to:n.toString(),"message type":`${s.type}`}},getAttributesFromYieldedValue:(n,s)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((o,i)=>{s[`providers-${i}`]=o.id.toString()}),n.closer.length>0&&n.closer.forEach((o,i)=>{s[`closer-${i}`]=o.id.toString()})),s)})??this.sendRequest,this.sendMessage=e.metrics?.traceFunction("libp2p.kadDHT.sendMessage",this.sendMessage.bind(this),{optionsIndex:2,getAttributesFromArgs([n,s],o){return{...o,to:n.toString(),"message type":`${s.type}`}},getAttributesFromYieldedValue:(n,s)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((o,i)=>{s[`providers-${i}`]=o.id.toString()}),n.closer.length>0&&n.closer.forEach((o,i)=>{s[`closer-${i}`]=o.id.toString()})),s)})??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 s=t.type;if(s==null)throw new E("Message type was missing");let o,i=this.timeout.getTimeoutSignal(n);n={...n,signal:i};try{this.metrics.operations?.increment({[s]:!0}),this.log("dialling %p",e),yield Z3({peer:e,path:n.path},n),o=await this.components.connectionManager.openStream(e,this.protocol,n),this.log("sending %s to %p",t.type,e),yield Q3({to:e,type:s,path:n.path},n);let a=await this._writeReadMessage(o,t,n);o.close(n).catch(c=>{this.log.error("error closing stream to %p - %e",e,c),o?.abort(c)}),yield vl({from:e,messageType:a.type,closer:a.closer.map(Al),providers:a.providers.map(Al),record:a.record==null?void 0:gt.deserialize(a.record),path:n.path},n)}catch(a){this.metrics.errors?.increment({[s]:!0}),o?.abort(a),n.signal?.aborted!==!0&&this.log.error("could not send %s to %p - %e",t.type,e,a),yield Ur({from:e,error:a,path:n.path},n)}finally{this.timeout.cleanUp(i)}}async*sendMessage(e,t,n){if(!this.running)return;let s=t.type;if(s==null)throw new E("Message type was missing");let o,i=this.timeout.getTimeoutSignal(n);n={...n,signal:i};try{this.metrics.operations?.increment({[s]:!0}),this.log("dialling %p",e),yield Z3({peer:e,path:n.path},n),o=await this.components.connectionManager.openStream(e,this.protocol,n),this.log("sending %s to %p",t.type,e),yield Q3({to:e,type:s,path:n.path},n),await this._writeMessage(o,t,n),o.close(n).catch(a=>{this.log.error("error closing stream to %p - %e",e,a),o?.abort(a)}),yield vl({from:e,messageType:s,path:n.path},n)}catch(a){this.metrics.errors?.increment({[s]:!0}),o?.abort(a),yield Ur({from:e,error:a,path:n.path},n)}finally{this.timeout.cleanUp(i)}}async _writeMessage(e,t,n){await Ne(e).write(t,Is,n)}async _writeReadMessage(e,t,n){let s=Ne(e);await s.write(t,Is,n);let o=await s.read(Is,n);return o.closer.forEach(i=>{this.safeDispatchEvent("peer",{detail:Al(i)})}),o.providers.forEach(i=>{this.safeDispatchEvent("peer",{detail:Al(i)})}),o}};var Rs=class{originDhtKey;capacity;peerDistances;constructor(e,t){this.originDhtKey=e,this.capacity=t,this.peerDistances=[]}get length(){return this.peerDistances.length}get peers(){return[...this.peerDistances]}async add(e,t={index:-1,queued:0,running:0,total:0},n){let s=await zt(e.id,n);this.addWithKadId(e,s,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 s={peer:e,distance:_r(this.originDhtKey,t),path:n};if(this.peerDistances.length===this.capacity){let i=this.peerDistances[this.peerDistances.length-1];if(i!=null&&ss(s.distance,i.distance)!==-1)return}let o=!1;for(let i=0;i<this.peerDistances.length;i++){let a=ss(this.peerDistances[i].distance,s.distance);if(a===0||a===1){o=!0,this.peerDistances.splice(i,0,s);break}}o||this.peerDistances.push(s),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e,t){if(this.length===0)return!0;let n=await zt(e,t),s=_r(n,this.originDhtKey),o=this.peerDistances[this.peerDistances.length-1].distance;return ss(s,o)===-1}async anyCloser(e,t){return e.length===0?!1:Promise.any(e.map(async n=>this.isCloser(n,t)))}};var Bh=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,s=await this.routingTable.find(e,t);if(s!=null){this.log("findPeerLocal found %p in routing table",e);try{n=await this.components.peerStore.get(s,t)}catch(o){if(o.name!=="NotFoundError")throw o}}if(n==null)try{n=await this.components.peerStore.get(e,t)}catch(o){if(o.name!=="NotFoundError")throw o}if(n!=null)return this.log("findPeerLocal found %p in peer store",e),{id:n.id,multiaddrs:n.addresses.map(o=>o.multiaddr)}}async*_getValueSingle(e,t,n){let s={type:Ee.GET_VALUE,key:t};yield*this.network.sendRequest(e,s,n)}async*getPublicKeyFromNode(e,t={}){let n=Dw(e),s={index:-1,queued:0,running:0,total:0};for await(let o of this._getValueSingle(e,n,{...t,path:s}))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let i=Xe(o.record.value),a=Wr(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 Sl({from:e,value:o.record.value,path:s},t)}throw new As(`Node not responding with its public key: ${e.toString()}`)}async*findPeer(e,t={}){if(this.log("findPeer %p",e),t.useCache!==!1){let s=await this.findPeerLocal(e,t);if(s!=null){this.log("found local"),yield _h({from:this.components.peerId,peer:s,path:{index:-1,queued:0,running:0,total:0}},t);return}}let n=!1;if(t.useNetwork!==!1){let s=this,o=async function*({peer:i,signal:a,path:c}){let l={type:Ee.FIND_NODE,key:e.toMultihash().bytes};for await(let u of s.network.sendRequest(i.id,l,{...t,signal:a,path:c}))if(yield u,u.name==="PEER_RESPONSE"){let d=u.closer.find(f=>f.id.equals(e));d!=null&&(yield _h({from:u.from,peer:d,path:u.path},t))}};for await(let i of this.queryManager.run(e.toMultihash().bytes,o,t))i.name==="FINAL_PEER"&&(n=!0),yield i}if(!n)throw new ke("Not found")}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await Cs(e,t),s=new Rs(n,this.routingTable.kBucketSize),o=this,i=async function*({peer:a,path:c,peerKadId:l,signal:u}){o.log("getClosestPeers asking %p",a.id);let d={type:Ee.FIND_NODE,key:e};yield*o.network.sendRequest(a.id,d,{...t,signal:u,path:c}),s.addWithKadId(a,l,c)};yield*this.queryManager.run(e,i,t),this.log("found %d peers close to %b",s.length,e);for(let{peer:a,path:c}of s.peers)yield _h({from:this.components.peerId,peer:a,path:{index:c.index,queued:0,running:0,total:0}},t)}async*getValueOrPeers(e,t,n){for await(let s of this._getValueSingle(e,t,n)){if(s.name==="PEER_RESPONSE"&&s.record!=null)try{await this._verifyRecordOnline(s.record,n)}catch{let i="invalid record received, discarded";this.log(i),yield Ur({from:s.from,error:new As(i),path:n.path},n);continue}yield s}}async _verifyRecordOnline(e,t){if(e.timeReceived==null)throw new Th("invalid record received");await sa(this.validators,new gt(e.key,e.value,e.timeReceived),t)}async getClosestPeersOffline(e,t){let n=[];try{let i=Se(e),a=Ge(i),c=await this.components.peerStore.get(a,t);n.push({id:c.id,multiaddrs:c.addresses.map(({multiaddr:l})=>l)})}catch{}let s=await Cs(e,t),o=this.routingTable.closestPeers(s,t);for(let i of o)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 Mh=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 s=Ph(this.datastorePrefix,e,t);this.log.trace("%p no longer provides %s",t,e),await this.datastore.delete(s,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 s=Ph(this.datastorePrefix,e,t),o=Mt(n?.time?.getTime()??Date.now());await this.datastore.put(s,o,n)}async loadProviders(e,t){let n=new xt,s=Ph(this.datastorePrefix,e);for await(let o of this.datastore.query({prefix:s.toString()},t)){let{peerId:i}=Rh(o.key);n.set(i,Lh(o.value))}return n}};var QC=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 XC(r,e,t){let n,s=new Promise((o,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:u}=QC(r),d=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(y){n(),i(y);return}c.push(p),t.count===c.length&&(n(),o(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)u(h,d);for(let h of t.rejectionEvents)a.includes(h)||u(h,f)};for(let h of a)l(h,d);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&o(c)});if(s.cancel=n,typeof t.timeout=="number"){let o=Lt(s,{milliseconds:t.timeout});return o.cancel=()=>{n(),o.clear()},o}return s}function Mw(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=XC(r,e,t),s=n.then(o=>o[0]);return s.cancel=n.cancel,s}async function*Uw(r){let{key:e,startingPeers:t,ourPeerId:n,query:s,alpha:o,path:i,numPaths:a,log:c,peersSeen:l,connectionManager:u,signal:d}=r,f=Pt({objectMode:!0}),h=new $t({concurrency:o,sort:(y,m)=>ss(y.options.distance,m.options.distance)});h.addEventListener("idle",()=>{f.push(_w({path:{index:i,queued:h.queued,running:h.running,total:h.size}},r)),f.end()}),h.addEventListener("failure",y=>{c.error("error during query - %e",y.detail.error)});let p=()=>{h.abort(),f.end(new Wt)};d.addEventListener("abort",p);try{let m=function(g,w){if(g==null)return;l.add(g.id.toMultihash().bytes);let v=_r(w,y);h.add(async()=>{try{for await(let _ of s({...r,key:e,peer:g,path:{index:i,queued:h.queued,running:h.running,total:h.size},numPaths:a,peerKadId:w,signal:d})){if(_.name==="PEER_RESPONSE")for(let P of _.closer){if(l.has(P.id.toMultihash().bytes)){c("already seen %p in query",P.id);continue}if(n.equals(P.id)){c("not querying ourselves");continue}let D=await zt(P.id,{signal:d}),B=_r(D,y);if(ss(B,v)!==-1){c("skipping %p as they are not closer to %b than %p",P.id,e,g.id);continue}if(!await u.isDialable(P.multiaddrs,{signal:d})){c("not querying undialable peer");continue}c("querying closer peer %p",P.id),m(P,D)}f.push({..._,path:{index:i,queued:h.queued,running:h.running,total:h.size}})}}catch(_){f.push(Ur({from:g.id,error:_,path:{index:i,queued:h.queued,running:h.running-1,total:h.size-1}},r))}},{distance:v}).catch(_=>{c.error("error during query - %e",_)})},y=await Cs(e,{signal:d});await Promise.all(t.map(async g=>{m({id:g,multiaddrs:[]},await zt(g,{signal:d}))})),yield*f}finally{d.removeEventListener("abort",p)}}var Uh=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;allowQueryWithZeroPeers;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??Ah,this.alpha=t.alpha??Ss,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(Aw);n={...n,signal:c}}let s=new AbortController,o=me([this.shutDownController.signal,s.signal,n.signal]);s.signal;let i=this.logger.forComponent(`${this.logPrefix}:query:`+k(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 Mw(this.routingTable,"peer:add",{signal:o,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 De(this.initialQuerySelfHasRun.promise,o),this.initialQuerySelfHasRun=void 0),i("query:start");let c=await Cs(e,{signal:o}),l=this.routingTable.closestPeers(c,{count:this.routingTable.kBucketSize}),u=l.sort(()=>Math.random()>.5?1:-1).reduce((h,p,y)=>(h[y%this.disjointPaths].push(p),h),new Array(this.disjointPaths).fill(0).map(()=>[])).filter(h=>h.length>0);if(l.length===0){i.error("running query with no peers");return}let d=Ft(1024),f=u.map((h,p)=>Uw({...n,key:e,startingPeers:h,ourPeerId:this.peerId,signal:o,query:t,path:p,numPaths:u.length,alpha:this.alpha,log:i,peersSeen:d,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let h of In(...f))h.name==="QUERY_ERROR"&&i.error("query error - %e",h.error),h.name==="PEER_RESPONSE"&&this.routingTable.queueRoutingTableUpdate(h.from),o.throwIfAborted(),yield h;a=!0}catch(c){if(this.running)throw c}finally{a||(i("query exited early"),s.abort()),o.clear(),i("query finished")}}};function ZC(r){return r[Symbol.asyncIterator]!=null}function JC(r){if(ZC(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 Fh=JC;var $h=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??Ah,this.interval=t.interval??bw,this.initialInterval=t.initialInterval??Ew,this.queryTimeout=t.queryTimeout??xw,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=kh(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=qe(),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=me(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(),s=await fc(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),i=>Ac(i,this.count),async i=>Fh(i));t?.throwIfAborted();let o=Date.now()-n;this.log("self-query found %d peers in %dms",s,o),this.events.dispatchEvent(new CustomEvent("kad-dht:query:self",{detail:{peers:s,duration:o}}))}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 Kh=class extends oe{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 $t({concurrency:t.concurrency??mw,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new Lr({...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??pw,this.maxQueueSize=t.maxQueueSize??gw,this.validity=t.validity??Sh,this.interval=t.interval??yw,this.contentRouting=t.contentRouting,this.running=!1,this.reprovide=kh(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(W3)}).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:s}=Rh(t.key),i=Lh(t.value).getTime()+this.validity,a=Date.now(),c=a>i,l=this.peerId.equals(s);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(u=>{this.log.error("could not reprovide %c - %e",n,u)}))}catch(n){this.log.error("error processing datastore key %s - %s",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{this.safeDispatchEvent("reprovide:end"),this.running&&(this.log("queuing next re-provide/cleanup run in %d ms",this.interval),this.timeout=setTimeout(()=>{this.processRecords({signal:AbortSignal.timeout(W3)}).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(s=>s.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 s=>{if(s.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let o=this.reprovideTimeout.getTimeoutSignal(s);try{await this.reprovide(s.cid,s)}finally{this.reprovideTimeout.cleanUp(o)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(s=>{this.log.error("could not re-provide key %c - %e",e,s)})}async reprovide(e,t){await Xr(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var e_=20,t_=5e3,r_="kad-close",n_=50,Vh=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??t_,this.peerSetSize=t.peerSetSize??e_,this.closeTagName=t.closeTagName??r_,this.closeTagValue=t.closeTagValue??n_,this.closestPeers=new er,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await zt(this.components.peerId);this.newPeers=new Rs(e,this.peerSetSize),this.routingTable.addEventListener("peer:ping",this.onPeerPing),this.timeout=setInterval(()=>{this.updatePeerTags().catch(t=>{this.log.error("error updating peer tags - %e",t)})},this.refreshInterval)}stop(){this.running=!1,this.routingTable.removeEventListener("peer:ping",this.onPeerPing),clearTimeout(this.timeout)}onPeerPing(e){this.newPeers?.add({id:e.detail,multiaddrs:[]}).catch(t=>{this.log.error("error adding peer to distance list - %e",t)})}async updatePeerTags(){let e=new er(this.newPeers?.peers.map(({peer:s})=>s.id)),t=e.difference(this.closestPeers),n=this.closestPeers.difference(e);this.closestPeers=e,await Promise.all([...[...t].map(async s=>{await this.components.peerStore.merge(s,{tags:{[this.closeTagName]:{value:this.closeTagValue},[j3]:{value:1}}})}),...[...n].map(async s=>{await this.components.peerStore.merge(s,{tags:{[this.closeTagName]:void 0,[j3]:void 0}})})])}};function Tl(r){return Array.isArray(r?.peers)}var Hh=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??Fw,this.kBucketSize=t.kBucketSize??Il,this.splitThreshold=t.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=t.numberOfOldContactsToPing??$w,this.lastPingThreshold=t.lastPingThreshold??Kw,this.ping=t.ping,this.verify=t.verify,this.onAdd=t.onAdd,this.onRemove=t.onRemove,this.addingPeerMap=gc({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 zt(e,t),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await zt(e,t),lastPing:0},s=this.addingPeerMap.get(e);if(s!=null)return s;try{let o=this._add(n,t);this.addingPeerMap.set(e,o),await o}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(!o_(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 s=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),o=!1;for await(let i of this.ping(s,t))o=!0,await this.remove(i.kadId,t);o&&await this._add(e,t)}*closest(e,t){let n=new Rs(e,t?.count??this.kBucketSize);for(let s of this.toIterable())t?.exclude?.some(o=>o.equals(s.peerId))!==!0&&n.addWithKadId({id:s.peerId,multiaddrs:[]},s.kadId);yield*kr(n.peers,({peer:s})=>s.id)}count(){function e(t){if(Tl(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),s=this._indexOf(n,e);if(s>-1){let o=n.peers.splice(s,1)[0];await this.onRemove?.(o,n,t)}}*toIterable(){function*e(t){if(Tl(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+k(_r(e,t),"base16"))}_determineBucket(e){let t=k(e,"base2");function n(s,o=0){return Tl(s)?s:t[o]==="0"?n(s.left,o+1):n(s.right,o+1)}return n(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>Y(n.kadId,t))}async _split(e,t){let n={prefix:"0",depth:e.depth+1,peers:[]},s={prefix:"1",depth:e.depth+1,peers:[]};for(let o of e.peers)k(o.kadId,"base2")[e.depth]==="0"?(n.peers.push(o),await this.onMove?.(o,e,n,t)):(s.peers.push(o),await this.onMove?.(o,e,s,t));s_(e,n,s)}};function s_(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function o_(r,e){return r.lastPing<Date.now()-e}var Il=20,Fw=6;var i_=20,a_=100,c_=16,l_=16384,$w=3;var u_=20,d_=100,Vw="kad-peer",f_=1,Kw=6e5,h_=!0,p_=1e3,qh=class extends oe{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;routingTableUpdateQueue;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??Il,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??Vw,this.peerTagValue=t.peerTagValue??f_,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??h_,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??p_,this.shutdownController=new AbortController,this.shutdownController.signal,this.routingTableUpdateQueue=new Kt({concurrency:t.routingTableUpdateQueueConcurrency??c_,metricName:`${t.metricsPrefix}_routing_table_update_queue`,metrics:this.components.metrics,maxSize:t.routingTableUpdateMaxQueueSize??l_}),this.pingOldContactQueue=new Kt({concurrency:t.pingOldContactConcurrency??u_,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??d_}),this.pingOldContactTimeout=new Lr({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new Kt({concurrency:t.pingNewContactConcurrency??i_,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??a_}),this.pingNewContactTimeout=new Lr({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new Hh(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 Vh(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 yr(this.closestPeerTagger,this.kb))}async afterStart(){let e=0;Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let t=me([this.shutdownController.signal,AbortSignal.timeout(2e4)]);try{for(let n of await this.components.peerStore.all({filters:[s=>s.protocols.includes(this.protocol)&&s.tags.has(Vw)],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 Vr(this.closestPeerTagger,this.kb),this.routingTableUpdateQueue.abort(),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort(),this.shutdownController.abort()}queueRoutingTableUpdate(e,t={}){let n=this.routingTableUpdateQueue.find(e);if(n!=null){n.join(t).catch(()=>{});return}this.routingTableUpdateQueue.add(async s=>{let o=s,i;t.activeTimeout!=null&&(i=me([s.signal,AbortSignal.timeout(t.activeTimeout)]),o={...s,signal:i});try{await this.add(e,o)}finally{i?.clear()}},{peerId:e,signal:this.shutdownController.signal}).catch(s=>{this.shutdownController.signal.aborted||s?.name==="AbortError"||this.log.error("could not update routing table for peer %p - %e",e,s)})}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 s of e){if(this.kb.get(s.kadId)==null){this.log("asked to ping contact %p that was not in routing table",s.peerId);continue}this.metrics?.kadBucketEvents.increment({ping_old_contact:!0}),n.push(async()=>{let o=this.pingOldContactQueue.find(s.peerId);if(o!=null)return this.log("asked to ping contact %p was already being pinged",s.peerId),await o.join(t)?void 0:s;if(!await this.pingOldContactQueue.add(async a=>{let c=this.pingOldContactTimeout.getTimeoutSignal(),l=me([c,this.shutdownController.signal,a?.signal]);try{return await this.pingContact(s,a)}catch{return this.metrics?.kadBucketEvents.increment({ping_old_contact_error:!0}),!0}finally{this.pingOldContactTimeout.cleanUp(c),l.clear()}},{peerId:s.peerId,signal:t?.signal}))return s})}for await(let s of Rn(n))s!=null&&(yield s)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),s=me([n,this.shutdownController.signal,t?.signal]);try{let o=this.pingNewContactQueue.find(e.peerId);return o!=null?(this.log("joining existing ping to add new peer %p to routing table",e.peerId),await o.join({signal:s})):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:s})}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),s.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(s){return this.log("error pinging old contact %p - %e",e.peerId,s),n?.abort(s),!1}}get size(){return this.kb==null?0:this.kb.count()}async find(e,t){let n=await zt(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 zt(e,t);await this.kb.remove(n,t)}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0,s=20,o=0;function i(a){if(Tl(a)){a.depth>n&&(n=a.depth),t++,e+=a.peers.length,a.peers.length<s&&(s=a.peers.length),a.peers.length>o&&(o=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(s),this.metrics.routingTableKadBucketMaxOccupancy.update(o),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var Hw=[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 zh=15,Gh=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:s,refreshInterval:o,refreshQueryTimeout:i,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=s,this.refreshInterval=o??vw,this.refreshQueryTimeout=i??Sw,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(),s=this._getTrackedCommonPrefixLengthsForRefresh(n);this.log(`max common prefix length ${n}`),this.log(`tracked CPLs [ ${s.map(o=>o.toISOString()).join(", ")} ]`),Promise.all(s.map(async(o,i)=>{try{if(await this._refreshCommonPrefixLength(i,o,e,t),this._numPeersForCpl(n)===0){let a=Math.min(2*(i+1),s.length-1);for(let c=i+1;c<a+1;c++)try{await this._refreshCommonPrefixLength(c,o,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(o=>{this.log.error("failed to refresh table - %e",o)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(o=>{this.log.error("failed to set refresh timeout - %e",o)})}async _refreshCommonPrefixLength(e,t,n,s){if(!n&&t.getTime()>Date.now()-this.refreshInterval){this.log("not running refresh for cpl %s as time since last refresh not above interval",e);return}let o=this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,o,this.routingTable.size);let i=me([s?.signal,AbortSignal.timeout(this.refreshQueryTimeout)]);try{let a=await Fh(this.peerRouting.getClosestPeers(o.toMultihash().bytes,{signal:i}));this.log(`found ${a} peers that were close to imaginary peer %p`,o),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,o,this.routingTable.size)}finally{i.clear()}}_getTrackedCommonPrefixLengthsForRefresh(e){e>zh&&(e=zh);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=crypto.getRandomValues(new Uint8Array(2)),n=(t[1]<<8)+t[0],s=this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),o=Se(s);return Ge(o)}_makePeerId(e,t,n){if(n>zh)throw new Error(`Cannot generate peer ID for common prefix length greater than ${zh}`);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=Hw[c],u=new ArrayBuffer(34),d=new DataView(u,0,u.byteLength);return d.setUint8(0,at.code),d.setUint8(1,32),d.setUint32(2,l,!1),new Uint8Array(d.buffer,d.byteOffset,d.byteLength)}_maxCommonPrefix(){let e=0;for(let t of this._prefixLengths())t>e&&(e=t);return e}_numPeersForCpl(e){let t=0;for(let n of this._prefixLengths())n===e&&t++;return t}*_prefixLengths(){if(this.routingTable.kb?.localPeer!=null)for(let{kadId:e}of this.routingTable.kb.toIterable()){let t=_r(this.routingTable.kb.localPeer.kadId,e),n=0;for(let s of t)if(s===0)n++;else break;yield n}}};var Wh=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 se("Missing key");let n;try{n=ie.decode(t.key)}catch{throw new se("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 s=>{let o=Se(s.id),i=Ge(o),a=s.multiaddrs.map(c=>F(c));if(!e.equals(i)){this.log("invalid provider peer %p from %p",s.id,e);return}if(s.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 jh=class{peerRouting;peerInfoMapper;peerId;addressManager;log;constructor(e,t){let{peerRouting:n,logPrefix:s}=t;this.log=e.logger.forComponent(`${s}: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 se("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getClosestPeersOffline(t.key,{exclude:[e,this.peerId]});Y(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(o=>o.decapsulateCode(421))});let s={type:Ee.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:o})=>o.length).map(o=>({id:o.id.toMultihash().bytes,multiaddrs:o.multiaddrs.map(i=>i.bytes)})),providers:[]};return s.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",s.closer.length,t.key,e),s}catch(n){throw this.log("error during finding peers closer to %b for %p - %e",t.key,e,n),n}}};var Yh=class{peerId;peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:s,logPrefix:o}=t;this.log=e.logger.forComponent(`${o}:rpc:handlers:get-providers`),this.peerId=e.peerId,this.peerStore=e.peerStore,this.peerRouting=n,this.providers=s,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new se("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=ie.decode(t.key)}catch{throw new se("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[s,o]=await Promise.all([Ao(kr(await this.providers.getProviders(n),async a=>{let c=await this.peerStore.get(a);return{id:c.id,multiaddrs:c.addresses.map(({multiaddr:u})=>u)}})),this.peerRouting.getClosestPeersOffline(t.key)]),i={type:Ee.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer: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)})),providers: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)}))};return this.log("got %s providers %s closerPeers",i.providers.length,i.closer.length),i}async _getAddresses(e){return[]}};var Qh=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 se("Invalid key");let s={type:Ee.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(Nw(n)){this.log("is public key");let a=Ow(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new ke("No public key found in key book");c=tt(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),s.record=new gt(n,c,new Date).serialize(),s}let[o,i]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getClosestPeersOffline(n)]);return o!=null&&(this.log("had record for %b in local datastore",n),s.record=o.serialize()),i.length>0&&(this.log("had %s closer peers in routing table",i.length),s.closer=i.map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),s}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=_s(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(o){if(o.name==="NotFoundError")return;throw o}let s=gt.deserialize(n);if(s.timeReceived==null||Date.now()-s.timeReceived.getTime()>Sh){await this.datastore.delete(t);return}return s}};var Xh=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 Zh=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 se(`Empty record from: ${e}`);try{let s=gt.deserialize(t.record);await sa(this.validators,s),s.timeReceived=new Date;let o=_s(this.datastorePrefix,s.key);return await this.components.datastore.put(o,s.serialize().subarray()),this.log("accepted put for key %b under %k",n,o),t}catch(s){throw this.log("failed to accept put for key %b - %e",n,s),s}}};var Jh=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={[Ee.GET_VALUE.toString()]:new Qh(e,t),[Ee.PUT_VALUE.toString()]:new Zh(e,t),[Ee.FIND_NODE.toString()]:new jh(e,t),[Ee.ADD_PROVIDER.toString()]:new Wh(e,t),[Ee.GET_PROVIDERS.toString()]:new Yh(e,t),[Ee.PING.toString()]:new Xh(e,t)}}async handleMessage(e,t){let n=this.handlers[t.type];if(n==null)throw new se(`No handler found for message type: ${t.type}`);try{return this.metrics.operations?.increment({[t.type]:!0}),await n.handle(e,t)}catch(s){throw this.metrics.errors?.increment({[t.type]:!0}),s}}async onIncomingStream(e,t){let n=()=>{e.abort(new Kn)},s=AbortSignal.timeout(this.incomingMessageTimeout);s.addEventListener("abort",n);let o=Ne(e).pb(Is);for(;;){if(e.readStatus!=="readable"){await e.close({signal:s});break}let i=await o.read({signal:s}),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 u=await this.handleMessage(t.remotePeer,i);u!=null&&await o.write(u,{signal:s})}catch(u){l=!0,c?.(),this.log.error("error handling incoming message - %e",u),e.abort(u);return}finally{l||a?.()}s.removeEventListener("abort",n),s=AbortSignal.timeout(this.incomingMessageTimeout),s.addEventListener("abort",n)}}};var e0=class extends oe{log;components;protocol;running;registrarId;constructor(e,t){super();let{protocol:n,logPrefix:s}=t;this.components=e,this.log=e.logger.forComponent(`${s}: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 e4=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await Xr(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(s=>({...s,routing:"kad-dht"})))}async put(e,t,n){await Xr(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 ke("Could not find value for key")}},t4=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 ke("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},m_=32,g_=64,t0=class extends oe{k;a;d;protocol;routingTable;providers;network;peerRouting;validators;selectors;components;log;running;clientMode;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",s=t.datastorePrefix??"/dht",o=t.metricsPrefix??"libp2p_kad_dht",i={queries:e.metrics?.registerMetricGroup(`${o}_operations_total`,{label:"operation"}),errors:e.metrics?.registerCounterGroup(`${o}_operation_errors_total`,{label:"operation"}),queryTime:e.metrics?.registerMetricGroup(`${o}_operation_time_seconds`,{label:"operation"}),errorTime:e.metrics?.registerMetricGroup(`${o}_operation_error_time_seconds`,{label:"operation"})};this.running=!1,this.components=e,this.log=e.logger.forComponent(n),this.k=t.kBucketSize??Il,this.a=t.alpha??Ss,this.d=t.disjointPaths??this.a,this.protocol=t.protocol??hw,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??m_,this.maxOutboundStreams=t.maxOutboundStreams??g_,this.peerInfoMapper=t.peerInfoMapper??kw,this.onPeerConnectTimeout=t.onPeerConnectTimeout??ww,this.providers=new Mh(e,{...t.providers,logPrefix:n,datastorePrefix:s}),this.validators={...Lw,...t.validators},this.selectors={...Pw,...t.selectors},this.network=new Oh(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:o,timeout:t.networkDialTimeout}),this.routingTable=new qh(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:o,prefixLength:t.prefixLength,splitThreshold:t.kBucketSplitThreshold,network:this.network,routingTableUpdateQueueConcurrency:t.routingTableUpdateQueueConcurrency??Math.max(1,Math.min(this.a*2,16)),routingTableUpdateMaxQueueSize:t.routingTableUpdateMaxQueueSize});let a=qe();t.allowQueryWithZeroPeers===!0&&a.resolve(),this.queryManager=new Uh(e,{disjointPaths:this.d,alpha:this.a,logPrefix:n,metricsPrefix:o,initialQuerySelfHasRun:a,routingTable:this.routingTable,allowQueryWithZeroPeers:t.allowQueryWithZeroPeers}),this.peerRouting=new Bh(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new Dh(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:s}),this.contentRouting=new Nh(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new Gh(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new Jh(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:n,metricsPrefix:o,datastorePrefix:s,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new e0(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new $h(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:a,operationMetrics:i}),this.reprovider=new Kh(e,{...t.reprovide,logPrefix:n,metricsPrefix:o,datastorePrefix:s,contentRouting:this.contentRouting,operationMetrics:i}),this.network.addEventListener("peer",c=>{let l=c.detail;this.onPeerConnect(l).catch(u=>{this.log.error("could not add %p to routing table - %e",l.id,u)}),this.dispatchEvent(new CustomEvent("peer",{detail:l}))}),this.topologyListener.addEventListener("peer",c=>{let l=c.detail;Promise.resolve().then(async()=>{let u=await this.components.peerStore.get(l),d={id:l,multiaddrs:u.addresses.map(({multiaddr:f})=>f),protocols:u.protocols};await this.onPeerConnect(d)}).catch(u=>{this.log.error("could not add %p to routing table - %e",l,u)})}),this.dhtPeerRouting=new t4(this),this.dhtContentRouting=new e4(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",c=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let l=c.detail.peer.addresses.some(({multiaddr:d})=>!We(d)&&!st.exactMatch(d)),u=this.getMode();l&&u==="client"?await this.setMode("server"):u==="server"&&!l&&await this.setMode("client")}).catch(l=>{this.log.error("error setting dht server mode - %e",l)})}),this.get=$o(this.get.bind(this),i,"GET_VALUE"),this.findProviders=$o(this.findProviders.bind(this),i,"FIND_PROVIDERS"),this.findPeer=$o(this.findPeer.bind(this),i,"FIND_PEER"),this.getClosestPeers=$o(this.getClosestPeers.bind(this),i,"GET_CLOSEST_PEERS"),this.provide=$o(this.provide.bind(this),i,"PROVIDE"),this.put=$o(this.put.bind(this),i,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[ue]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery","@libp2p/kad-dht"];[jt]=["@libp2p/identify","@libp2p/ping"];get[Ds](){return this.dhtContentRouting}get[Us](){return this.dhtPeerRouting}get[Ms](){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(t=>t.toString()));return}this.routingTable.queueRoutingTableUpdate(e.id,{activeTimeout:this.onPeerConnectTimeout})}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 yr(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await yr(this.querySelf))}async stop(){this.running=!1,await Vr(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 qw;(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"})(qw||(qw={}));function zw(r={}){return e=>new t0(e,r)}var xe;(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"})(xe||(xe={}));var Cl=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),r4=Object.freeze({NEW_STREAM:xe.NEW_STREAM,MESSAGE:xe.MESSAGE_INITIATOR,CLOSE:xe.CLOSE_INITIATOR,RESET:xe.RESET_INITIATOR}),Gw=Object.freeze({MESSAGE:xe.MESSAGE_RECEIVER,CLOSE:xe.CLOSE_RECEIVER,RESET:xe.RESET_RECEIVER});var _l=1<<20,n4=4<<20,r0=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=_l,t=n4){this._buffer=new W,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 se("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:s,length:o,offset:i}=this._headerInfo;if(this._buffer.length-i<o)break;let c={id:n,type:s};(s===xe.NEW_STREAM||s===xe.MESSAGE_INITIATOR||s===xe.MESSAGE_RECEIVER)&&(c.data=this._buffer.sublist(i,i+o)),t.push(c),this._buffer.consume(i+o),this._headerInfo=null}return t}_decodeHeader(e){let{value:t,offset:n}=jw(e),{value:s,offset:o}=jw(e,n),i=t&7;if(Cl[i]==null)throw new Error(`Invalid type received: ${i}`);if(s>this._maxMessageSize)throw new se("Message size too large");return{id:t>>3,type:i,offset:n+o,length:s}}},y_=128,Ww=127;function jw(r,e=0){let t=0,n=0,s=e,o,i=r.length;do{if(s>=i||n>49)throw e=0,new RangeError("Could not decode varint");o=r.get(s++),t+=n<28?(o&Ww)<<n:(o&Ww)*Math.pow(2,n),n+=7}while(o>=y_);return e=s-e,{value:t,offset:e}}var s4=10*1024,o4=class{_pool;_poolOffset;constructor(){this._pool=de(s4),this._poolOffset=0}write(e,t){let n=this._pool,s=this._poolOffset;Mt(e.id<<3|e.type,n,s),s+=ge(e.id<<3|e.type),(e.type===xe.NEW_STREAM||e.type===xe.MESSAGE_INITIATOR||e.type===xe.MESSAGE_RECEIVER)&&e.data!=null?(Mt(e.data.length,n,s),s+=ge(e.data.length)):(Mt(0,n,s),s+=ge(0));let o=n.subarray(this._poolOffset,s);s4-s<100?(this._pool=de(s4),this._poolOffset=0):this._poolOffset=s,t.append(o),(e.type===xe.NEW_STREAM||e.type===xe.MESSAGE_INITIATOR||e.type===xe.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},w_=new o4;function Rl(r){let e=new W;return w_.write(r,e),e}var i4=class extends ls{streamId;types;maxDataSize;muxer;constructor(e){super(e),this.types=e.direction==="outbound"?r4:Gw,this.maxDataSize=e.maxDataSize,this.muxer=e.muxer,this.streamId=parseInt(this.id.substring(1)),e.direction==="outbound"&&queueMicrotask(()=>{this.muxer.send(Rl({id:this.streamId,type:r4.NEW_STREAM,data:new W(C(this.id))}))})}sendData(e){let t=new W,n=e.byteLength;for(;e.byteLength>0;){let s=Math.min(e.byteLength,this.maxDataSize),o=e.sublist(0,s);e=e.sublist(s),t.append(Rl({id:this.streamId,type:this.types.MESSAGE,data:o}))}return{sentBytes:n,canSendMore:this.muxer.send(t)}}sendReset(){return this.muxer.send(Rl({id:this.streamId,type:this.types.RESET}))}async sendCloseWrite(e){this.muxer.send(Rl({id:this.streamId,type:this.types.CLOSE})),e?.signal?.throwIfAborted()}async sendCloseRead(e){e?.signal?.throwIfAborted()}sendPause(){}sendResume(){}};function Yw(r){let{id:e,muxer:t,direction:n,maxMsgSize:s=_l}=r;return new i4({...r,id:n==="outbound"?`i${e}`:`r${e}`,direction:n,maxDataSize:s,muxer:t,log:r.log.newScope(`${n}:${e}`),protocol:""})}var b_=5;function E_(r){let e={...r,type:`${Cl[r.type]} (${r.type})`};return r.type===xe.NEW_STREAM&&(e.data=k(r.data.subarray())),(r.type===xe.MESSAGE_INITIATOR||r.type===xe.MESSAGE_RECEIVER)&&(e.data=k(r.data.subarray(),"base16")),e}var n0=class extends cs{_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??_l,this.maxUnprocessedMessageQueueSize=t.maxUnprocessedMessageQueueSize??n4,this.decoder=new r0(this.maxMessageSize,this.maxUnprocessedMessageQueueSize),this.rateLimiter=new Pi({points:t.disconnectThreshold??b_,duration:1})}onData(e){for(let t of this.decoder.write(e))this.handleMessage(t)}onCreateStream(e){if(this.status!=="open")throw new pr("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),Yw({...n,id:e,direction:t,maxMsgSize:this.maxMessageSize,log:this.log,muxer:this})}handleMessage(e){if(this.log.enabled&&this.log.trace("incoming message",E_(e)),e.type===xe.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 s=this._newStream(e.id,"inbound",this.streamOptions);this.onRemoteStream(s);return}let t=`${(e.type&1)===1?"i":"r"}${e.id}`,n=this.streams.find(s=>s.id===t);if(n==null){this.log("missing stream %s for message type %s",t,Cl[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 xe.MESSAGE_INITIATOR:case xe.MESSAGE_RECEIVER:n.onData(e.data);break;case xe.CLOSE_INITIATOR:case xe.CLOSE_RECEIVER:n.onRemoteCloseWrite();break;case xe.RESET_INITIATOR:case xe.RESET_RECEIVER:n.onRemoteReset();break;default:this.log("unknown message type")}}catch(s){this.log.error("error while processing message - %e",s),n.abort(s)}}};var a4=class{protocol="/mplex/6.7.0";_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@libp2p/mplex";[ue]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new n0(e,{...this._init})}};function Qw(r={}){return()=>new a4(r)}var x_=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 v_(r,e,t){let n,s=new Promise((o,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:u}=x_(r),d=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(y){n(),i(y);return}c.push(p),t.count===c.length&&(n(),o(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)u(h,d);for(let h of t.rejectionEvents)a.includes(h)||u(h,f)};for(let h of a)l(h,d);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&o(c)});if(s.cancel=n,typeof t.timeout=="number"){let o=Lt(s,{milliseconds:t.timeout});return o.cancel=()=>{n(),o.clear()},o}return s}function Xw(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=v_(r,e,t),s=n.then(o=>o[0]);return s.cancel=n.cancel,s}var Zw="1.0.0",Jw="ping",eb="ipfs";var s0=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;constructor(e,t={}){this.components=e,this.started=!1,this.protocol=`/${t.protocolPrefix??eb}/${Jw}/${Zw}`,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";[ue]=["@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 s=AbortSignal.timeout(this.timeout);s.addEventListener("abort",()=>{e.abort(new Kn("Ping timed out"))});let o=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 Xw(e,"drain",{rejectionEvents:["close"],signal:s}),n("stream drained"))}n("ping from %p complete in %dms",t.remotePeer,Date.now()-o),await e.close({signal:s})}async ping(e,t={}){let n=crypto.getRandomValues(new Uint8Array(32)),s=await this.components.connectionManager.openStream(e,this.protocol,{runOnLimitedConnection:this.runOnLimitedConnection,...t}),o=s.log.newScope("ping");try{let i=Date.now(),a=Promise.withResolvers(),c=new W,l=u=>{if(c.append(u.data),c.byteLength===32){s.removeEventListener("message",l);let d=Date.now()-i;Promise.all([s.closeRead(t)]).then(()=>{if(Y(n,c.subarray()))a.resolve(d);else throw new Os(`Received wrong ping ack after ${d}ms`)}).catch(f=>{s.abort(f),a.reject(f)})}};return s.addEventListener("message",l),s.send(n),await s.close(t),await De(a.promise,t.signal)}catch(i){throw o.error("error while pinging %o - %e",e,i),s?.abort(i),i}finally{s?.close()}}};function rb(r={}){return e=>new s0(e,r)}var It;(function(r){let e;(function(a){a.FIN="FIN",a.STOP_SENDING="STOP_SENDING",a.RESET="RESET",a.FIN_ACK="FIN_ACK"})(e=r.Flag||(r.Flag={}));let t;(function(a){a[a.FIN=0]="FIN",a[a.STOP_SENDING=1]="STOP_SENDING",a[a.RESET=2]="RESET",a[a.FIN_ACK=3]="FIN_ACK"})(t||(t={})),(function(a){a.codec=()=>Qe(t)})(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=ne((a,c,l={})=>{l.lengthDelimited!==!1&&c.fork(),a.flag!=null&&(c.uint32(8),r.Flag.codec().encode(a.flag,c)),a.message!=null&&(c.uint32(18),c.bytes(a.message)),l.lengthDelimited!==!1&&c.ldelim()},(a,c,l={})=>{let u={},d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{u.flag=r.Flag.codec().decode(a);break}case 2:{u.message=a.bytes();break}default:{a.skipType(f&7);break}}}return u},function*(a,c,l,u={}){let d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{yield{field:`${l}.flag`,value:r.Flag.codec().decode(a)};break}case 2:{yield{field:`${l}.message`,value:a.bytes()};break}default:{a.skipType(f&7);break}}}})),n);function s(a){return te(a,r.codec())}r.encode=s;function o(a,c){return ee(a,r.codec(),c)}r.decode=o;function i(a,c){return re(a,r.codec(),c)}r.stream=i})(It||(It={}));var nb=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"],c4=Array.from("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"),sb="libp2p+webrtc+v1/",ob=2*1024*1024,oa=16*1024;function I_(r=oa){let e=ge(r-ge(r)),t=1+ge(Object.keys(It.Flag).length-1),n=1,s=r-e-t-n,o=ge(s);return e+t+n+o}var ib=I_();var ab=1e4,l4="/webrtc",Pl="/webrtc-signaling/0.0.1";var C_=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 __(r,e,t){let n,s=new Promise((o,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:u}=C_(r),d=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(y){n(),i(y);return}c.push(p),t.count===c.length&&(n(),o(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)u(h,d);for(let h of t.rejectionEvents)a.includes(h)||u(h,f)};for(let h of a)l(h,d);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&o(c)});if(s.cancel=n,typeof t.timeout=="number"){let o=Lt(s,{milliseconds:t.timeout});return o.cancel=()=>{n(),o.clear()},o}return s}function $n(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=__(r,e,t),s=n.then(o=>o[0]);return s.cancel=n.cancel,s}var u4=class extends ls{channel;incomingData;maxBufferedAmount;receivedFinAck;finAckTimeout;constructor(e){super({...e,maxMessageSize:(e.maxMessageSize??oa)-ib}),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=Pt(),this.maxBufferedAmount=e.maxBufferedAmount??ob,this.finAckTimeout=e.finAckTimeout??ab,this.channel.onclose=()=>{this.log.trace("received datachannel close event"),this.onRemoteCloseWrite(),this.onTransportClosed()},this.channel.onerror=n=>{let s=n.error;this.log.trace("received datachannel error event - %e",s),this.abort(s)},this.channel.onmessage=async n=>{this.log("incoming message %d bytes",n.data.byteLength);let{data:s}=n;s===null||s.byteLength===0||this.incomingData.push(new Uint8Array(s,0,s.byteLength))},this.channel.bufferedAmountLowThreshold=0,this.channel.onbufferedamountlow=()=>{this.writableNeedsDrain&&this.safeDispatchEvent("drain")},Promise.resolve().then(async()=>{for await(let n of mc(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),$n(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 Fr(`Invalid datachannel state - ${this.channel.readyState}`);this.log.trace('sending message, channel state "%s"',this.channel.readyState);try{for(let t of e)this.channel.send(ae(t))}catch(t){this.log.error("error sending datachannel message - %e",t),this.abort(t)}}sendData(e){return this.channel.readyState!=="open"?{sentBytes:0,canSendMore:!1}:(this._sendMessage(vo.single(It.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(It.Flag.RESET),this.receivedFinAck?.reject(e)}catch(t){this.log.error("failed to send reset - %e",t)}}async sendCloseWrite(e){this._sendFlag(It.Flag.FIN),e?.signal?.throwIfAborted(),this.receivedFinAck=Promise.withResolvers();let t=e?.signal??AbortSignal.timeout(this.finAckTimeout),n=[$n(this.channel,"close",{signal:t}),$n(this.channel,"error",{signal:t})];await Promise.any([De(this.receivedFinAck.promise,t),...n]).finally(()=>{n.forEach(s=>s.cancel())})}async sendCloseRead(e){this._sendFlag(It.Flag.STOP_SENDING),e?.signal?.throwIfAborted()}processIncomingProtobuf(e){let t=It.decode(e);t.message!=null&&(this.readStatus==="readable"||this.readStatus==="paused")&&this.onData(new W(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===It.Flag.FIN&&(this._sendFlag(It.Flag.FIN_ACK),this.onRemoteCloseWrite()),t.flag===It.Flag.RESET&&(this.receivedFinAck?.reject(new qo("The stream was reset")),this.onRemoteReset()),t.flag===It.Flag.STOP_SENDING&&this.onRemoteCloseRead(),t.flag===It.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=It.encode({flag:e}),n=vo.single(t);try{return this._sendMessage(n),!0}catch(s){this.log.error("could not send flag %s - %e",e.toString(),s)}return!1}sendPause(){}sendResume(){}};function Ll(r){let{channel:e,direction:t,isHandshake:n}=r;return new u4({...r,id:`${e.id}`,log:r.log.newScope(`${n===!0?"handshake":t}:${e.id}`),protocol:""})}var Ps=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??l4,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 d4(e,{peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,protocol:this.protocol,earlyDataChannels:this.earlyDataChannels})}},d4=class extends cs{peerConnection;dataChannelOptions;constructor(e,t){super(e,{...t,name:"muxer"}),this.peerConnection=t.peerConnection,this.protocol=t.protocol??l4,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=Ll({...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),Ll({...e,...this.dataChannelOptions,channel:t,direction:"outbound",log:this.log})}onData(){}};var f4=class extends as{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==="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(){}},kl=r=>new f4(r);async function h4(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??nb.map(e=>({urls:[e]})),r}var cb=(r=32)=>sb+[...Array(r)].map(()=>c4.at(Math.floor(Math.random()*c4.length))).join("");var o0=globalThis.RTCPeerConnection,i0=globalThis.RTCSessionDescription,lb=globalThis.RTCIceCandidate;var Ls=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},fr=class extends Ls{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var a0=class extends Ls{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var c0=class extends Ls{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},l0=class extends Ls{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 Gt;(function(r){let e;(function(a){a.SDP_OFFER="SDP_OFFER",a.SDP_ANSWER="SDP_ANSWER",a.ICE_CANDIDATE="ICE_CANDIDATE"})(e=r.Type||(r.Type={}));let t;(function(a){a[a.SDP_OFFER=0]="SDP_OFFER",a[a.SDP_ANSWER=1]="SDP_ANSWER",a[a.ICE_CANDIDATE=2]="ICE_CANDIDATE"})(t||(t={})),(function(a){a.codec=()=>Qe(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((a,c,l={})=>{l.lengthDelimited!==!1&&c.fork(),a.type!=null&&(c.uint32(8),r.Type.codec().encode(a.type,c)),a.data!=null&&(c.uint32(18),c.string(a.data)),l.lengthDelimited!==!1&&c.ldelim()},(a,c,l={})=>{let u={},d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{u.type=r.Type.codec().decode(a);break}case 2:{u.data=a.string();break}default:{a.skipType(f&7);break}}}return u},function*(a,c,l,u={}){let d=c==null?a.len:a.pos+c;for(;a.pos<d;){let f=a.uint32();switch(f>>>3){case 1:{yield{field:`${l}.type`,value:r.Type.codec().decode(a)};break}case 2:{yield{field:`${l}.data`,value:a.string()};break}default:{a.skipType(f&7);break}}}})),n);function s(a){return te(a,r.codec())}r.encode=s;function o(a,c){return ee(a,r.codec(),c)}r.decode=o;function i(a,c){return re(a,r.codec(),c)}r.stream=i})(Gt||(Gt={}));var u0=async(r,e,t)=>{try{let n=Promise.withResolvers();for(R_(r,n);;){let s=await Promise.race([n.promise,e.read({signal:t.signal})]);if(s==null){t.signal?.throwIfAborted();break}if(s.type!==Gt.Type.ICE_CANDIDATE)throw new se("ICE candidate message expected");let o=JSON.parse(s.data??"null");if(o===""||o===null){t.onProgress?.(new Z("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let i=new lb(o);t.log.trace("%s received new ICE candidate %o",t.direction,o);try{t.onProgress?.(new Z("webrtc:add-ice-candidate",i.candidate)),await r.addIceCandidate(i)}catch(a){t.log.error("%s bad candidate received %o - %e",t.direction,o,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 R_(r,e){if(r.connectionState==="connected"){e.resolve();return}r.onconnectionstatechange=t=>{switch(r.connectionState){case"connected":e.resolve();break;case"failed":case"closed":e.reject(new Ho(`RTCPeerConnection connection state became "${r.connectionState}"`));break;default:break}}}function d0(r){let e;for(let t of r.getComponents())t.name==="p2p"&&(e=Be(t.value??""));if(e==null)throw new $r("Remote peerId must be present in multiaddr");return e}async function ub({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:s,connectionManager:o,transportManager:i,log:a,logger:c,onProgress:l}){let{circuitAddress:u,targetPeer:d}=db(s);n?.dialerEvents.increment({open:!0}),a.trace("dialing circuit address: %a",u);let f=o.getConnections(d),h;f.length===0?(l?.(new Z("webrtc:dial-relay")),h=await i.dial(u,{signal:t,onProgress:l})):(l?.(new Z("webrtc:reuse-relay-connection")),h=f[0]),l?.(new Z("webrtc:open-signaling-stream"));let p=await h.newStream(Pl,{signal:t,runOnLimitedConnection:!0}),y=Ne(p).pb(Gt),m=new o0(r);m.addEventListener("connectionstatechange",()=>{m.connectionState==="closed"&&m.close()});let g=new Ps({peerConnection:m,dataChannelOptions:e});try{let w=m.createDataChannel("init");m.onicecandidate=({candidate:D})=>{if(m.connectionState==="connected"){a.trace("ignore new ice candidate as peer connection is already connected");return}if(D==null||D?.candidate===""){a.trace("initiator detected end of ICE candidates");return}let B=JSON.stringify(D?.toJSON()??null);a.trace("initiator sending ICE candidate %o",D),y.write({type:Gt.Type.ICE_CANDIDATE,data:B},{signal:t}).catch(N=>{a.error("error sending ICE candidate - %e",N)})},m.onicecandidateerror=D=>{a.error("initiator ICE candidate error",D)};let v=await m.createOffer().catch(D=>{throw a.error("could not execute createOffer - %e",D),new fr("Failed to set createOffer")});a.trace("initiator send SDP offer %s",v.sdp),l?.(new Z("webrtc:send-sdp-offer")),await y.write({type:Gt.Type.SDP_OFFER,data:v.sdp},{signal:t}),await m.setLocalDescription(v).catch(D=>{throw a.error("could not execute setLocalDescription - %e",D),new fr("Failed to set localDescription")}),l?.(new Z("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let _=await y.read({signal:t});if(_.type!==Gt.Type.SDP_ANSWER)throw new fr("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",_.data);let P=new i0({type:"answer",sdp:_.data});return await m.setRemoteDescription(P).catch(D=>{throw a.error("could not execute setRemoteDescription - %e",D),new fr("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new Z("webrtc:read-ice-candidates")),await u0(m,y,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected"),w.readyState!=="open"&&(a.trace("wait for init channel to open"),await $n(w,"open",{signal:t})),a.trace("closing init channel"),w.close(),a.trace("waiting for init channel to close"),await $n(w,"close",{signal:t}),l?.(new Z("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await p.close({signal:t}),a.trace("initiator connected to remote address %s",s),{remoteAddress:s,peerConnection:m,muxerFactory:g}}catch(w){throw a.error("outgoing signaling error - %e",w),m.close(),p.abort(w),w}finally{m.onicecandidate=null,m.onicecandidateerror=null}}var fb=Ie(Ii.matchers[0],Te(290)),f0=class r extends oe{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=>fb.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=>fb.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 hb(r,e,{peerConnection:t,signal:n,log:s}){s.trace("new inbound signaling stream");let o=Ne(r).pb(Gt);try{t.onicecandidate=({candidate:d})=>{if(t.connectionState==="connected"){s.trace("ignore new ice candidate as peer connection is already connected");return}if(d==null||d?.candidate===""){s.trace("recipient detected end of ICE candidates");return}let f=JSON.stringify(d?.toJSON()??null);s.trace("recipient sending ICE candidate %s",f),o.write({type:Gt.Type.ICE_CANDIDATE,data:f},{signal:n}).catch(h=>{s.error("error sending ICE candidate - %e",h)})},s.trace("recipient read SDP offer");let c=await o.read({signal:n});if(c.type!==Gt.Type.SDP_OFFER)throw new fr(`expected message type SDP_OFFER, received: ${c.type??"undefined"} `);s.trace("recipient received SDP offer %s",c.data);let l=new i0({type:"offer",sdp:c.data});await t.setRemoteDescription(l).catch(d=>{throw s.error("could not execute setRemoteDescription - %e",d),new fr("Failed to set remoteDescription")});let u=await t.createAnswer().catch(d=>{throw s.error("could not execute createAnswer - %e",d),new fr("Failed to create answer")});s.trace("recipient send SDP answer %s",u.sdp),await o.write({type:Gt.Type.SDP_ANSWER,data:u.sdp},{signal:n}),await t.setLocalDescription(u).catch(d=>{throw s.error("could not execute setLocalDescription - %e",d),new fr("Failed to set localDescription")}),s.trace("recipient read candidates until connected"),await u0(t,o,{direction:"recipient",signal:n,log:s})}catch(c){if(t.connectionState!=="connected")throw s.error("error while handling signaling stream from peer %a - %e",e.remoteAddr,c),t.close(),c;s("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",e.remoteAddr,c)}let i=d0(e.remoteAddr),a=F(`/webrtc/p2p/${i}`);return s.trace("recipient connected to remote address %s",a),{remoteAddress:a,remotePeer:i}}var h0=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"})})}[qn]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[ue]=["@libp2p/transport"];[jt]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(Pl,(e,t)=>{let n=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);this._onProtocol(e,t,n).catch(s=>{this.log.error("failed to handle incoming connect from %p - %e",t.remotePeer,s)}).finally(()=>{n.clear()})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(Pl),this._started=!1}createListener(e){return new f0(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(dc.exactMatch)}dialFilter(e){return this.listenFilter(e)}async dial(e,t){this.log.trace("dialing address: %a",e);let{remoteAddress:n,peerConnection:s,muxerFactory:o}=await ub({rtcConfiguration:await h4(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=kl({peerConnection:s,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:d0(e),muxerFactory:o,onProgress:t.onProgress,signal:t.signal});return this._closeOnShutdown(s,i),a}async _onProtocol(e,t,n){let s=new o0(await h4(this.init.rtcConfiguration));s.addEventListener("connectionstatechange",()=>{s.connectionState==="closed"&&s.close()});let o=new Ps({peerConnection:s,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:i,remotePeer:a}=await hb(e,t,{peerConnection:s,signal:n,log:this.log});await e.close({signal:n});let c=kl({peerConnection:s,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:o,signal:n}),this._closeOnShutdown(s,c)}catch(i){throw this.log.error("incoming signaling error - %e",i),s.close(),e.abort(i),i}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(s=>{this.log.error("could not close WebRTCMultiaddrConnection - %e",s)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function db(r){let e=r.getComponents().filter(({name:n})=>n==="p2p").map(({value:n})=>n).pop();if(e==null)throw new E("Destination peer id was missing");return{circuitAddress:F(r.getComponents().filter(({name:n})=>n!=="webrtc")),targetPeer:Be(e)}}var p4=Object.values(Hs).map(r=>r.decoder).reduce((r,e)=>r.or(e)),P_=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function pb(r){return r?.match(P_)?.groups?.fingerprint}function m4(r){let t=r.getComponents().find(n=>n.code===466)?.value;if(t===void 0||t==="")throw new E(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function L_(r){return Fe.decode(p4.decode(r))}function k_(r){let e=L_(m4(r)),t=D_(e.code),n=e.digest.reduce((o,i)=>o+i.toString(16).padStart(2,"0"),""),s=n.match(/.{1,2}/g);if(s==null)throw new a0(n,r.toString());return`${t} ${s.join(":").toUpperCase()}`}function mb(r){let e=r.split(":").map(s=>parseInt(s,16)),t=Uint8Array.from(e),n=Ct(at.code,t);return F(`/certhash/${ya.encode(n.bytes)}`)}function D_(r){switch(r){case 17:return"sha-1";case 18:return"sha-256";case 19:return"sha-512";default:throw new l0(r)}}function gb(r,e){let{host:t,port:n,type:s}=Q(r);if(s!=="ip4"&&s!=="ip6")throw new E(`Multiaddr ${r} was not an IPv4 or IPv6 address`);let o=k_(r);return{type:"answer",sdp:`v=0
|
|
57
|
+
o=- 0 0 IN IP${s==="ip4"?4:6} ${t}
|
|
58
|
+
s=-
|
|
59
|
+
t=0 0
|
|
60
|
+
a=ice-lite
|
|
61
|
+
m=application ${n} UDP/DTLS/SCTP webrtc-datachannel
|
|
62
|
+
c=IN IP${s==="ip4"?4:6} ${t}
|
|
63
|
+
a=mid:0
|
|
64
|
+
a=ice-options:ice2
|
|
65
|
+
a=ice-ufrag:${e}
|
|
66
|
+
a=ice-pwd:${e}
|
|
67
|
+
a=fingerprint:${o}
|
|
68
|
+
a=setup:passive
|
|
69
|
+
a=sctp-port:5000
|
|
70
|
+
a=max-message-size:${oa}
|
|
71
|
+
a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host
|
|
72
|
+
a=end-of-candidates
|
|
73
|
+
`}}function yb(r,e){let{host:t,port:n,type:s}=Q(r);if(s!=="ip4"&&s!=="ip6")throw new E(`Multiaddr ${r} was not an IPv4 or IPv6 address`);return{type:"offer",sdp:`v=0
|
|
74
|
+
o=- 0 0 IN IP${s==="ip4"?4:6} ${t}
|
|
75
|
+
s=-
|
|
76
|
+
c=IN IP${s==="ip4"?4:6} ${t}
|
|
77
|
+
t=0 0
|
|
78
|
+
a=ice-options:ice2,trickle
|
|
79
|
+
m=application ${n} UDP/DTLS/SCTP webrtc-datachannel
|
|
80
|
+
a=mid:0
|
|
81
|
+
a=setup:active
|
|
82
|
+
a=ice-ufrag:${e}
|
|
83
|
+
a=ice-pwd:${e}
|
|
84
|
+
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
|
|
85
|
+
a=sctp-port:5000
|
|
86
|
+
a=max-message-size:${oa}
|
|
87
|
+
a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host
|
|
88
|
+
a=end-of-candidates
|
|
89
|
+
`}}function g4(r,e){if(r.sdp===void 0)throw new E("Can't munge a missing SDP");let t=r.sdp.includes(`\r
|
|
90
|
+
`)?`\r
|
|
91
|
+
`:`
|
|
92
|
+
`;try{r.sdp=r.sdp.replace(/\na=ice-ufrag:[^\n]*\n/,`
|
|
93
|
+
a=ice-ufrag:`+e+t).replace(/\na=ice-pwd:[^\n]*\n/,`
|
|
94
|
+
a=ice-pwd:`+e+t)}catch{}return r}var y4=C("libp2p-webrtc-noise:");function bb(r,e,t){let n=r.trim().toLowerCase().replaceAll(":",""),s=C(n,"hex"),o=Ct(at.code,s),i=p4.decode(m4(e)),a=y4.byteLength+o.bytes.byteLength+i.byteLength;return t==="server"?Le([y4,i,o.bytes],a):Le([y4,o.bytes,i],a)}function N_(r,e){return r.role==="server"}async function Eb(r,e,t,n){let s=r.createDataChannel("",{negotiated:!0,id:0});try{if(n.role==="client"){n.log.trace("client creating local offer");let d=await r.createOffer();n.log.trace("client created local offer %s",d.sdp);let f=g4(d,t);n.log.trace("client setting local offer %s",f.sdp),await r.setLocalDescription(f);let h=gb(n.remoteAddr,t);n.log.trace("client setting server description %s",h.sdp),await r.setRemoteDescription(h)}else{let d=yb(n.remoteAddr,t);n.log.trace("server setting client %s %s",d.type,d.sdp),await r.setRemoteDescription(d),n.log.trace("server creating local answer");let f=await r.createAnswer();n.log.trace("server created local answer");let h=g4(f,t);n.log.trace("server setting local description %s",f.sdp),await r.setLocalDescription(h)}if(s.readyState!=="open"&&(n.log.trace("%s wait for handshake channel to open, starting status %s",n.role,s.readyState),await $n(s,"open",n)),n.log.trace("%s handshake channel opened",n.role),N_(n,r)){let d=r.remoteFingerprint()?.value??"";n.remoteAddr=n.remoteAddr.encapsulate(mb(d))}let o=pb(r.localDescription?.sdp);if(o==null)throw new Ls("Could not get fingerprint from local description sdp");n.log.trace("%s performing noise handshake",n.role);let i=bb(o,n.remoteAddr,n.role),a=S1({prologueBytes:i})(n),c=Ll({channel:s,direction:"outbound",isHandshake:!0,log:n.log,...n.dataChannel??{}}),l=kl({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("connectionstatechange",()=>{switch(r.connectionState){case"failed":case"disconnected":case"closed":l.close().catch(d=>{n.log.error("error closing connection - %e",d),l.abort(d)});break;default:break}}),n.events?.increment({peer_connection:!0}),n.role==="client"){n.log.trace("%s secure inbound",n.role);let d=await a.secureInbound(c,{remotePeer:n.remotePeer,signal:n.signal,skipStreamMuxerNegotiation:!0});return n.log.trace("%s upgrade outbound",n.role),await n.upgrader.upgradeOutbound(l,{skipProtection:!0,skipEncryption:!0,remotePeer:d.remotePeer,muxerFactory:e,signal:n.signal})}n.log.trace("%s secure outbound",n.role);let u=await a.secureOutbound(c,{remotePeer:n.remotePeer,signal:n.signal,skipStreamMuxerNegotiation:!0});l.remoteAddr=l.remoteAddr.encapsulate(`/p2p/${u.remotePeer}`),n.log.trace("%s upgrade inbound",n.role),await n.upgrader.upgradeInbound(l,{skipProtection:!0,skipEncryption:!0,remotePeer:u.remotePeer,muxerFactory:e,signal:n.signal})}catch(o){throw s.close(),r.close(),o}}async function xb(r,e,t={}){let n=t.certificate;n==null&&(n=await RTCPeerConnection.generateCertificate({name:"ECDSA",namedCurve:"P-256"}));let s=typeof t.rtcConfiguration=="function"?await t.rtcConfiguration():t.rtcConfiguration,o=new RTCPeerConnection({...s??{},certificates:[n]}),i=new Ps({peerConnection:o,metrics:t.events,dataChannelOptions:t.dataChannel});return{peerConnection:o,muxerFactory:i}}var p0=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"})})}[qn]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[ue]=["@libp2p/transport"];async dial(e,t){this.log("dial %a",e),t.signal.throwIfAborted();let n,s=e.getComponents().findLast(c=>c.code===421)?.value;s!=null&&(n=Be(s));let o=cb(),{peerConnection:i,muxerFactory:a}=await xb("client",o,{rtcConfiguration:typeof this.init.rtcConfiguration=="function"?await this.init.rtcConfiguration():this.init.rtcConfiguration??{},dataChannel:this.init.dataChannel});try{return await Eb(i,a,o,{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 c0("WebRTCDirectTransport.createListener")}listenFilter(e){return[]}dialFilter(e){return e.filter(uc.exactMatch)}};function vb(r){return e=>new p0(e,r)}function Sb(r){return e=>new h0(e,r)}var O_=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 B_(r,e,t){let n,s=new Promise((o,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:u}=O_(r),d=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(y){n(),i(y);return}c.push(p),t.count===c.length&&(n(),o(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)u(h,d);for(let h of t.rejectionEvents)a.includes(h)||u(h,f)};for(let h of a)l(h,d);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&o(c)});if(s.cancel=n,typeof t.timeout=="number"){let o=Lt(s,{milliseconds:t.timeout});return o.cancel=()=>{n(),o.clear()},o}return s}function Ab(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=B_(r,e,t),s=n.then(o=>o[0]);return s.cancel=n.cancel,s}function Tb(){throw new Error("WebSocket Servers can not be created in the browser!")}var M_=1024*1024*4,U_=10,w4=class extends as{websocket;maxBufferedAmount;checkBufferedAmountTask;constructor(e){super(e),this.websocket=e.websocket,this.maxBufferedAmount=e.maxBufferedAmount??M_,this.checkBufferedAmountTask=Li(this.checkBufferedAmount.bind(this),e.bufferedAmountPollInterval??U_),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(ae(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 Ib(r){return new w4(r)}var b4=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"})})}[qn]=!0;[Symbol.toStringTag]="@libp2p/websockets";[ue]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=Ib({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 s=await t.upgrader.upgradeOutbound(n,t);return this.log("outbound connection %s upgraded",n.remoteAddr),s}async _connect(e,t){t?.signal?.throwIfAborted();let n=Z1(e);this.log("create websocket connection to %s",n);let s=new WebSocket(n);s.binaryType="arraybuffer";try{t.onProgress?.(new Z("websockets:open-connection")),await Ab(s,"open",t)}catch(o){if(t.signal?.aborted)throw this.metrics?.dialerEvents.increment({abort:!0}),new Ho(`Could not connect to ${n}`);this.metrics?.dialerEvents.increment({error:!0});try{s.close()}catch{}throw o}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),s}createListener(e){return Tb({logger:this.logger,events:this.components.events,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e.filter(t=>An.exactMatch(t)||Eo.exactMatch(t))}dialFilter(e){return this.listenFilter(e)}};function Cb(r={}){return e=>new b4(e,r)}var _b={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 m0(r={}){let e;return r.name!=null&&r.version!=null&&(e=`${r.name}/${r.version} ${bf()}`),{privateKey:r.privateKey,dns:r.dns,nodeInfo:{userAgent:e},addresses:{listen:["/p2p-circuit","/webrtc"]},transports:[ny(),Sb(),vb(),Cb()],connectionEncrypters:[S1()],streamMuxers:[B9(),Qw()],peerDiscovery:[G9(_b)],services:{autoNAT:z9(),dcutr:iy(),delegatedContentRouting:$9(U1()),delegatedPeerRouting:K9(U1()),dht:zw({clientMode:!0}),identify:dw(),identifyPush:fw(),ping:rb(),http:sw()}}}async function Rb(r,e){let t=e??{};t.privateKey==null&&e.datastore!=null&&(t.privateKey=await Km(e.datastore,e.keychain));let n=m0({...t,name:t.nodeInfo?.name??r.info.name,version:t.nodeInfo?.version??r.info.version});return n.datastore=n.datastore??e.datastore,await $8({...n,...t})}async function F_(r,e){return Cm(e)?e:Rb(r,{...e,dns:r.dns,logger:r.logger,datastore:r.datastore})}function $_(r,e){let t;Object.defineProperty(r,"libp2p",{configurable:!0,enumerable:!0,get(){if(t!=null)return t;throw new mr}});let n={start:async s=>{t==null&&(t=await F_(s,e));try{s.hasRouter("libp2p-router")||s.addRouter(K8(t)),Cm(s.libp2p)&&await s.libp2p.start()}catch(o){if(o.name!=="NotStartedError")throw o}},stop:async()=>{await t?.stop()}};return r.addMixin(n),r}return Ob(K_);})();
|
|
95
|
+
/*! Bundled license information:
|
|
96
|
+
|
|
97
|
+
pvtsutils/build/index.js:
|
|
98
|
+
(*!
|
|
99
|
+
* MIT License
|
|
100
|
+
*
|
|
101
|
+
* Copyright (c) 2017-2024 Peculiar Ventures, LLC
|
|
102
|
+
*
|
|
103
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
104
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
105
|
+
* in the Software without restriction, including without limitation the rights
|
|
106
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
107
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
108
|
+
* furnished to do so, subject to the following conditions:
|
|
109
|
+
*
|
|
110
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
111
|
+
* copies or substantial portions of the Software.
|
|
112
|
+
*
|
|
113
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
114
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
115
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
116
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
117
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
118
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
119
|
+
* SOFTWARE.
|
|
120
|
+
*
|
|
121
|
+
*)
|
|
122
|
+
|
|
123
|
+
@noble/curves/utils.js:
|
|
124
|
+
@noble/curves/abstract/modular.js:
|
|
125
|
+
@noble/curves/abstract/curve.js:
|
|
126
|
+
@noble/curves/abstract/edwards.js:
|
|
127
|
+
@noble/curves/abstract/montgomery.js:
|
|
128
|
+
@noble/curves/ed25519.js:
|
|
129
|
+
@noble/curves/abstract/weierstrass.js:
|
|
130
|
+
@noble/curves/secp256k1.js:
|
|
131
|
+
(*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
|
|
132
|
+
|
|
133
|
+
pvutils/build/utils.es.js:
|
|
134
|
+
(*!
|
|
135
|
+
Copyright (c) Peculiar Ventures, LLC
|
|
136
|
+
*)
|
|
137
|
+
|
|
138
|
+
asn1js/build/index.es.js:
|
|
139
|
+
(*!
|
|
140
|
+
* Copyright (c) 2014, GMO GlobalSign
|
|
141
|
+
* Copyright (c) 2015-2022, Peculiar Ventures
|
|
142
|
+
* All rights reserved.
|
|
143
|
+
*
|
|
144
|
+
* Author 2014-2019, Yury Strozhevsky
|
|
145
|
+
*
|
|
146
|
+
* Redistribution and use in source and binary forms, with or without modification,
|
|
147
|
+
* are permitted provided that the following conditions are met:
|
|
148
|
+
*
|
|
149
|
+
* * Redistributions of source code must retain the above copyright notice, this
|
|
150
|
+
* list of conditions and the following disclaimer.
|
|
151
|
+
*
|
|
152
|
+
* * Redistributions in binary form must reproduce the above copyright notice, this
|
|
153
|
+
* list of conditions and the following disclaimer in the documentation and/or
|
|
154
|
+
* other materials provided with the distribution.
|
|
155
|
+
*
|
|
156
|
+
* * Neither the name of the copyright holder nor the names of its
|
|
157
|
+
* contributors may be used to endorse or promote products derived from
|
|
158
|
+
* this software without specific prior written permission.
|
|
159
|
+
*
|
|
160
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
161
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
162
|
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
163
|
+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
164
|
+
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
165
|
+
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
166
|
+
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
167
|
+
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
168
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
169
|
+
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
170
|
+
*
|
|
171
|
+
*)
|
|
172
|
+
|
|
173
|
+
@noble/ciphers/utils.js:
|
|
174
|
+
(*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) *)
|
|
175
|
+
*/
|
|
176
|
+
return HeliaLibp2P}));
|
|
177
|
+
//# sourceMappingURL=index.min.js.map
|