From b9326daaddc66ec3d6b9ce7553c8568679137fde Mon Sep 17 00:00:00 2001 From: Bobinstein Date: Thu, 3 Oct 2024 22:41:43 +0000 Subject: [PATCH] deploy: 1913c853e4c07d38e689bc7713aea59b83a0c4f7 --- 404.html | 4 ++-- arns/index.html | 4 ++-- arweave/index.html | 4 ++-- assets/js/{33.b0845a95.js => 33.739a1ec4.js} | 2 +- assets/js/{34.49c73000.js => 34.2a17dc91.js} | 2 +- assets/js/{36.2461882c.js => 36.52ecf701.js} | 2 +- assets/js/{37.fbed1616.js => 37.e696ce1b.js} | 2 +- assets/js/{38.8fa0e6e8.js => 38.9f6548f7.js} | 2 +- assets/js/{39.32f30f46.js => 39.566dfe25.js} | 2 +- assets/js/{40.7b598302.js => 40.3422d9ed.js} | 2 +- assets/js/{43.c8d5e35e.js => 43.9ec9da6a.js} | 2 +- assets/js/{44.449d86f5.js => 44.52ad2ab1.js} | 2 +- assets/js/{45.d3bea9da.js => 45.ddc8a78c.js} | 2 +- assets/js/{46.f0bd9579.js => 46.5e287b20.js} | 2 +- assets/js/{50.d222d982.js => 50.641ebe19.js} | 2 +- assets/js/{51.8f645cd4.js => 51.6af9064b.js} | 2 +- assets/js/{52.65514aa6.js => 52.bf4997a6.js} | 2 +- assets/js/{56.691644b3.js => 56.053616fb.js} | 2 +- assets/js/{57.61a69863.js => 57.7ac2880d.js} | 2 +- assets/js/{58.5a28316f.js => 58.51348c99.js} | 2 +- assets/js/{59.f8a39860.js => 59.4af09aee.js} | 2 +- assets/js/{60.273bc29a.js => 60.e878dcab.js} | 2 +- assets/js/{61.88271f1c.js => 61.0ddefe13.js} | 2 +- assets/js/{62.b45b08d8.js => 62.d084afb5.js} | 2 +- assets/js/{63.7c518206.js => 63.6c05ff9c.js} | 2 +- assets/js/{65.dc4b9b41.js => 65.cd699744.js} | 2 +- assets/js/{66.4a3051de.js => 66.ad256917.js} | 2 +- assets/js/{67.7a697e57.js => 67.71b92a30.js} | 2 +- .../js/{app.35d642c7.js => app.addfb1ab.js} | 6 +++--- community-resources.html | 4 ++-- concepts/sandboxing.html | 4 ++-- contribute.html | 4 ++-- delegated-staking/index.html | 4 ++-- experimental/frames/index.html | 4 ++-- foundation/index.html | 4 ++-- gateway-network/index.html | 4 ++-- gateways/ar-io-node/admin/admin-api.html | 4 ++-- gateways/ar-io-node/advanced-config.html | 4 ++-- gateways/ar-io-node/api.html | 4 ++-- .../ar-io-node/arnsoip/observer/index.html | 4 ++-- gateways/ar-io-node/env.html | 4 ++-- gateways/ar-io-node/linux-setup/index.html | 4 ++-- gateways/ar-io-node/observer-upgrade.html | 4 ++-- gateways/ar-io-node/operation.html | 4 ++-- gateways/ar-io-node/overview/index.html | 4 ++-- gateways/ar-io-node/release-notes.html | 4 ++-- gateways/ar-io-node/windows-setup/index.html | 4 ++-- gateways/bundler/index.html | 4 ++-- gateways/delegated-staking/index.html | 4 ++-- gateways/index.html | 4 ++-- gateways/testnet/index.html | 4 ++-- gateways/upgrade/index.html | 4 ++-- glossary.html | 4 ++-- guides/ants-on-bazar/index.html | 4 ++-- guides/arns/managing.html | 4 ++-- guides/arns/overview.html | 4 ++-- guides/arns/registering.html | 4 ++-- guides/experimental/ao-ant/index.html | 4 ++-- guides/experimental/ao-resolver/index.html | 4 ++-- guides/graphql/index.html | 4 ++-- guides/perma-deploy/index.html | 4 ++-- guides/sdk-release-notes.html | 4 ++-- images/bazar-create-profile1.png | Bin 303057 -> 689922 bytes index.html | 4 ++-- introduction/index.html | 4 ++-- labs/index.html | 4 ++-- manifests/index.html | 4 ++-- sdk/index.html | 4 ++-- token/index.html | 4 ++-- troubleshooting-observer/index.html | 4 ++-- troubleshooting/index.html | 4 ++-- wayfinder/index.html | 4 ++-- 72 files changed, 118 insertions(+), 118 deletions(-) rename assets/js/{33.b0845a95.js => 33.739a1ec4.js} (99%) rename assets/js/{34.49c73000.js => 34.2a17dc91.js} (99%) rename assets/js/{36.2461882c.js => 36.52ecf701.js} (98%) rename assets/js/{37.fbed1616.js => 37.e696ce1b.js} (99%) rename assets/js/{38.8fa0e6e8.js => 38.9f6548f7.js} (98%) rename assets/js/{39.32f30f46.js => 39.566dfe25.js} (99%) rename assets/js/{40.7b598302.js => 40.3422d9ed.js} (92%) rename assets/js/{43.c8d5e35e.js => 43.9ec9da6a.js} (94%) rename assets/js/{44.449d86f5.js => 44.52ad2ab1.js} (99%) rename assets/js/{45.d3bea9da.js => 45.ddc8a78c.js} (98%) rename assets/js/{46.f0bd9579.js => 46.5e287b20.js} (99%) rename assets/js/{50.d222d982.js => 50.641ebe19.js} (91%) rename assets/js/{51.8f645cd4.js => 51.6af9064b.js} (99%) rename assets/js/{52.65514aa6.js => 52.bf4997a6.js} (97%) rename assets/js/{56.691644b3.js => 56.053616fb.js} (99%) rename assets/js/{57.61a69863.js => 57.7ac2880d.js} (99%) rename assets/js/{58.5a28316f.js => 58.51348c99.js} (99%) rename assets/js/{59.f8a39860.js => 59.4af09aee.js} (97%) rename assets/js/{60.273bc29a.js => 60.e878dcab.js} (94%) rename assets/js/{61.88271f1c.js => 61.0ddefe13.js} (99%) rename assets/js/{62.b45b08d8.js => 62.d084afb5.js} (95%) rename assets/js/{63.7c518206.js => 63.6c05ff9c.js} (99%) rename assets/js/{65.dc4b9b41.js => 65.cd699744.js} (99%) rename assets/js/{66.4a3051de.js => 66.ad256917.js} (99%) rename assets/js/{67.7a697e57.js => 67.71b92a30.js} (98%) rename assets/js/{app.35d642c7.js => app.addfb1ab.js} (84%) diff --git a/404.html b/404.html index 8644715b..27b19295 100644 --- a/404.html +++ b/404.html @@ -20,11 +20,11 @@ - +

404s suck! And we're sorry for this one.

Good thing the permaweb has no more 404s

- + diff --git a/arns/index.html b/arns/index.html index 84cb43fc..34d2d4d8 100644 --- a/arns/index.html +++ b/arns/index.html @@ -20,11 +20,11 @@ - +

# Arweave Name System (ArNS)

# Overview

Arweave URLs and Transaction IDs are long, difficult to remember, and occasionally miscategorized as spam. The Arweave Name System (ArNS) aims to resolve these problems in a decentralized manner. ArNS is a censorship-resistant naming system stored on Arweave, purchased with IO tokens, enabled through AR.IO gateway domains, and used to connect friendly domain names to permaweb dApps, web pages, data, and identities.

It's like an open, permissionless address book for anything on the permaweb, powered by the aoComputer.

This system works similarly to traditional DNS services, where users can purchase a name in a registry and DNS Name servers resolve these names to IP addresses. The system shall be flexible and allow users to purchase names permanently or lease them for a defined period based on their use case. With ArNS, the registry is decentralized, permanent, and stored on Arweave (through the aoComputer). This means that apps and infrastructure cannot just read the latest state of the registry but can also check any point in time in the past, creating a “Wayback Machine” of permanent data.

Users can register a name, like ardrive, within the ArNS Registry. Before owning a name, they must create an Arweave Name Token (ANT), an aoCOmputer process and open-source protocol used by ArNS to track the ownership and control over the name. ANTs allow the owner to set a pointer to any type of permaweb data, like a page, dApp or file, via its Arweave Transaction ID.

Each AR.IO gateway acts as both a smart contract cache and an ArNS Name resolver. They will generate the latest state of both the ArNS Registry and its related ANTs and serve this information rapidly for apps and users. AR.IO gateways will also resolve that name as one of their own subdomains, e.g., https://ardrive.arweave.net and proxy all requests to the associated Arweave Transaction ID. This means that ANTs work across all AR.IO gateways that support them: https://ardrive.ar-io.dev, https://ardrive.g8way.io/, etc.

Users can easily reference these friendly names in their browsers, and other applications and infrastructure can build rich solutions on top of these ArNS primitives.

Arweave Name System Interactions

# Name Registry

The ArNS Registry is a list of all the registered names and their associated ANT AO process Ids. Registering a name requires spending IO tokens based upon the name length and purchase type. The system shall allow users to either lease a name on a yearly basis (maximum up to 5 years) or purchase that name permanently.

The registry uses the following key rules, embedded within the AR.IO AO process:

  • The genesis prices of names are set within the contract itself; these are the starting conditions.
  • Name prices vary based on name length, purchase type (lease vs buy), lease duration, and the current Demand Factor. See the Dynamic Pricing section for more details.
  • Name records in the registry each include a pointer to its Arweave Name Token Smart Contract process address, its lease end time, and undername allocation.
  • Anyone with available IO Tokens can extend any name’s active lease.
  • Anyone with available IO Tokens can purchase undername space for any name.
  • When a lease expires, there is a grace period where it can still be extended before anyone else can repurchase the name with a new ANT.

Once added, name records cannot be removed from the registry. A leased name’s associated ANT smart contract address cannot be changed until the lease has expired and a new one is purchased. Care must be taken by the owners of permanent name purchases to ensure that their ANT supports an evolve ability should it be desired to add or modify functionality in the future as these name purchases are permanently tied to the associated ANT. Owners of permanently purchased names must understand the consequences of private key loss, which results in not being able to update any data pointers for this name.

# Name Validation Rules

All names registered shall meet the following criteria:

  1. Valid names include only numbers 0-9, characters a-z and dashes.
  2. Dashes cannot be leading or trailing characters.
  3. Dashes cannot be used in single character domains.
  4. 1 character minimum, 51 characters maximum.
  5. Shall not be an invalid name predesignated to prevent unintentional use/abuse such as www.

# Arweave Name Token (ANT)

To establish ownership of a record in the ArNS Registry, each record contains both a friendly name and a reference to an Arweave Name Token, ANT. Name Tokens are unique aoComputer process tokens that give their owners the ability to update the Arweave Transaction IDs that their associated friendly names point to.

The ANT process is a standardized contract that contains the specific ArNS Record specification required by AR.IO gateways who resolve ArNS names and their Arweave Transaction IDs. It also contains other basic functionality to establish ownership and the ability to transfer ownership and update the Arweave Transaction ID.

Name Tokens have an owner, who can transfer the token and control all of its modifiable settings. These settings include modifying the time to live (ttl) for each name contained in the ANT, and other settings like the ANT Name, Ticker, and an ANT Controller. The controller can only manage the ANT and set and update records, name, and the ticker, but cannot transfer the ANT. Note that ANTs are initially created by an end user, in accordance with network standards, who then has to ability to transfer its ownership or assign a controller as they see fit.

Secondary markets could be created by ecosystem partners that facilitate the trade of Name Tokens. Additionally, tertiary markets could be created that support the leasing of these friendly names to other users. Such markets, if any, would be created by third parties unrelated to and outside of the scope of this paper or control of the Foundation.

The table below indicates some of the possible interactions with an ANT and who can perform them:

ANT Interactions
Type ANT Owner ANT Controller Any IO Token Holder
Transfer ANT
Add / remove controllers
Set records (pointers)
Update records, name, ticker
Extend / renew lease
Increase undernames
ANT Interactions

# Under_Names

ANT owners and controllers can configure multiple subdomains for their registered ArNS name known as “under_names” or more easily written “undernames”. These undernames are assigned individually at the time of registration or can be added on to any registered name at any time.

Undernames use an underscore “_” in place of a more typically used dot “.“ to separate the subdomain from the main ArNS domain.

This means users can trust dapp_ardrive just like you would trust ardrive since the owner of ardrive is the only one who can configure dapp_ardrive.

Some other features that undernames allow include:

  • Undernames are configured in the ANT that is referenced for a given name. ANT owners can add more undernames as subDomains in the ANT’s records object, each of which can point to a different Arweave Transaction ID.
  • Each registered name is provided with an allocation of 10 undernames by default. Additional undername space can be purchased individually and as needed.
  • Other users could never register a name that resembles an undername on ardrive since “_” is not allowed to be registered in the ArNS registry.
  • Another user can register dapp-ardrive but this is a separate ArNS domain altogether. In traditional DNS, it’s like the difference in trusting dapp-ardrive.io(suspicious!) over the legitimate dapp.ardrive.io
  • Undernames can go multiple levels deep, like version_dapp_ardrive but must not be longer than the total MAX_NAME_LENGTH of an ArNS name. The total amount of characters for a name string consisting of undernames and underscore separators is 63 characters.

Undernames give more versatility and utility to owning an ArNS name.

# Addressing Variable Market Conditions

The future market landscape is unpredictable, and the AR.IO Network smart contract is designed to be immutable, operating without governance or mechanisms for manual intervention. In addition, the traditional method of employing a pricing oracle to fix prices relative to a stable currency is not viable due to the infancy of the network as well as the inherent reliance on outside dependencies. Considering this, ArNS is designed to be self-contained and adaptive, ensuring that name prices always mirror network activity and market conditions.

To achieve this, ArNS incorporates a dynamic pricing model that utilizes a “Demand Factor” to adjust fees in line with ArNS purchase activity.

ArNS is designed to ensure that name valuations are always in sync with their true market worth, despite the unchangeable nature of the smart contract it operates on.

# Dynamic Pricing Model

The Arweave Name System (ArNS) introduces an adaptive pricing model for registering names within the AR.IO Network. The core objective is to strike a balance between market demand and pricing fairness, leveraging both static and dynamic pricing elements. The system differentiates prices based on character lengths of names and offers varied purchasing options such as leasing, permanent acquisition, and undernames.

A unique feature of the ArNS pricing mechanism is the integration of a Demand Factor (DF), a dynamic multiplier that adjusts name prices in response to market demand. The DF is determined by comparing the total revenue in IO tokens from the current period to a moving average of revenues from the preceding period window. Depending on whether revenue is above, below, or equal to this average, the DF can increase or decrease. These adjustments are contained within boundaries to prevent extreme pricing variations.

This comprehensive approach ensures that ArNS names are accessible and reasonably priced, adapting to market trends while maintaining an equitable and maintenance-free registration environment.

# Pricing Scenarios

There are several pricing models for leasing and purchasing names:

  • Leased Name: Allows a user to lease a name for a certain duration and have it available for use immediately by the lessee.

  • Permanent Name: Allows a user to purchase a name permanently and have it available for use immediately by the owner.

# Dynamic Pricing Mechanics

Names are initially priced according to the Genesis Registration Fee (GRF), as set in the AR.IO smart contract, with prices varying based on the length of the name. As the network's activity progresses, these fees give way to Base Registration Fees (BRF), which are modified by periodic step adjustments. The Demand Factor (DF) is a crucial component that dynamically scales prices, fluctuating with the network’s revenue trends.

Revenue in the network accumulates within the Protocol Balance through various streams, such as instant name leases or purchases, lease extensions, and under_name transactions. This cumulative revenue impacts the Demand Factor, which in turn influences the current name prices.

The DF is adjusted by comparing the recent period’s revenue against a Revenue Moving Average (RMA) from the preceding seven periods. Based on this comparison, the DF can either increase, to reflect greater demand, or decrease, in response to diminished revenue, all within predetermined limits to prevent drastic fluctuations in pricing

The pricing system articulates various fees:

  • The Adjusted Registration Fee (ARF) is the BRF modified by the DF.

  • The Annual Fee is set as a proportion of the ARF.

  • Instant Lease Registration and Permabuy prices are derived from the ARF, adding the calculated annual fees over the desired years.

The DF’s modifications are controlled by the network's recent performance against the RMA. An increase in revenue leads to a DF rise, signifying a thriving market demand, while a decrease indicates the opposite. This responsive adjustment mechanism ensures that the pricing model remains aligned with actual market activity.

Under_names are bundled with name registrations with additional ones available for purchase. The cost for extra under_names is a percentage of the current BRF, altered by the DF.

# Step Pricing Mechanics

The dynamic model shall utilize a “Step Pricing” concept that acts as a stabilizing mechanism to counteract swift and dramatic market shifts, ensuring registration costs remain aligned and predictable. Step pricing adjusts the Base Registration Fees when the Demand Factor reaches its minimum value for an extended period, updating the BRF to align with the current ARF, and resetting the DF to a neutral value. This allows for base prices to lower in extended droughts of low demand or high token value resulting in lower revenue generated to the protocol balance.

The below chart represents Step Pricing in action:

Step Pricing Action - Declining Demand
- + diff --git a/arweave/index.html b/arweave/index.html index 91e40d22..1619d93f 100644 --- a/arweave/index.html +++ b/arweave/index.html @@ -20,11 +20,11 @@ - +

# Arweave

# The Permanence Pie

The permanent data storage ecosystem can be thought of as a three-tiered arrangement of protocols, services, and applications – dubbed here as “The Permanence Pie”.

Diagram 1: The Shell of Permanence Pie

The base layer of that pie is the Arweave protocol and network, which is the backbone of the permanent data storage ecosystem. It provides the infrastructure for data to be stored on the network in a decentralized manner and incentivizes nodes to keep the data stored for long periods of time.

The second layer is made up of services that sit on top of the Arweave protocol and network. These services include gateways, data retrieval services, and computation that help to provide a seamless and functional experience for users, creators, and developers.

Finally, the top layer of the pie consists of applications that utilize the data stored on the Arweave network. This includes everything from simple applications that allow users to access and view their data to complex, decentralized applications that use the Arweave network as their backbone.

Each layer of the Permanence Pie is crucial to the overall success and growth of the permanent data storage ecosystem. The Arweave protocol and network provide the foundation for data storage, the services layer helps to facilitate data retrieval and usage, and the application layer brings the benefits of the ecosystem to users and developers alike.

# What Is Arweave

Arweave is a decentralized Layer 1 data storage protocol optimized for long-term permanent storage through its unique proof of access mechanism and tokenomic endowment model. It can be thought of as a global, permissionless hard drive.

The information stored on Arweave is immutable and globally replicated by miner nodes. Instead of a traditional blockchain ledger which links blocks of transactions together in linear sequence, Arweave arranges blocks in a web known as the blockweave. These miner nodes secure the blockweave by operating the Succinct Proof of Random Access (SPoRA) algorithm. SPoRA requires miners to prove that they have access to recall randomly selected bits of weave data in order to produce and share a block. If successful, miners are rewarded in Arweave’s native AR token. These token rewards are derived from transaction fees as well as the network’s storage endowment. The endowment is a protocol-controlled pool of tokens designed to fund the projected cost of storage for 200+ years.

Diagram 2: Arweave - The Base Storage Layer

Arweave is file type agnostic – any type of file ranging from simple text files to family photos to complex web applications and archival databases can be stored on the network. To upload data, users must pay an amount of AR proportional to the size of the files being uploaded. Arweave is unique when compared with other decentralized storage solutions in that users only pay once to upload their files, then that is it – the files will be stored in perpetuity without any additional upkeep or subscription fees paid by the user.

The Arweave protocol is designed to handle 1,000 base layer transactions per block with new blocks being mined roughly every two minutes. Each transaction may also store an unbounded number of signed, non-AR-transacting data items assembled into a bundle (i.e., a bundled data item). Since its launch in 2018, this scalable architecture has allowed the network's weave size (total data stored on the network) to grow to 140.8 TB with approximately 1.5 billion base layer transactions and bundled data items submitted from over 181k unique wallets. The Arweave protocol endowment has received 60.7k AR to cover the projected storage costs with a cost of storage 0.858 AR/GiB. *

* data as of November 20, 2023

# Gateways

Gateways act as the front door to the permaweb. They are infrastructure utilities that sit above the base storage layer and allow users to write, access, and query the information stored on Arweave. Gateways are specialized nodes responsible for data ingest (data "in") and data egress (data "out").

For access / egress, gateways allow for data retrieval, caching, and serving as well as indexing transactions into a database that can be easily queried at scale. With bundling functionality, gateways can act as services allowing users to write and seed new data the Arweave network.

These "in and out" functions are not performed by the Arweave mining nodes which are optimized for securing the Layer 1 blockweave and replicating information throughout the network through a mechanism known as Wildfire.

Diagram 3: Gateways - The Ingest and Access Component

By taking on these responsibilities, gateways allow low cost and maintenance free hosting of static and dynamic content for users, creators, and developers. But there are costs associated with operating a gateway and Arweave does not offer any tokenomic incentives to offset these expenses. As the permaweb grows, these costs can become very significant.

Arweave.net, the primary community gateway, has scaled to meet the needs of the entire Arweave ecosystem and stored the entire weave. Over the last 6 months, this gateway indexed and cached approximately 3.4 million base layer transactions and bundled data items per day, served 233 million requests for data and node information per day, and responded to 3.2 million GQL queries per day. *

Gateway use cases, and the types of administrators who operate them, can range from at-home projects hosted by hobbyists to larger decentralized platforms and dApps run by small teams, all the way up to scaled out environments capable of supporting enterprise offerings.

* data as of November 20, 2023

# aoComputer

AO is a global supercomputer built on Arweave. This actor-oriented machine is a single, unified computing environment, hosted on a heterogenous set of nodes in a distributed network. AO is designed to offer an environment in which an arbitrary number of parallel processes can be resident, coordinating through an open message passing layer. This message passing standard connects the machine's independently operating processes together into a 'web' -- in the same way that websites operate on independent servers but are conjoined into a cohesive, unified experience via hyperlinks.

Diagram 4: AO - The Supercomputer and Smart Contract Protocol

With AO, developers can create processes that act as smart contracts with token-like properties which can then be used to incorporate incentive structures into applications and infrastructure. The AR.IO Network leverages this technology for development of its network protocol and IO token.

# The Permaweb

The permaweb is the third and final layer of the permanence pie. The permaweb stands for the permanent web, a collection of all the webpages, apps, and files stored on top of the Arweave network and enlivened with the functionality of the AR.IO Network. For users and builders, the permaweb offers low-cost, zero maintenance, permanent hosting of their web apps, files, and web pages.

Diagram 5: The Permanence Pie

AR.IO is a global network, protocol, and currency built on top of Arweave that enables the permaweb.

# References and Further Reading

The following resources were used as reference material for this section and can provide the interested reader with additional information:

- + diff --git a/assets/js/33.b0845a95.js b/assets/js/33.739a1ec4.js similarity index 99% rename from assets/js/33.b0845a95.js rename to assets/js/33.739a1ec4.js index 8d748efd..cac5dd51 100644 --- a/assets/js/33.b0845a95.js +++ b/assets/js/33.739a1ec4.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{335:function(e,t,a){"use strict";a.r(t);var n=a(10),r=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"contributing-to-ar-io-docs"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#contributing-to-ar-io-docs"}},[e._v("#")]),e._v(" Contributing to AR.IO Docs")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("The AR.IO Docs serve as a primary source of information and guidance for users, developers, and contributors interacting with the AR.IO platform. As such, maintaining its clarity, accuracy, and comprehensiveness is paramount. This document outlines the standardized procedures and best practices for contributing to these docs. By following this guide, contributors can ensure that their additions and modifications align with the established documentation structure and conventions.")]),e._v(" "),t("p",[e._v("Contributions can range from minor typographical corrections to the addition of entire new sections. Regardless of the scale, every contribution is valuable. Proper setup, understanding the file structure, and familiarity with the submission process are essential components of effective contribution. The sections that follow delve into each stage of the contribution process, from initial setup and local development to the submission of changes for review.")]),e._v(" "),t("p",[e._v("By adhering to this guide, contributors can streamline the review and integration of their changes, ensuring that the AR.IO Docs remain a reliable and up-to-date resource for all its users.")]),e._v(" "),t("h2",{attrs:{id:"prerequisites"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[e._v("#")]),e._v(" Prerequisites")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Github account"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://git-scm.com/book/en/v2/Getting-Started-Installing-Git",target:"_blank",rel:"noopener noreferrer"}},[e._v("Git installed on your computer"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Nodejs version 16.15.1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://classic.yarnpkg.com/lang/en/docs/install/#windows-stable",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn installed on your computer"),t("OutboundLink")],1)])]),e._v(" "),t("h2",{attrs:{id:"initial-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#initial-setup"}},[e._v("#")]),e._v(" Initial Setup")]),e._v(" "),t("h3",{attrs:{id:"fork-the-repository"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#fork-the-repository"}},[e._v("#")]),e._v(" Fork the Repository")]),e._v(" "),t("p",[e._v("While logged into your Github account, visit the repository for the "),t("a",{attrs:{href:"https://github.com/ar-io/public-site",target:"_blank",rel:"noopener noreferrer"}},[e._v("AR.IO public site"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v('Near the top right of the page, there will be a button labeled "fork".')]),e._v(" "),t("p",[e._v("Clicking this will begin the process of making a copy of the public-site repo under your own account.")]),e._v(" "),t("p",[e._v('On the next screen, make sure the box labeled "copy the '),t("code",[e._v("main")]),e._v(' branch only" is NOT checked, then click "create fork"')]),e._v(" "),t("p",[e._v("This process only needs to be completed once, you will not need to create a new fork each time you want to submit an edit.")]),e._v(" "),t("h3",{attrs:{id:"clone-your-fork"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#clone-your-fork"}},[e._v("#")]),e._v(" Clone your Fork")]),e._v(" "),t("p",[e._v("Once you have your fork created, you'll need to clone it onto your computer in order to make your edits.")]),e._v(" "),t("p",[e._v("Navigate the the location you want to clone the repo and open a terminal (or command prompt/powershell on Windows)")]),e._v(" "),t("p",[e._v("run the command:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("git clone -b main https://github.com/yourusernamehere/public-site\n")])])]),t("p",[e._v('Be sure to replace "yourusernamehere" with your Github username')]),e._v(" "),t("h3",{attrs:{id:"link-upstream"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#link-upstream"}},[e._v("#")]),e._v(" Link Upstream")]),e._v(" "),t("p",[e._v('The AR.IO Public Site, and especially the docs portal, is constantly evolving. You are going to want to be able to pull updates from the AR.IO repo into your fork without having to delete it and create a new fork. To do this, you can link the original repo to your fork as "upstream".')]),e._v(" "),t("p",[e._v("From inside the fork on your computer, run the command:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("git remote add upstream https://github.com/ar-io/public-site\n")])])]),t("p",[e._v("You can then check to make sure the upstream source was added with:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("git remote -v\n")])])]),t("h4",{attrs:{id:"pull-updates"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#pull-updates"}},[e._v("#")]),e._v(" Pull updates")]),e._v(" "),t("p",[e._v('Periodically, you should check if there have been updates to the original repo by using"')]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("git fetch upstream\n")])])]),t("p",[e._v('If changes show up, you can merge them into your own repo by ensuring you are on the "main" branch, and then running the merge command:')]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("git checkout main\ngit merge upstream/main\n")])])]),t("h3",{attrs:{id:"install-dependencies-for-docs-portal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-dependencies-for-docs-portal"}},[e._v("#")]),e._v(" Install Dependencies for Docs Portal")]),e._v(" "),t("p",[e._v("The AR.IO Public Site is primarily a static html website. There are no dependencies that need to be installed in order to launch and view the site as a whole. However, the docs portal is a Vuepress app nested inside that html website. In order to launch the docs portal for review, or to build it into static html, you are going to need to install its dependencies.")]),e._v(" "),t("p",[e._v("From in the root directory of the Public Site, navigate into the docs portal and run the install command:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("cd docsGenerator/docs\nyarn install\n")])])]),t("p",[t("strong",[e._v("NOTE")]),e._v(": This repository uses yarn to manage dependency versions, installing dependencies with npm instead of yarn can lead to errors.")]),e._v(" "),t("h2",{attrs:{id:"editing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#editing"}},[e._v("#")]),e._v(" Editing")]),e._v(" "),t("p",[e._v("Vuepress generates content using markdown (.md) files. Each markdown file can be displayed as its own content page. The location (url) of each page is "),t("strong",[e._v("generally")]),e._v(" determined by the file's location in the file-structure of the vuepress app, though this can be overridden by using frontmatter. Adding a new content page can be as simple as dropping a new file in the appropriate location in the file-structure and adding a reference to it in the sidebar configuration file.")]),e._v(" "),t("h3",{attrs:{id:"branches"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#branches"}},[e._v("#")]),e._v(" Branches")]),e._v(" "),t("p",[e._v("You should always ensure that you are starting from an up to date version of the main branch. See "),t("a",{attrs:{href:"#pull-updates"}},[e._v("Pull Updates")]),e._v(" for instructions.")]),e._v(" "),t("p",[e._v("Once you are up to date and on the main branch, you should always create a new branch specific to the changes you are making. This can be done with the command:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("git checkout -b \n")])])]),t("p",[e._v("Replace "),t("code",[e._v("")]),e._v(" with a short, descriptive name for what you are changing. Do not reuse branches for future edits, you should always create a fresh branch based on the most up to date version of the main branch.")]),e._v(" "),t("h3",{attrs:{id:"what-is-markdown"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#what-is-markdown"}},[e._v("#")]),e._v(" What is Markdown?")]),e._v(" "),t("p",[e._v("Markdown is a lightweight markup language that allows you to format plain text documents with simple syntax. It's commonly used for creating documentation, README files, and web content. Markdown files are easy to read, write, and convert into various formats, such as HTML.")]),e._v(" "),t("p",[e._v("Here are some commonly used Markdown syntax elements:")]),e._v(" "),t("ol",[t("li",[t("p",[t("strong",[e._v("Headings")]),e._v(": Use hash symbols (#) to denote headings. The number of hashes determines the heading level (e.g., "),t("code",[e._v("# Heading 1")]),e._v(", "),t("code",[e._v("## Heading 2")]),e._v(").")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Emphasis")]),e._v(": Surround text with asterisks (*) or underscores (_) for emphasis. For example, "),t("code",[e._v("*italic\\*")]),e._v("or"),t("code",[e._v("_italic_")]),e._v("renders as italic, and"),t("code",[e._v("**bold**")]),e._v("or"),t("code",[e._v("**bold**")]),e._v(" renders as bold.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Lists")]),e._v(": Create unordered lists by starting lines with hyphens (-), plus signs (+), or asterisks (*). Ordered lists use numbers (1., 2., etc.).")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Links")]),e._v(": Enclose the linked text in square brackets [] and the URL in parentheses (). For example, "),t("a",{attrs:{href:"https://ar.io",target:"_blank",rel:"noopener noreferrer"}},[e._v("AR.IO"),t("OutboundLink")],1),e._v(" creates a link to AR.IO's Public website.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Images")]),e._v(": Similar to links, but with an exclamation mark (!) at the beginning. For example, "),t("code",[e._v("![Alt Text](image.jpg)")]),e._v(" embeds an image.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Code")]),e._v(": Use backticks ( ` ) to denote inline code . For code blocks, indent each line with four spaces or use triple backticks (```) before and after the code block.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Horizontal Rule")]),e._v(": To create a horizontal rule, use three or more hyphens (-), asterisks (*), or underscores (_).")])])]),e._v(" "),t("p",[e._v("To denote a Markdown file, save it with the .md extension (e.g., "),t("code",[e._v("document.md")]),e._v(").")]),e._v(" "),t("p",[e._v("When used in a VuePress app, Markdown files are rendered into HTML by VuePress's built-in Markdown compiler, which supports most standard html tags as well. This includes the ability to assign css classes for additional styling.")]),e._v(" "),t("h3",{attrs:{id:"frontmatter"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter"}},[e._v("#")]),e._v(" Frontmatter")]),e._v(" "),t("p",[e._v("Vuepress supports injecting certain options into your markdown files. These options, collectively, are known as frontmatter. There are 5 items that you will primarily use for these docs. All of them may be omitted without issue, or included for additional customization. These are:")]),e._v(" "),t("ol",[t("li",[t("p",[t("strong",[e._v("title")]),e._v(": This sets the title for the page. It will be displayed on the left side of the browser tab when a user accesses that page. If omitted, the title will be pulled from the sidebar for that page.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("permalink")]),e._v(": Vuepress sets urls based on the filestructure of the project. This can be overridden using permalink, and a custom url can be assigned to a specific page.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("prev")]),e._v(": Sets the value for the “previous page” button that appears at the bottom of the page. If omitted, this will be pulled from the sidebar. The button can be removed from the page by setting the value to “false”.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("next")]),e._v(": Similar to "),t("code",[e._v("prev")]),e._v(", this sets the “next page” button value.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("tags")]),e._v(": accepts a list of key words that can be accessed by the “search” function, as well as helping with SEO.")])])]),e._v(" "),t("p",[e._v("Frontmatter uses YAML syntax, sandwiched inside two lines of three dashes "),t("code",[e._v("---")]),e._v(" , like so:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('---\ntitle: Frontmatter Instructions\npermalink: "/frontmatter/"\nprev: "./what-is-markdown"\nnext: false\ntags: ["frontmatter", "permalink", "other tags"]\n---\n')])])]),t("h3",{attrs:{id:"css"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#css"}},[e._v("#")]),e._v(" CSS")]),e._v(" "),t("p",[e._v("If you add html elements into your markdown file, you can assign custom css classes to them. The easiest way to customize a class is to add it to the primary global css file located at "),t("code",[e._v("/docsGenerator/docs/src/.vuepress/theme/styles/index.styl")])]),e._v(" "),t("p",[e._v("The file is written in stylus, but supports standard css syntax.")]),e._v(" "),t("p",[t("strong",[e._v("NOTE")]),e._v(": It is a good idea to be overly specific with your class names, as the content of the index.styl file will affect the entire docs portal.")]),e._v(" "),t("h3",{attrs:{id:"adding-to-the-sidebar"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#adding-to-the-sidebar"}},[e._v("#")]),e._v(" Adding to the Sidebar")]),e._v(" "),t("p",[e._v("The sidebar is rendered from a JavaScript array of objects. It is possible to configure multiple different sidebars, and have them display depending on the filepath a user is currently viewing. The docs portal only uses a single default sidebar at the moment. The configuration file for the sidebar is located at "),t("code",[e._v("/docs/src/.vuepress/theme/configs/default_sidebar_config.js")])]),e._v(" "),t("p",[e._v("To add a new item to the sidebar, simply choose where you want the item to appear, and insert an object with the following format:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\ntitle: "Text you want to display",\npath: "Filepath to new file"\n}\n')])])]),t("p",[e._v("The sidebar, when rendered, will find all the H2 tags (##) in the file, and automatically display them as sub-headers in the sidebar, which work as links to that specific section of the page.")]),e._v(" "),t("p",[e._v("You can also make a sidebar item into an expandable menu by adding a children attribute, which will be an array of objects similar to the parent:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\ntitle: "Label",\nchildren: [\n {\n title: "First Subtext",\n path: "Filepath to file"\n },\n {\n title: "Second Subtext",\n path: "Filepath to second file"\n }\n ]\n}\n')])])]),t("p",[e._v("Children can be nested for several layers if desired.")]),e._v(" "),t("p",[e._v("Below is the current sidebar configuration to serve as an example:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('module.exports = [\n {\n title: "Welcome",\n path: "/",\n },\n {\n title: "Network Overview",\n children: [\n {\n title: "Introduction",\n path: "/introduction",\n },\n {\n title: "Arweave and the Permaweb",\n path: "/arweave",\n },\n {\n title: "The IO Token",\n path: "/token.md",\n },\n {\n title: "Gateway Architecture",\n path: "/gateways/gateways",\n },\n {\n title: "Network Protocols",\n path: "/network-protocols"\n },\n {\n title: "Arweave name System (ArNS)",\n path: "/arns.md",\n },\n ],\n },\n {\n title: "Gateway Operators",\n children: [\n {\n title: "Getting Started",\n children: [\n {\n title: "Overview",\n path: "/gateways/ar-io-node/overview"\n },\n {\n title: "Setting up on Windows",\n path: "/gateways/ar-io-node/windows-setup",\n },\n {\n title: "Setting up on Linux",\n path: "/gateways/ar-io-node/linux-setup",\n },\n {\n title: "Join the Network",\n path: "/gateways/ar-io-node/testnet"\n },\n {\n title: "Upgrading",\n path: "/gateways/ar-io-node/upgrading"\n }\n\n ],\n },\n {\n title: "Advanced Configurations",\n path: "/gateways/ar-io-node/advanced-config"\n },\n {\n title: "AR.IO HTTP API",\n path: "/gateways/ar-io-node/api",\n },\n {\n title: "AR.IO Admin API",\n path: "/gateways/ar-io-node/admin/admin-api"\n }\n ],\n },\n {\n title: "Ecosystem and Community",\n children: [\n {\n title: "AR.IO Foundation",\n path: "/foundation",\n },\n {\n title: "AR.IO Labs",\n path: "/labs",\n },\n {\n title: "Community Resources",\n path: "/community-resources",\n },\n ],\n },\n {\n title: "Glossary",\n path: "/glossary",\n },\n];\n')])])]),t("h2",{attrs:{id:"development-and-deployment"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#development-and-deployment"}},[e._v("#")]),e._v(" Development and Deployment")]),e._v(" "),t("h3",{attrs:{id:"launching-development-server"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#launching-development-server"}},[e._v("#")]),e._v(" Launching Development Server")]),e._v(" "),t("p",[e._v("From inside the "),t("code",[e._v("docsGenerator/docs")]),e._v(" directory in your terminal, you can launch a development server in order to preview your edits. This will automatically update as you are making edits, but if some changes do not immediately appear you can shut the server down and restart it for a hard refresh:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("yarn dev\n")])])]),t("p",[e._v("The development server will, by default, launch at localhost:8080. The server can be shut down with "),t("code",[e._v("ctrl+c")]),e._v(" or by killing the terminal used to start it.")]),e._v(" "),t("p",[e._v("The most common error when attempting to launch the development server comes from not having a compatible version of Nodejs. If you get an error, try switching to Node version 16.15.1")]),e._v(" "),t("h3",{attrs:{id:"building-static-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#building-static-files"}},[e._v("#")]),e._v(" Building Static Files")]),e._v(" "),t("p",[e._v("The Vuepress docs portal is nested inside a static html website. For ease of deployment, Vuepress can build the docs portal into static html files and place them in the docs/ folder in the root of the website. This is not necessary for submitting a pr, but it may be useful for local testing. You can do this by navigating your terminal inside the docs portal Vuepress app "),t("code",[e._v("docsGenerator/docs")]),e._v(" and running the command:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("yarn build\n")])])]),t("h3",{attrs:{id:"creating-your-pull-request"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-your-pull-request"}},[e._v("#")]),e._v(" Creating Your Pull Request")]),e._v(" "),t("p",[e._v("Once you have all of your local changes committed and synced to your github account, you can create a Pull Request and have the team review the changes for integration into the public site.")]),e._v(" "),t("ol",[t("li",[t("p",[e._v("Ensure that all of your changes are committed to your own repository. All commits should follow the "),t("a",{attrs:{href:"https://www.conventionalcommits.org/en/v1.0.0/#summary",target:"_blank",rel:"noopener noreferrer"}},[e._v("Conventional Commits"),t("OutboundLink")],1),e._v(" standards.")])]),e._v(" "),t("li",[t("p",[e._v("Navigate to your forked repository's page on GitHub.")])]),e._v(" "),t("li",[t("p",[e._v("Switch to the branch you created for your changes.")])]),e._v(" "),t("li",[t("p",[e._v('You should see a banner indicating that you recently pushed a new branch. Click on the "Compare & pull request" button on that banner.')])]),e._v(" "),t("li",[t("p",[e._v('Make sure the base repository is set to the original AR.IO repository and the base branch is set to "staging".')])]),e._v(" "),t("li",[t("p",[e._v("Provide a brief description of your changes in the pull request form. Ensure your title adheres to the "),t("a",{attrs:{href:"https://www.conventionalcommits.org/en/v1.0.0/#summary",target:"_blank",rel:"noopener noreferrer"}},[e._v("Conventional Commits"),t("OutboundLink")],1),e._v(" standards.")])]),e._v(" "),t("li",[t("p",[e._v("Review the changes and confirm they appear as expected.")])]),e._v(" "),t("li",[t("p",[e._v('Once you\'re ready, click on the "Create pull request" button. The AR.IO team will review the request and, if approved, merge your changes into the staging branch of the repository. The changes will later be merged into the main branch for production deployment.')])])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{334:function(e,t,a){"use strict";a.r(t);var n=a(10),r=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"contributing-to-ar-io-docs"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#contributing-to-ar-io-docs"}},[e._v("#")]),e._v(" Contributing to AR.IO Docs")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("The AR.IO Docs serve as a primary source of information and guidance for users, developers, and contributors interacting with the AR.IO platform. As such, maintaining its clarity, accuracy, and comprehensiveness is paramount. This document outlines the standardized procedures and best practices for contributing to these docs. By following this guide, contributors can ensure that their additions and modifications align with the established documentation structure and conventions.")]),e._v(" "),t("p",[e._v("Contributions can range from minor typographical corrections to the addition of entire new sections. Regardless of the scale, every contribution is valuable. Proper setup, understanding the file structure, and familiarity with the submission process are essential components of effective contribution. The sections that follow delve into each stage of the contribution process, from initial setup and local development to the submission of changes for review.")]),e._v(" "),t("p",[e._v("By adhering to this guide, contributors can streamline the review and integration of their changes, ensuring that the AR.IO Docs remain a reliable and up-to-date resource for all its users.")]),e._v(" "),t("h2",{attrs:{id:"prerequisites"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[e._v("#")]),e._v(" Prerequisites")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Github account"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://git-scm.com/book/en/v2/Getting-Started-Installing-Git",target:"_blank",rel:"noopener noreferrer"}},[e._v("Git installed on your computer"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Nodejs version 16.15.1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://classic.yarnpkg.com/lang/en/docs/install/#windows-stable",target:"_blank",rel:"noopener noreferrer"}},[e._v("Yarn installed on your computer"),t("OutboundLink")],1)])]),e._v(" "),t("h2",{attrs:{id:"initial-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#initial-setup"}},[e._v("#")]),e._v(" Initial Setup")]),e._v(" "),t("h3",{attrs:{id:"fork-the-repository"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#fork-the-repository"}},[e._v("#")]),e._v(" Fork the Repository")]),e._v(" "),t("p",[e._v("While logged into your Github account, visit the repository for the "),t("a",{attrs:{href:"https://github.com/ar-io/public-site",target:"_blank",rel:"noopener noreferrer"}},[e._v("AR.IO public site"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v('Near the top right of the page, there will be a button labeled "fork".')]),e._v(" "),t("p",[e._v("Clicking this will begin the process of making a copy of the public-site repo under your own account.")]),e._v(" "),t("p",[e._v('On the next screen, make sure the box labeled "copy the '),t("code",[e._v("main")]),e._v(' branch only" is NOT checked, then click "create fork"')]),e._v(" "),t("p",[e._v("This process only needs to be completed once, you will not need to create a new fork each time you want to submit an edit.")]),e._v(" "),t("h3",{attrs:{id:"clone-your-fork"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#clone-your-fork"}},[e._v("#")]),e._v(" Clone your Fork")]),e._v(" "),t("p",[e._v("Once you have your fork created, you'll need to clone it onto your computer in order to make your edits.")]),e._v(" "),t("p",[e._v("Navigate the the location you want to clone the repo and open a terminal (or command prompt/powershell on Windows)")]),e._v(" "),t("p",[e._v("run the command:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("git clone -b main https://github.com/yourusernamehere/public-site\n")])])]),t("p",[e._v('Be sure to replace "yourusernamehere" with your Github username')]),e._v(" "),t("h3",{attrs:{id:"link-upstream"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#link-upstream"}},[e._v("#")]),e._v(" Link Upstream")]),e._v(" "),t("p",[e._v('The AR.IO Public Site, and especially the docs portal, is constantly evolving. You are going to want to be able to pull updates from the AR.IO repo into your fork without having to delete it and create a new fork. To do this, you can link the original repo to your fork as "upstream".')]),e._v(" "),t("p",[e._v("From inside the fork on your computer, run the command:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("git remote add upstream https://github.com/ar-io/public-site\n")])])]),t("p",[e._v("You can then check to make sure the upstream source was added with:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("git remote -v\n")])])]),t("h4",{attrs:{id:"pull-updates"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#pull-updates"}},[e._v("#")]),e._v(" Pull updates")]),e._v(" "),t("p",[e._v('Periodically, you should check if there have been updates to the original repo by using"')]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("git fetch upstream\n")])])]),t("p",[e._v('If changes show up, you can merge them into your own repo by ensuring you are on the "main" branch, and then running the merge command:')]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("git checkout main\ngit merge upstream/main\n")])])]),t("h3",{attrs:{id:"install-dependencies-for-docs-portal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-dependencies-for-docs-portal"}},[e._v("#")]),e._v(" Install Dependencies for Docs Portal")]),e._v(" "),t("p",[e._v("The AR.IO Public Site is primarily a static html website. There are no dependencies that need to be installed in order to launch and view the site as a whole. However, the docs portal is a Vuepress app nested inside that html website. In order to launch the docs portal for review, or to build it into static html, you are going to need to install its dependencies.")]),e._v(" "),t("p",[e._v("From in the root directory of the Public Site, navigate into the docs portal and run the install command:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("cd docsGenerator/docs\nyarn install\n")])])]),t("p",[t("strong",[e._v("NOTE")]),e._v(": This repository uses yarn to manage dependency versions, installing dependencies with npm instead of yarn can lead to errors.")]),e._v(" "),t("h2",{attrs:{id:"editing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#editing"}},[e._v("#")]),e._v(" Editing")]),e._v(" "),t("p",[e._v("Vuepress generates content using markdown (.md) files. Each markdown file can be displayed as its own content page. The location (url) of each page is "),t("strong",[e._v("generally")]),e._v(" determined by the file's location in the file-structure of the vuepress app, though this can be overridden by using frontmatter. Adding a new content page can be as simple as dropping a new file in the appropriate location in the file-structure and adding a reference to it in the sidebar configuration file.")]),e._v(" "),t("h3",{attrs:{id:"branches"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#branches"}},[e._v("#")]),e._v(" Branches")]),e._v(" "),t("p",[e._v("You should always ensure that you are starting from an up to date version of the main branch. See "),t("a",{attrs:{href:"#pull-updates"}},[e._v("Pull Updates")]),e._v(" for instructions.")]),e._v(" "),t("p",[e._v("Once you are up to date and on the main branch, you should always create a new branch specific to the changes you are making. This can be done with the command:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("git checkout -b \n")])])]),t("p",[e._v("Replace "),t("code",[e._v("")]),e._v(" with a short, descriptive name for what you are changing. Do not reuse branches for future edits, you should always create a fresh branch based on the most up to date version of the main branch.")]),e._v(" "),t("h3",{attrs:{id:"what-is-markdown"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#what-is-markdown"}},[e._v("#")]),e._v(" What is Markdown?")]),e._v(" "),t("p",[e._v("Markdown is a lightweight markup language that allows you to format plain text documents with simple syntax. It's commonly used for creating documentation, README files, and web content. Markdown files are easy to read, write, and convert into various formats, such as HTML.")]),e._v(" "),t("p",[e._v("Here are some commonly used Markdown syntax elements:")]),e._v(" "),t("ol",[t("li",[t("p",[t("strong",[e._v("Headings")]),e._v(": Use hash symbols (#) to denote headings. The number of hashes determines the heading level (e.g., "),t("code",[e._v("# Heading 1")]),e._v(", "),t("code",[e._v("## Heading 2")]),e._v(").")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Emphasis")]),e._v(": Surround text with asterisks (*) or underscores (_) for emphasis. For example, "),t("code",[e._v("*italic\\*")]),e._v("or"),t("code",[e._v("_italic_")]),e._v("renders as italic, and"),t("code",[e._v("**bold**")]),e._v("or"),t("code",[e._v("**bold**")]),e._v(" renders as bold.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Lists")]),e._v(": Create unordered lists by starting lines with hyphens (-), plus signs (+), or asterisks (*). Ordered lists use numbers (1., 2., etc.).")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Links")]),e._v(": Enclose the linked text in square brackets [] and the URL in parentheses (). For example, "),t("a",{attrs:{href:"https://ar.io",target:"_blank",rel:"noopener noreferrer"}},[e._v("AR.IO"),t("OutboundLink")],1),e._v(" creates a link to AR.IO's Public website.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Images")]),e._v(": Similar to links, but with an exclamation mark (!) at the beginning. For example, "),t("code",[e._v("![Alt Text](image.jpg)")]),e._v(" embeds an image.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Code")]),e._v(": Use backticks ( ` ) to denote inline code . For code blocks, indent each line with four spaces or use triple backticks (```) before and after the code block.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Horizontal Rule")]),e._v(": To create a horizontal rule, use three or more hyphens (-), asterisks (*), or underscores (_).")])])]),e._v(" "),t("p",[e._v("To denote a Markdown file, save it with the .md extension (e.g., "),t("code",[e._v("document.md")]),e._v(").")]),e._v(" "),t("p",[e._v("When used in a VuePress app, Markdown files are rendered into HTML by VuePress's built-in Markdown compiler, which supports most standard html tags as well. This includes the ability to assign css classes for additional styling.")]),e._v(" "),t("h3",{attrs:{id:"frontmatter"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter"}},[e._v("#")]),e._v(" Frontmatter")]),e._v(" "),t("p",[e._v("Vuepress supports injecting certain options into your markdown files. These options, collectively, are known as frontmatter. There are 5 items that you will primarily use for these docs. All of them may be omitted without issue, or included for additional customization. These are:")]),e._v(" "),t("ol",[t("li",[t("p",[t("strong",[e._v("title")]),e._v(": This sets the title for the page. It will be displayed on the left side of the browser tab when a user accesses that page. If omitted, the title will be pulled from the sidebar for that page.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("permalink")]),e._v(": Vuepress sets urls based on the filestructure of the project. This can be overridden using permalink, and a custom url can be assigned to a specific page.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("prev")]),e._v(": Sets the value for the “previous page” button that appears at the bottom of the page. If omitted, this will be pulled from the sidebar. The button can be removed from the page by setting the value to “false”.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("next")]),e._v(": Similar to "),t("code",[e._v("prev")]),e._v(", this sets the “next page” button value.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("tags")]),e._v(": accepts a list of key words that can be accessed by the “search” function, as well as helping with SEO.")])])]),e._v(" "),t("p",[e._v("Frontmatter uses YAML syntax, sandwiched inside two lines of three dashes "),t("code",[e._v("---")]),e._v(" , like so:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('---\ntitle: Frontmatter Instructions\npermalink: "/frontmatter/"\nprev: "./what-is-markdown"\nnext: false\ntags: ["frontmatter", "permalink", "other tags"]\n---\n')])])]),t("h3",{attrs:{id:"css"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#css"}},[e._v("#")]),e._v(" CSS")]),e._v(" "),t("p",[e._v("If you add html elements into your markdown file, you can assign custom css classes to them. The easiest way to customize a class is to add it to the primary global css file located at "),t("code",[e._v("/docsGenerator/docs/src/.vuepress/theme/styles/index.styl")])]),e._v(" "),t("p",[e._v("The file is written in stylus, but supports standard css syntax.")]),e._v(" "),t("p",[t("strong",[e._v("NOTE")]),e._v(": It is a good idea to be overly specific with your class names, as the content of the index.styl file will affect the entire docs portal.")]),e._v(" "),t("h3",{attrs:{id:"adding-to-the-sidebar"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#adding-to-the-sidebar"}},[e._v("#")]),e._v(" Adding to the Sidebar")]),e._v(" "),t("p",[e._v("The sidebar is rendered from a JavaScript array of objects. It is possible to configure multiple different sidebars, and have them display depending on the filepath a user is currently viewing. The docs portal only uses a single default sidebar at the moment. The configuration file for the sidebar is located at "),t("code",[e._v("/docs/src/.vuepress/theme/configs/default_sidebar_config.js")])]),e._v(" "),t("p",[e._v("To add a new item to the sidebar, simply choose where you want the item to appear, and insert an object with the following format:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\ntitle: "Text you want to display",\npath: "Filepath to new file"\n}\n')])])]),t("p",[e._v("The sidebar, when rendered, will find all the H2 tags (##) in the file, and automatically display them as sub-headers in the sidebar, which work as links to that specific section of the page.")]),e._v(" "),t("p",[e._v("You can also make a sidebar item into an expandable menu by adding a children attribute, which will be an array of objects similar to the parent:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\ntitle: "Label",\nchildren: [\n {\n title: "First Subtext",\n path: "Filepath to file"\n },\n {\n title: "Second Subtext",\n path: "Filepath to second file"\n }\n ]\n}\n')])])]),t("p",[e._v("Children can be nested for several layers if desired.")]),e._v(" "),t("p",[e._v("Below is the current sidebar configuration to serve as an example:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('module.exports = [\n {\n title: "Welcome",\n path: "/",\n },\n {\n title: "Network Overview",\n children: [\n {\n title: "Introduction",\n path: "/introduction",\n },\n {\n title: "Arweave and the Permaweb",\n path: "/arweave",\n },\n {\n title: "The IO Token",\n path: "/token.md",\n },\n {\n title: "Gateway Architecture",\n path: "/gateways/gateways",\n },\n {\n title: "Network Protocols",\n path: "/network-protocols"\n },\n {\n title: "Arweave name System (ArNS)",\n path: "/arns.md",\n },\n ],\n },\n {\n title: "Gateway Operators",\n children: [\n {\n title: "Getting Started",\n children: [\n {\n title: "Overview",\n path: "/gateways/ar-io-node/overview"\n },\n {\n title: "Setting up on Windows",\n path: "/gateways/ar-io-node/windows-setup",\n },\n {\n title: "Setting up on Linux",\n path: "/gateways/ar-io-node/linux-setup",\n },\n {\n title: "Join the Network",\n path: "/gateways/ar-io-node/testnet"\n },\n {\n title: "Upgrading",\n path: "/gateways/ar-io-node/upgrading"\n }\n\n ],\n },\n {\n title: "Advanced Configurations",\n path: "/gateways/ar-io-node/advanced-config"\n },\n {\n title: "AR.IO HTTP API",\n path: "/gateways/ar-io-node/api",\n },\n {\n title: "AR.IO Admin API",\n path: "/gateways/ar-io-node/admin/admin-api"\n }\n ],\n },\n {\n title: "Ecosystem and Community",\n children: [\n {\n title: "AR.IO Foundation",\n path: "/foundation",\n },\n {\n title: "AR.IO Labs",\n path: "/labs",\n },\n {\n title: "Community Resources",\n path: "/community-resources",\n },\n ],\n },\n {\n title: "Glossary",\n path: "/glossary",\n },\n];\n')])])]),t("h2",{attrs:{id:"development-and-deployment"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#development-and-deployment"}},[e._v("#")]),e._v(" Development and Deployment")]),e._v(" "),t("h3",{attrs:{id:"launching-development-server"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#launching-development-server"}},[e._v("#")]),e._v(" Launching Development Server")]),e._v(" "),t("p",[e._v("From inside the "),t("code",[e._v("docsGenerator/docs")]),e._v(" directory in your terminal, you can launch a development server in order to preview your edits. This will automatically update as you are making edits, but if some changes do not immediately appear you can shut the server down and restart it for a hard refresh:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("yarn dev\n")])])]),t("p",[e._v("The development server will, by default, launch at localhost:8080. The server can be shut down with "),t("code",[e._v("ctrl+c")]),e._v(" or by killing the terminal used to start it.")]),e._v(" "),t("p",[e._v("The most common error when attempting to launch the development server comes from not having a compatible version of Nodejs. If you get an error, try switching to Node version 16.15.1")]),e._v(" "),t("h3",{attrs:{id:"building-static-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#building-static-files"}},[e._v("#")]),e._v(" Building Static Files")]),e._v(" "),t("p",[e._v("The Vuepress docs portal is nested inside a static html website. For ease of deployment, Vuepress can build the docs portal into static html files and place them in the docs/ folder in the root of the website. This is not necessary for submitting a pr, but it may be useful for local testing. You can do this by navigating your terminal inside the docs portal Vuepress app "),t("code",[e._v("docsGenerator/docs")]),e._v(" and running the command:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("yarn build\n")])])]),t("h3",{attrs:{id:"creating-your-pull-request"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-your-pull-request"}},[e._v("#")]),e._v(" Creating Your Pull Request")]),e._v(" "),t("p",[e._v("Once you have all of your local changes committed and synced to your github account, you can create a Pull Request and have the team review the changes for integration into the public site.")]),e._v(" "),t("ol",[t("li",[t("p",[e._v("Ensure that all of your changes are committed to your own repository. All commits should follow the "),t("a",{attrs:{href:"https://www.conventionalcommits.org/en/v1.0.0/#summary",target:"_blank",rel:"noopener noreferrer"}},[e._v("Conventional Commits"),t("OutboundLink")],1),e._v(" standards.")])]),e._v(" "),t("li",[t("p",[e._v("Navigate to your forked repository's page on GitHub.")])]),e._v(" "),t("li",[t("p",[e._v("Switch to the branch you created for your changes.")])]),e._v(" "),t("li",[t("p",[e._v('You should see a banner indicating that you recently pushed a new branch. Click on the "Compare & pull request" button on that banner.')])]),e._v(" "),t("li",[t("p",[e._v('Make sure the base repository is set to the original AR.IO repository and the base branch is set to "staging".')])]),e._v(" "),t("li",[t("p",[e._v("Provide a brief description of your changes in the pull request form. Ensure your title adheres to the "),t("a",{attrs:{href:"https://www.conventionalcommits.org/en/v1.0.0/#summary",target:"_blank",rel:"noopener noreferrer"}},[e._v("Conventional Commits"),t("OutboundLink")],1),e._v(" standards.")])]),e._v(" "),t("li",[t("p",[e._v("Review the changes and confirm they appear as expected.")])]),e._v(" "),t("li",[t("p",[e._v('Once you\'re ready, click on the "Create pull request" button. The AR.IO team will review the request and, if approved, merge your changes into the staging branch of the repository. The changes will later be merged into the main branch for production deployment.')])])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/34.49c73000.js b/assets/js/34.2a17dc91.js similarity index 99% rename from assets/js/34.49c73000.js rename to assets/js/34.2a17dc91.js index c5cf6f6c..a5da5cc7 100644 --- a/assets/js/34.49c73000.js +++ b/assets/js/34.2a17dc91.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{334:function(t,a,e){"use strict";e.r(a);var s=e(10),r=Object(s.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"ao-ant"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#ao-ant"}},[t._v("#")]),t._v(" AO ANT")]),t._v(" "),a("h2",{attrs:{id:"overview"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[t._v("#")]),t._v(" Overview")]),t._v(" "),a("p",[t._v("Arweave Name Tokens, or ANTs, are the aoComputer contracts that control each ArNS name. You can easily set up an ao process to function as an ANT by loading the "),a("code",[t._v("ant.lua")]),t._v(" file from the "),a("a",{attrs:{href:"https://github.com/ar-io/ao-pilot",target:"_blank",rel:"noopener noreferrer"}},[t._v("ao-pilot"),a("OutboundLink")],1),t._v(" github repository into your process.")]),t._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[t._v("#")]),t._v(" Installation")]),t._v(" "),a("p",[t._v("The ao ANT code is a single file within the "),a("a",{attrs:{href:"https://github.com/ar-io/ao-pilot",target:"_blank",rel:"noopener noreferrer"}},[t._v("ao-pilot"),a("OutboundLink")],1),t._v(" Github repository from ar.io. The specific file is located "),a("a",{attrs:{href:"https://github.com/ar-io/ao-pilot/blob/main/src/ant.lua",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("You can install the ao-pilot repo on your computer with")]),t._v(" "),a("p",[a("code",[t._v("git clone https://github.com/ar-io/ao-pilot")])]),t._v(" "),a("p",[t._v("Navigating the file system inside of ao is not as straightforward as it is in a regular terminal, so opening ao directly in the same folder as the file you are going to load can make things significantly easier.")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("cd ao-pilot/src\naos\n")])])]),a("p",[t._v("From here, simply load the arns-resolver file into your process.")]),t._v(" "),a("p",[a("code",[t._v(".load ant.lua")])]),t._v(" "),a("p",[t._v('If things work successfully, your aos terminal will print "undefined".')]),t._v(" "),a("h2",{attrs:{id:"usage"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[t._v("#")]),t._v(" Usage")]),t._v(" "),a("p",[t._v("Simply loading the script into your process will set variables and handlers to make your process conform to the ant standard, but you will still need to send an initiate request to add your ANT into the ao registry.")]),t._v(" "),a("h3",{attrs:{id:"set-controller"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#set-controller"}},[t._v("#")]),t._v(" Set Controller")]),t._v(" "),a("p",[t._v("Only authorized people can make updates to your ArNS name. Because of this, you will need to add your process ID as a 'controller' under your ArNS name at "),a("a",{attrs:{href:"https://arns.app",target:"_blank",rel:"noopener noreferrer"}},[t._v("arns.app"),a("OutboundLink")],1),t._v(". This will give your process permissions needed to make these updates")]),t._v(" "),a("h3",{attrs:{id:"initiate-record-sync-and-update"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#initiate-record-sync-and-update"}},[t._v("#")]),t._v(" Initiate Record Sync and Update")]),t._v(" "),a("p",[t._v("When you purchase an ArNS name on arns.app, that name is not automatically synced to the ao-ArNS registry. Anyone can initiate a sync, which loads the data of an ArNS name from the aoComputer contract into the ao-ArNS registry:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[t._v("Send"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" Target "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"TyduW6spZTr3gkdIsdktduJhgtilaR_ex5JukK8gI9o"')]),t._v(", Tags "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" Action "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Initiate-Record-Sync"')]),t._v(", Name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("p",[t._v("Be sure to replace "),a("code",[t._v("")]),t._v(" with the correct ArNS name.")]),t._v(" "),a("p",[t._v("Once your process is a controller, and you have loaded the ANT script, you can initiate an update to the ao-ArNS registry by running the following command:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[t._v("Send"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" Target "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ARNS_PROCESS_ID, Tags "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" Action "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Initiate-Record-Update"')]),t._v(", Name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),t._v(", ProcessId "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ao.id "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("p",[t._v("Make sure to change "),a("code",[t._v(""')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("p",[t._v("Be sure to replace "),a("code",[t._v("")]),t._v(" with the correct ArNS name.")]),t._v(" "),a("p",[t._v("Once your process is a controller, and you have loaded the ANT script, you can initiate an update to the ao-ArNS registry by running the following command:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[t._v("Send"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" Target "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ARNS_PROCESS_ID, Tags "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" Action "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Initiate-Record-Update"')]),t._v(", Name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),t._v(", ProcessId "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ao.id "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("p",[t._v("Make sure to change "),a("code",[t._v("/api-docs")]),e._v(", you can enter your "),t("code",[e._v("ADMIN_API_KEY")]),e._v(' using the green "Authorize" button near the top of the page, or by clicking any of the open lock icons next to a password protected end point.')]),e._v(" "),t("h2",{attrs:{id:"debug"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#debug"}},[e._v("#")]),e._v(" Debug")]),e._v(" "),t("p",[e._v("The "),t("code",[e._v("ar-io/admin/debug")]),e._v(" endpoint provides a comprehensive view of the current state of your Gateway. This endpoint has been designed to offer developers and administrators insights into the operational status of the gateway, including any errors or warnings that have occurred since the last startup.")]),e._v(" "),t("details",[t("summary",[e._v("Example response")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("{\n db: {\n counts: {\n wallets: 137,\n tagNames: 61,\n tagValues: 892,\n stableTxs: 0,\n stableBlocks: 0,\n stableBlockTxs: 0,\n missingStableBlocks: 0,\n missingStableTxs: 0,\n missingTxs: 0,\n newBlocks: 32,\n newTxs: 4436,\n bundleCount: 159,\n bundleDataItems: 0,\n matcheDataItems: 0,\n dataItems: 0,\n nestedDataItems: null\n },\n heights: { minStable: -1, maxStable: -1, minNew: 1000000, maxNew: 1000031 },\n timestamps: {\n now: 1692230403,\n maxBundleQueuedAt: -1,\n maxBundleSkippedAt: 1692230390,\n maxBundleUnbundledAt: -1,\n maxBundleFullyIndexedAt: -1,\n maxNewDataItemIndexedAt: -1,\n maxStableDataItemIndexedAt: -1\n },\n errors: [],\n warnings: []\n }\n}\n")])])])]),e._v(" "),t("h2",{attrs:{id:"queue-transaction"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#queue-transaction"}},[e._v("#")]),e._v(" Queue Transaction")]),e._v(" "),t("p",[e._v("The "),t("code",[e._v("ar-io/admin/queue-tx")]),e._v(" endpoint allows you to prioritize processing of a specific transaction, based on that transaction's ID. The "),t("code",[e._v("id")]),e._v(" key must be set in the body of your request, and a POST request should be used.")]),e._v(" "),t("p",[e._v("This endpoint will also enable you to prioritize opening and indexing bundles by providing the L1 TX ID for the bundle, but only if your Gateway is operating with the "),t("code",[e._v("ANS104_UNBUNDLE_FILTER")]),e._v(" and "),t("code",[e._v("ANS104_INDEX_FILTER")]),e._v(" keys set.")]),e._v(" "),t("p",[e._v("Your Gateway will either respond with an error, or "),t("code",[e._v("{ message: 'TX queued' }")])]),e._v(" "),t("h2",{attrs:{id:"block-data"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#block-data"}},[e._v("#")]),e._v(" Block Data")]),e._v(" "),t("p",[e._v("The "),t("code",[e._v("ar-io/admin/block-data")]),e._v(" endpoint allows you to tell your Gateway to refuse to serve certain data. In order to add to this block list, make a PUT request to this endpoint with the following in the body:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\n "id": "",\n "notes": "Example notes",\n "source": "Example source"\n}\n')])])]),t("ul",[t("li",[t("strong",[e._v("id")]),e._v(": This should be the transaction id of the content you want to block.")]),e._v(" "),t("li",[t("strong",[e._v("notes")]),e._v(": Notes regarding the reason this content was blocked. For documentation purposes only.")]),e._v(" "),t("li",[t("strong",[e._v("source")]),e._v(": Identifier for the source of TX IDs you are blocking. For example, the name of a public block list. For documentation purposes only.")])]),e._v(" "),t("p",[e._v("Your Gateway will either respond with an error, or "),t("code",[e._v("{ message: 'Content blocked' }")])])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{339:function(e,t,a){"use strict";a.r(t);var n=a(10),o=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"ar-io-http-api-admin-endpoints"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ar-io-http-api-admin-endpoints"}},[e._v("#")]),e._v(" AR.IO HTTP API Admin Endpoints")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("The AR.IO HTTP API offers several endpoints that allow access to internal information and the ability to make adjustments without restarting your Gateway. Each of these endpoints behind "),t("code",[e._v("/ar-io/admin/")]),e._v(" have access restricted, so you will need to have set up your "),t("code",[e._v("ADMIN_API_KEY")]),e._v(" variable and include "),t("code",[e._v('"Authorization: "Bearer ${ADMIN_API_KEY}"')]),e._v(" in the header of your request.")]),e._v(" "),t("p",[e._v("When testing endpoints at "),t("code",[e._v("/api-docs")]),e._v(", you can enter your "),t("code",[e._v("ADMIN_API_KEY")]),e._v(' using the green "Authorize" button near the top of the page, or by clicking any of the open lock icons next to a password protected end point.')]),e._v(" "),t("h2",{attrs:{id:"debug"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#debug"}},[e._v("#")]),e._v(" Debug")]),e._v(" "),t("p",[e._v("The "),t("code",[e._v("ar-io/admin/debug")]),e._v(" endpoint provides a comprehensive view of the current state of your Gateway. This endpoint has been designed to offer developers and administrators insights into the operational status of the gateway, including any errors or warnings that have occurred since the last startup.")]),e._v(" "),t("details",[t("summary",[e._v("Example response")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("{\n db: {\n counts: {\n wallets: 137,\n tagNames: 61,\n tagValues: 892,\n stableTxs: 0,\n stableBlocks: 0,\n stableBlockTxs: 0,\n missingStableBlocks: 0,\n missingStableTxs: 0,\n missingTxs: 0,\n newBlocks: 32,\n newTxs: 4436,\n bundleCount: 159,\n bundleDataItems: 0,\n matcheDataItems: 0,\n dataItems: 0,\n nestedDataItems: null\n },\n heights: { minStable: -1, maxStable: -1, minNew: 1000000, maxNew: 1000031 },\n timestamps: {\n now: 1692230403,\n maxBundleQueuedAt: -1,\n maxBundleSkippedAt: 1692230390,\n maxBundleUnbundledAt: -1,\n maxBundleFullyIndexedAt: -1,\n maxNewDataItemIndexedAt: -1,\n maxStableDataItemIndexedAt: -1\n },\n errors: [],\n warnings: []\n }\n}\n")])])])]),e._v(" "),t("h2",{attrs:{id:"queue-transaction"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#queue-transaction"}},[e._v("#")]),e._v(" Queue Transaction")]),e._v(" "),t("p",[e._v("The "),t("code",[e._v("ar-io/admin/queue-tx")]),e._v(" endpoint allows you to prioritize processing of a specific transaction, based on that transaction's ID. The "),t("code",[e._v("id")]),e._v(" key must be set in the body of your request, and a POST request should be used.")]),e._v(" "),t("p",[e._v("This endpoint will also enable you to prioritize opening and indexing bundles by providing the L1 TX ID for the bundle, but only if your Gateway is operating with the "),t("code",[e._v("ANS104_UNBUNDLE_FILTER")]),e._v(" and "),t("code",[e._v("ANS104_INDEX_FILTER")]),e._v(" keys set.")]),e._v(" "),t("p",[e._v("Your Gateway will either respond with an error, or "),t("code",[e._v("{ message: 'TX queued' }")])]),e._v(" "),t("h2",{attrs:{id:"block-data"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#block-data"}},[e._v("#")]),e._v(" Block Data")]),e._v(" "),t("p",[e._v("The "),t("code",[e._v("ar-io/admin/block-data")]),e._v(" endpoint allows you to tell your Gateway to refuse to serve certain data. In order to add to this block list, make a PUT request to this endpoint with the following in the body:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\n "id": "",\n "notes": "Example notes",\n "source": "Example source"\n}\n')])])]),t("ul",[t("li",[t("strong",[e._v("id")]),e._v(": This should be the transaction id of the content you want to block.")]),e._v(" "),t("li",[t("strong",[e._v("notes")]),e._v(": Notes regarding the reason this content was blocked. For documentation purposes only.")]),e._v(" "),t("li",[t("strong",[e._v("source")]),e._v(": Identifier for the source of TX IDs you are blocking. For example, the name of a public block list. For documentation purposes only.")])]),e._v(" "),t("p",[e._v("Your Gateway will either respond with an error, or "),t("code",[e._v("{ message: 'Content blocked' }")])])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/39.32f30f46.js b/assets/js/39.566dfe25.js similarity index 99% rename from assets/js/39.32f30f46.js rename to assets/js/39.566dfe25.js index 03bb919e..6b05612f 100644 --- a/assets/js/39.32f30f46.js +++ b/assets/js/39.566dfe25.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{340:function(t,a,e){"use strict";e.r(a);var s=e(10),r=Object(s.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"advanced-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#advanced-configuration"}},[t._v("#")]),t._v(" Advanced Configuration")]),t._v(" "),a("h2",{attrs:{id:"overview"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[t._v("#")]),t._v(" Overview")]),t._v(" "),a("p",[t._v("The Getting Started guides for "),a("RouterLink",{attrs:{to:"/gateways/ar-io-node/windows-setup.html"}},[t._v("windows")]),t._v(" and "),a("RouterLink",{attrs:{to:"/gateways/ar-io-node/linux-setup.html"}},[t._v("linux")]),t._v(" contain all the information needed to start your ar.io Gateway node successfully with basic configurations. There are also ever expanding advanced configuration options that allow you to run your node in a way that is customized to your specific use case.")],1),t._v(" "),a("p",[t._v("Most of the below options can be added to your "),a("code",[t._v(".env")]),t._v(" file in order to customize its operation. Any changes made to your "),a("code",[t._v(".env")]),t._v(" require you to stop the docker containers running your node, and restarting them with the "),a("code",[t._v("--build")]),t._v(" flag in order for the changes to take effect. See "),a("RouterLink",{attrs:{to:"/gateways/ar-io-node/env.html"}},[t._v("ENV")]),t._v(" for a complete list of environmental variables you can set.")],1),t._v(" "),a("h2",{attrs:{id:"data-storage-location"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#data-storage-location"}},[t._v("#")]),t._v(" Data Storage Location")]),t._v(" "),a("p",[t._v('You can set a custom location for your AR.IO Gateway to save the data it pulls from the Arweave network. There are three primary types of data stored, and you can set a unique storage location for each of these independently. These are "chunks data", "contiguous data", and "headers data". The custom location for each of these can be set in your .env file like this:')]),t._v(" "),a("div",{staticClass:"language-js extra-class"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CHUNKS_DATA_PATH")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("file path"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CONTIGUOUS_DATA_PATH")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("file path"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("HEADERS_DATA_PATH")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("file path"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n")])])]),a("p",[t._v('Be sure to replace "" with the path to the location where you would like the data stored. If these values are omitted, the data will be stored in the "data" directory inside your Gateway code repository.')]),t._v(" "),a("h2",{attrs:{id:"admin-api-key"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#admin-api-key"}},[t._v("#")]),t._v(" Admin API Key")]),t._v(" "),a("p",[t._v('HTTP endpoints under "/ar-io/admin" are protected by an admin API key. These endpoints allow you to get certain analytics data or make adjustments to your node as it\'s running. When your node starts, it reads your environmental variables to see if a key is set. If not, a random key is generated. The key name is '),a("code",[t._v("ADMIN_API_KEY")]),t._v(" and it should be set in your "),a("code",[t._v(".env")]),t._v(" file like this:")]),t._v(" "),a("div",{staticClass:"language-js extra-class"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("ADMIN_API_KEY")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("SUPER_SECRET_PASSWORD")]),t._v("\n")])])]),a("p",[t._v("View examples of the admin endpoints "),a("RouterLink",{attrs:{to:"/gateways/ar-io-node/admin/admin-api.html"}},[t._v("here")])],1),t._v(" "),a("h2",{attrs:{id:"wallet-association"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#wallet-association"}},[t._v("#")]),t._v(" Wallet Association")]),t._v(" "),a("p",[t._v("In order to participate in the greater "),a("a",{attrs:{href:"https://ar.io",target:"_blank",rel:"noopener noreferrer"}},[t._v("ar.io network"),a("OutboundLink")],1),t._v(", Gateway nodes need to associate themselves with an Arweave wallet. This can be configured by setting the "),a("code",[t._v("AR_IO_WALLET")]),t._v(" key value in your "),a("code",[t._v(".env")]),t._v(" file.")]),t._v(" "),a("div",{staticClass:"language-js extra-class"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("AR_IO_WALLET")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("1seRanklLU_1VTGowDZdD7s_"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("7k1qowT6oeFZHUZiZo\n")])])]),a("h2",{attrs:{id:"unbundling"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#unbundling"}},[t._v("#")]),t._v(" Unbundling")]),t._v(" "),a("p",[t._v("AR.IO Gateway nodes support unbundling and indexing "),a("a",{attrs:{href:"https://github.com/ArweaveTeam/arweave-standards/blob/master/ans/ANS-104.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("ANS-104"),a("OutboundLink")],1),t._v(" bundle data. This is disabled by default, but can be turned on with several different configuration options. You can set these configurations with the "),a("code",[t._v("ANS104_UNBUNDLE_FILTER")]),t._v(" and "),a("code",[t._v("ANS104_INDEX_FILTER")]),t._v(" keys in your .env:")]),t._v(" "),a("div",{staticClass:"language-js extra-class"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("ANS104_UNBUNDLE_FILTER")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("ANS104_INDEX_FILTER")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),t._v("\n")])])]),a("p",[t._v("The following types of filters are supported:")]),t._v(" "),a("div",{staticClass:"language-js extra-class"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"never"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" # the "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"always"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"attributes"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"owner"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("owner key"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"tags"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("utf8 tag name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"value"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("utf8 tag value"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"and"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("nested filter"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"or"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("nested filter"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h2",{attrs:{id:"content-moderation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#content-moderation"}},[t._v("#")]),t._v(" Content Moderation")]),t._v(" "),a("p",[t._v("You are able to set your Gateway to block specific transactions or data-items you don't want to serve. Unlike previous configuration options in this list, blocking content can be achieved without the need to add to your .env file and rebuild your Gateway. Instead, make a "),a("code",[t._v("PUT")]),t._v(" request to your Gateway at "),a("code",[t._v("/ar-io/admin/block-data")]),t._v(". As this is an admin endpoint, you will need to have configured your "),a("code",[t._v("ADMIN_API_KEY")]),t._v(". Using curl as an example, the request should be formatted as follows:")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-X")]),t._v(" PUT "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-H")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Authorization: Bearer "')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-H")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Content-Type: application/json"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://:/ar-io/admin/block-data"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-d")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('\'{ "id": "", "notes": "Example notes", "source": "Example source" }\'')]),t._v("\n")])])]),a("ul",[a("li",[a("strong",[t._v("id")]),t._v(" (string): This will be the transaction ID of the content you want to add to your block list.")]),t._v(" "),a("li",[a("strong",[t._v("notes")]),t._v(" (string): Internal notes regarding why a particular ID is blocked.")]),t._v(" "),a("li",[a("strong",[t._v("source")]),t._v(" (string): Identifier of a particular source of IDs to block. (e.g. the name of a block list)")])]),t._v(" "),a("p",[a("code",[t._v("notes")]),t._v(" and "),a("code",[t._v("source")]),t._v(" are used for documentation only, and have no effect on your block list itself.")]),t._v(" "),a("h2",{attrs:{id:"contiguous-data-cleanup"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#contiguous-data-cleanup"}},[t._v("#")]),t._v(" Contiguous Data Cleanup")]),t._v(" "),a("p",[t._v("Transaction data on Arweave is stored in a chunked manner. It is commonly retrieved, however, in the the transaction data's original, contiguous form with all of its component chunks assembled end-to-end. Gateways cache contiguous representations of the transaction data to assist in various workloads, including serving transaction data to clients, allowing for efficient utilization of valuable system resources. Gateway operators will need to determine for themselves the best balance between disk space and other resource usage based on the size of their gateway and their particular use case.")]),t._v(" "),a("p",[t._v("Contiguous data cache cleanup can be enabled using the "),a("code",[t._v("CONTIGUOUS_DATA_CACHE_CLEANUP_THRESHOLD")]),t._v(" environmental variable. This variable sets the number of seconds from the creation of a file in the contiguous data cache after which that file will be deleted. For example:")]),t._v(" "),a("div",{staticClass:"language-js extra-class"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CONTIGUOUS_DATA_CACHE_CLEANUP_THRESHOLD")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10000")]),t._v("\n")])])]),a("p",[t._v("will clear items from the contiguous data cache after ten thousand (10,000) seconds.")]),t._v(" "),a("h2",{attrs:{id:"arns-resolver"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#arns-resolver"}},[t._v("#")]),t._v(" ArNS Resolver")]),t._v(" "),a("p",[t._v("Gateways, by default, forward requests to resolve ArNS names to "),a("a",{attrs:{href:"https://arweave.dev",target:"_blank",rel:"noopener noreferrer"}},[t._v("arweave.dev"),a("OutboundLink")],1),t._v(". Starting with "),a("RouterLink",{attrs:{to:"/gateways/ar-io-node/release-notes.html#release-9---2024-04-10"}},[t._v("Release 9")]),t._v(" gateways can instead build and maintain their own local cache. Doing so removes external dependencies and allows faster resolution.")],1),t._v(" "),a("p",[t._v("View the code for the ArNS resolver service here: "),a("a",{attrs:{href:"https://github.com/ar-io/arns-resolver",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/ar-io/arns-resolver"),a("OutboundLink")],1)]),t._v(" "),a("p",[a("strong",[t._v("NOTE")]),t._v(": The ArNS resolver is still an experimental feature. It is possible it may behave in unexpected ways when presented with rare edge case scenarios.")]),t._v(" "),a("p",[t._v("In order to enable the local ArNS resolver, three environmental variables will need to be set:")]),t._v(" "),a("div",{staticClass:"language-js extra-class"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RUN_RESOLVER")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("TRUSTED_ARNS_RESOLVER_TYPE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("resolver\n"),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("TRUSTED_ARNS_RESOLVER_URL")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("http"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("resolver"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("6000")]),t._v("\n")])])]),a("ul",[a("li",[a("strong",[t._v("RUN_RESOLVER")]),t._v(" is a boolean representing an on/off switch for the local resolver.")]),t._v(" "),a("li",[a("strong",[t._v("TRUSTED_ARNS_RESOLVER_TYPE")]),t._v(" sets the method the gateway uses for resolving ArNS names. Use "),a("code",[t._v("resolver")]),t._v(" for the local resolver, or "),a("code",[t._v("gateway")]),t._v(" for default functionality.")]),t._v(" "),a("li",[a("strong",[t._v("TRUSTED_ARNS_RESOLVER_URL")]),t._v(" is the url a gateway will use to request ArNS name resolution.")])])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{341:function(t,a,e){"use strict";e.r(a);var s=e(10),r=Object(s.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"advanced-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#advanced-configuration"}},[t._v("#")]),t._v(" Advanced Configuration")]),t._v(" "),a("h2",{attrs:{id:"overview"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[t._v("#")]),t._v(" Overview")]),t._v(" "),a("p",[t._v("The Getting Started guides for "),a("RouterLink",{attrs:{to:"/gateways/ar-io-node/windows-setup.html"}},[t._v("windows")]),t._v(" and "),a("RouterLink",{attrs:{to:"/gateways/ar-io-node/linux-setup.html"}},[t._v("linux")]),t._v(" contain all the information needed to start your ar.io Gateway node successfully with basic configurations. There are also ever expanding advanced configuration options that allow you to run your node in a way that is customized to your specific use case.")],1),t._v(" "),a("p",[t._v("Most of the below options can be added to your "),a("code",[t._v(".env")]),t._v(" file in order to customize its operation. Any changes made to your "),a("code",[t._v(".env")]),t._v(" require you to stop the docker containers running your node, and restarting them with the "),a("code",[t._v("--build")]),t._v(" flag in order for the changes to take effect. See "),a("RouterLink",{attrs:{to:"/gateways/ar-io-node/env.html"}},[t._v("ENV")]),t._v(" for a complete list of environmental variables you can set.")],1),t._v(" "),a("h2",{attrs:{id:"data-storage-location"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#data-storage-location"}},[t._v("#")]),t._v(" Data Storage Location")]),t._v(" "),a("p",[t._v('You can set a custom location for your AR.IO Gateway to save the data it pulls from the Arweave network. There are three primary types of data stored, and you can set a unique storage location for each of these independently. These are "chunks data", "contiguous data", and "headers data". The custom location for each of these can be set in your .env file like this:')]),t._v(" "),a("div",{staticClass:"language-js extra-class"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CHUNKS_DATA_PATH")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("file path"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CONTIGUOUS_DATA_PATH")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("file path"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("HEADERS_DATA_PATH")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("file path"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n")])])]),a("p",[t._v('Be sure to replace "" with the path to the location where you would like the data stored. If these values are omitted, the data will be stored in the "data" directory inside your Gateway code repository.')]),t._v(" "),a("h2",{attrs:{id:"admin-api-key"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#admin-api-key"}},[t._v("#")]),t._v(" Admin API Key")]),t._v(" "),a("p",[t._v('HTTP endpoints under "/ar-io/admin" are protected by an admin API key. These endpoints allow you to get certain analytics data or make adjustments to your node as it\'s running. When your node starts, it reads your environmental variables to see if a key is set. If not, a random key is generated. The key name is '),a("code",[t._v("ADMIN_API_KEY")]),t._v(" and it should be set in your "),a("code",[t._v(".env")]),t._v(" file like this:")]),t._v(" "),a("div",{staticClass:"language-js extra-class"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("ADMIN_API_KEY")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("SUPER_SECRET_PASSWORD")]),t._v("\n")])])]),a("p",[t._v("View examples of the admin endpoints "),a("RouterLink",{attrs:{to:"/gateways/ar-io-node/admin/admin-api.html"}},[t._v("here")])],1),t._v(" "),a("h2",{attrs:{id:"wallet-association"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#wallet-association"}},[t._v("#")]),t._v(" Wallet Association")]),t._v(" "),a("p",[t._v("In order to participate in the greater "),a("a",{attrs:{href:"https://ar.io",target:"_blank",rel:"noopener noreferrer"}},[t._v("ar.io network"),a("OutboundLink")],1),t._v(", Gateway nodes need to associate themselves with an Arweave wallet. This can be configured by setting the "),a("code",[t._v("AR_IO_WALLET")]),t._v(" key value in your "),a("code",[t._v(".env")]),t._v(" file.")]),t._v(" "),a("div",{staticClass:"language-js extra-class"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("AR_IO_WALLET")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("1seRanklLU_1VTGowDZdD7s_"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("7k1qowT6oeFZHUZiZo\n")])])]),a("h2",{attrs:{id:"unbundling"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#unbundling"}},[t._v("#")]),t._v(" Unbundling")]),t._v(" "),a("p",[t._v("AR.IO Gateway nodes support unbundling and indexing "),a("a",{attrs:{href:"https://github.com/ArweaveTeam/arweave-standards/blob/master/ans/ANS-104.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("ANS-104"),a("OutboundLink")],1),t._v(" bundle data. This is disabled by default, but can be turned on with several different configuration options. You can set these configurations with the "),a("code",[t._v("ANS104_UNBUNDLE_FILTER")]),t._v(" and "),a("code",[t._v("ANS104_INDEX_FILTER")]),t._v(" keys in your .env:")]),t._v(" "),a("div",{staticClass:"language-js extra-class"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("ANS104_UNBUNDLE_FILTER")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("ANS104_INDEX_FILTER")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),t._v("\n")])])]),a("p",[t._v("The following types of filters are supported:")]),t._v(" "),a("div",{staticClass:"language-js extra-class"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"never"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" # the "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"always"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"attributes"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"owner"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("owner key"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"tags"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("utf8 tag name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"value"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("utf8 tag value"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"and"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("nested filter"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"or"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("nested filter"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h2",{attrs:{id:"content-moderation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#content-moderation"}},[t._v("#")]),t._v(" Content Moderation")]),t._v(" "),a("p",[t._v("You are able to set your Gateway to block specific transactions or data-items you don't want to serve. Unlike previous configuration options in this list, blocking content can be achieved without the need to add to your .env file and rebuild your Gateway. Instead, make a "),a("code",[t._v("PUT")]),t._v(" request to your Gateway at "),a("code",[t._v("/ar-io/admin/block-data")]),t._v(". As this is an admin endpoint, you will need to have configured your "),a("code",[t._v("ADMIN_API_KEY")]),t._v(". Using curl as an example, the request should be formatted as follows:")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-X")]),t._v(" PUT "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-H")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Authorization: Bearer "')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-H")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Content-Type: application/json"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://:/ar-io/admin/block-data"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-d")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('\'{ "id": "", "notes": "Example notes", "source": "Example source" }\'')]),t._v("\n")])])]),a("ul",[a("li",[a("strong",[t._v("id")]),t._v(" (string): This will be the transaction ID of the content you want to add to your block list.")]),t._v(" "),a("li",[a("strong",[t._v("notes")]),t._v(" (string): Internal notes regarding why a particular ID is blocked.")]),t._v(" "),a("li",[a("strong",[t._v("source")]),t._v(" (string): Identifier of a particular source of IDs to block. (e.g. the name of a block list)")])]),t._v(" "),a("p",[a("code",[t._v("notes")]),t._v(" and "),a("code",[t._v("source")]),t._v(" are used for documentation only, and have no effect on your block list itself.")]),t._v(" "),a("h2",{attrs:{id:"contiguous-data-cleanup"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#contiguous-data-cleanup"}},[t._v("#")]),t._v(" Contiguous Data Cleanup")]),t._v(" "),a("p",[t._v("Transaction data on Arweave is stored in a chunked manner. It is commonly retrieved, however, in the the transaction data's original, contiguous form with all of its component chunks assembled end-to-end. Gateways cache contiguous representations of the transaction data to assist in various workloads, including serving transaction data to clients, allowing for efficient utilization of valuable system resources. Gateway operators will need to determine for themselves the best balance between disk space and other resource usage based on the size of their gateway and their particular use case.")]),t._v(" "),a("p",[t._v("Contiguous data cache cleanup can be enabled using the "),a("code",[t._v("CONTIGUOUS_DATA_CACHE_CLEANUP_THRESHOLD")]),t._v(" environmental variable. This variable sets the number of seconds from the creation of a file in the contiguous data cache after which that file will be deleted. For example:")]),t._v(" "),a("div",{staticClass:"language-js extra-class"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CONTIGUOUS_DATA_CACHE_CLEANUP_THRESHOLD")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10000")]),t._v("\n")])])]),a("p",[t._v("will clear items from the contiguous data cache after ten thousand (10,000) seconds.")]),t._v(" "),a("h2",{attrs:{id:"arns-resolver"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#arns-resolver"}},[t._v("#")]),t._v(" ArNS Resolver")]),t._v(" "),a("p",[t._v("Gateways, by default, forward requests to resolve ArNS names to "),a("a",{attrs:{href:"https://arweave.dev",target:"_blank",rel:"noopener noreferrer"}},[t._v("arweave.dev"),a("OutboundLink")],1),t._v(". Starting with "),a("RouterLink",{attrs:{to:"/gateways/ar-io-node/release-notes.html#release-9---2024-04-10"}},[t._v("Release 9")]),t._v(" gateways can instead build and maintain their own local cache. Doing so removes external dependencies and allows faster resolution.")],1),t._v(" "),a("p",[t._v("View the code for the ArNS resolver service here: "),a("a",{attrs:{href:"https://github.com/ar-io/arns-resolver",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/ar-io/arns-resolver"),a("OutboundLink")],1)]),t._v(" "),a("p",[a("strong",[t._v("NOTE")]),t._v(": The ArNS resolver is still an experimental feature. It is possible it may behave in unexpected ways when presented with rare edge case scenarios.")]),t._v(" "),a("p",[t._v("In order to enable the local ArNS resolver, three environmental variables will need to be set:")]),t._v(" "),a("div",{staticClass:"language-js extra-class"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RUN_RESOLVER")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("TRUSTED_ARNS_RESOLVER_TYPE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("resolver\n"),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("TRUSTED_ARNS_RESOLVER_URL")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("http"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("resolver"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("6000")]),t._v("\n")])])]),a("ul",[a("li",[a("strong",[t._v("RUN_RESOLVER")]),t._v(" is a boolean representing an on/off switch for the local resolver.")]),t._v(" "),a("li",[a("strong",[t._v("TRUSTED_ARNS_RESOLVER_TYPE")]),t._v(" sets the method the gateway uses for resolving ArNS names. Use "),a("code",[t._v("resolver")]),t._v(" for the local resolver, or "),a("code",[t._v("gateway")]),t._v(" for default functionality.")]),t._v(" "),a("li",[a("strong",[t._v("TRUSTED_ARNS_RESOLVER_URL")]),t._v(" is the url a gateway will use to request ArNS name resolution.")])])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/40.7b598302.js b/assets/js/40.3422d9ed.js similarity index 92% rename from assets/js/40.7b598302.js rename to assets/js/40.3422d9ed.js index ec9ce500..bfae87bb 100644 --- a/assets/js/40.7b598302.js +++ b/assets/js/40.3422d9ed.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{341:function(t,e,o){"use strict";o.r(e);var a=o(10),n=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"ar-io-http-api"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ar-io-http-api"}},[t._v("#")]),t._v(" AR.IO HTTP API")]),t._v(" "),e("p",[t._v("Up to date documentation of endpoints for the AR.IO HTTP API used to access your Gateway can be found "),e("a",{attrs:{href:"https://ar-io.dev/api-docs/",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("p",[t._v("You can also view endpoint documentation and test the endpoints against your own Gateway by going to "),e("code",[t._v("/api-docs")])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{340:function(t,e,o){"use strict";o.r(e);var a=o(10),n=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"ar-io-http-api"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ar-io-http-api"}},[t._v("#")]),t._v(" AR.IO HTTP API")]),t._v(" "),e("p",[t._v("Up to date documentation of endpoints for the AR.IO HTTP API used to access your Gateway can be found "),e("a",{attrs:{href:"https://ar-io.dev/api-docs/",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("p",[t._v("You can also view endpoint documentation and test the endpoints against your own Gateway by going to "),e("code",[t._v("/api-docs")])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/43.c8d5e35e.js b/assets/js/43.9ec9da6a.js similarity index 94% rename from assets/js/43.c8d5e35e.js rename to assets/js/43.9ec9da6a.js index aa253c89..25be528e 100644 --- a/assets/js/43.c8d5e35e.js +++ b/assets/js/43.9ec9da6a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{344:function(e,t,a){"use strict";a.r(t);var s=a(10),o=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"delegated-staking-settings"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#delegated-staking-settings"}},[e._v("#")]),e._v(" Delegated Staking Settings")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("Gateway operators can choose to allow other people to stake tokens on their gateway. This is called “delegated staking”, and it increases the number of tokens staked for a given gateway. The additionally staked tokens result in a greater "),t("code",[e._v("stakeWeight")]),e._v(" for the gateway - increasing it’s likelihood chosen as an observer and potentially receive additional rewards for a given epoch (assuming that the gateway’s observer is working properly). To incentivize this, you can set a portion of your gateway and observer rewards to be given to the people who stake on your gateway.")]),e._v(" "),e._v(" --\x3e")])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{345:function(e,t,a){"use strict";a.r(t);var s=a(10),o=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"delegated-staking-settings"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#delegated-staking-settings"}},[e._v("#")]),e._v(" Delegated Staking Settings")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("Gateway operators can choose to allow other people to stake tokens on their gateway. This is called “delegated staking”, and it increases the number of tokens staked for a given gateway. The additionally staked tokens result in a greater "),t("code",[e._v("stakeWeight")]),e._v(" for the gateway - increasing it’s likelihood chosen as an observer and potentially receive additional rewards for a given epoch (assuming that the gateway’s observer is working properly). To incentivize this, you can set a portion of your gateway and observer rewards to be given to the people who stake on your gateway.")]),e._v(" "),e._v(" --\x3e")])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/44.449d86f5.js b/assets/js/44.52ad2ab1.js similarity index 99% rename from assets/js/44.449d86f5.js rename to assets/js/44.52ad2ab1.js index cf0981bc..fed11c35 100644 --- a/assets/js/44.449d86f5.js +++ b/assets/js/44.52ad2ab1.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{346:function(t,e,_){"use strict";_.r(e);var v=_(10),r=Object(v.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"environmental-variables"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#environmental-variables"}},[t._v("#")]),t._v(" Environmental Variables")]),t._v(" "),e("h2",{attrs:{id:"overview"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[t._v("#")]),t._v(" Overview")]),t._v(" "),e("p",[t._v("The AR.IO Gateway allows configuration customization through environmental variables. These variables dictate the gateway's behavior, from block synchronization settings to log formatting. Detailed below is a table enumerating all available environmental variables, their respective types, default values, and a brief description. Note that certain variables, such as "),e("code",[t._v("SANDBOX_PROTOCOL")]),t._v(", rely on others (e.g., "),e("code",[t._v("ARNS_ROOT_HOST")]),t._v(") to function effectively. Ensure proper understanding of these dependencies when configuring.")]),t._v(" "),e("h2",{attrs:{id:"variables"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#variables"}},[t._v("#")]),t._v(" Variables")]),t._v(" "),e("div",{staticStyle:{"text-align":"center"}},[e("table",{staticClass:"inline-table",attrs:{id:"gateway-table"}},[e("tr",[e("th",[t._v("ENV Name")]),t._v(" "),e("th",[t._v("Type")]),t._v(" "),e("th",[t._v("Default Value")]),t._v(" "),e("th",[t._v("Description")])]),t._v(" "),e("tr",[e("th",[t._v("START_HEIGHT")]),t._v(" "),e("td",[t._v('Number or "Infinity"')]),t._v(" "),e("td",[t._v("0")]),t._v(" "),e("td",[t._v("Starting block height for node synchronization (0 = start from genesis block)")])]),t._v(" "),e("tr",[e("th",[t._v("STOP_HEIGHT")]),t._v(" "),e("td",[t._v('Number or "Infinity"')]),t._v(" "),e("td",[t._v('"Infinity"')]),t._v(" "),e("td",[t._v("Stop block height for node synchronization (Infinity = keep syncing until stopped)")])]),t._v(" "),e("tr",[e("th",[t._v("TRUSTED_NODE_URL")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('"https://arweave.net"')]),t._v(" "),e("td",[t._v("Arweave node to use for fetching data")])]),t._v(" "),e("tr",[e("th",[t._v("TRUSTED_GATEWAY_URL")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('"https://arweave.net"')]),t._v(" "),e("td",[t._v("Arweave node to use for proxying reqeusts")])]),t._v(" "),e("tr",[e("th",[t._v("TRUSTED_ARNS_GATEWAY_URL")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v("https://NAME.arweave.dev")]),t._v(" "),e("td",[t._v("ArNS gateway")])]),t._v(" "),e("tr",[e("th",[t._v("INSTANCE_ID")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('""')]),t._v(" "),e("td",[t._v('Adds an "INSTANCE_ID" field to output logs')])]),t._v(" "),e("tr",[e("th",[t._v("LOG_FORMAT")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('"simple"')]),t._v(" "),e("td",[t._v('Sets the format of output logs, accepts "simple" and "json"')])]),t._v(" "),e("tr",[e("th",[t._v("SKIP_CACHE")]),t._v(" "),e("td",[t._v("Boolean")]),t._v(" "),e("td",[t._v("false")]),t._v(" "),e("td",[t._v("If true, skips the local cache and always fetches headers from the node")])]),t._v(" "),e("tr",[e("th",[t._v("PORT")]),t._v(" "),e("td",[t._v("Number")]),t._v(" "),e("td",[t._v("4000")]),t._v(" "),e("td",[t._v("AR.IO node exposed port number")])]),t._v(" "),e("tr",[e("th",[t._v("SIMULATED_REQUEST_FAILURE_RATE")]),t._v(" "),e("td",[t._v("Number")]),t._v(" "),e("td",[t._v("0")]),t._v(" "),e("td",[t._v("Number from 0 to 1, representing the probability of a request failing")])]),t._v(" "),e("tr",[e("th",[t._v("AR_IO_WALLET")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('""')]),t._v(" "),e("td",[t._v("Arweave wallet address used for staking and rewards")])]),t._v(" "),e("tr",[e("th",[t._v("ADMIN_API_KEY")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v("Generated")]),t._v(" "),e("td",[t._v("API key used for admin API requests (if not set, it is generated and logged into the console)")])]),t._v(" "),e("tr",[e("th",[t._v("BACKFILL_BUNDLE_RECORDS")]),t._v(" "),e("td",[t._v("Boolean")]),t._v(" "),e("td",[t._v("false")]),t._v(" "),e("td",[t._v("If true, AR.IO node will start indexing missing bundles")])]),t._v(" "),e("tr",[e("th",[t._v("FILTER_CHANGE_REPROCESS")]),t._v(" "),e("td",[t._v("Boolean")]),t._v(" "),e("td",[t._v("false")]),t._v(" "),e("td",[t._v("If true, all indexed bundles will be reprocessed with the new filters (you can use this when you change the filters)")])]),t._v(" "),e("tr",[e("th",[t._v("ANS104_UNBUNDLE_FILTER")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('{"never": true}')]),t._v(" "),e("td",[t._v("Only bundles compliant with this filter will be unbundled")])]),t._v(" "),e("tr",[e("th",[t._v("ANS104_INDEX_FILTER")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('{"never": true}')]),t._v(" "),e("td",[t._v("Only bundles compliant with this filter will be indexed")])]),t._v(" "),e("tr",[e("th",[t._v("ARNS_ROOT_HOST")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v("undefined")]),t._v(" "),e("td",[t._v("Domain name for ArNS host")])]),t._v(" "),e("tr",[e("th",[t._v("SANDBOX_PROTOCOL")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v("undefined")]),t._v(" "),e("td",[t._v('Protocol setting in process of creating sandbox domains in ArNS (ARNS_ROOT_HOST needs to be set for this env to have any effect) accepts "http" or "https"')])]),t._v(" "),e("tr",[e("th",[t._v("START_WRITERS")]),t._v(" "),e("td",[t._v("Boolean")]),t._v(" "),e("td",[t._v("true")]),t._v(" "),e("td",[t._v("If true, start indexing blocks, tx, ANS104 bundles")])]),t._v(" "),e("tr",[e("th",[t._v("RUN_OBSERVER")]),t._v(" "),e("td",[t._v("Boolean")]),t._v(" "),e("td",[t._v("true")]),t._v(" "),e("td",[t._v("If true, runs the Observer alongside the gateway to generate Network compliance reports")])]),t._v(" "),e("tr",[e("th",[t._v("MIN_RELEASE_NUMBER")]),t._v(" "),e("td",[t._v("string")]),t._v(" "),e("td",[t._v('"0"')]),t._v(" "),t._v("Sets the minimum Gateway release version to check while doing a gateway version assessment")]),t._v(" "),e("tr",[e("th",[t._v("AR_IO_NODE_RELEASE")]),t._v(" "),e("td",[t._v("string")]),t._v(" "),e("td",[t._v('"0"')]),t._v(" "),t._v("Sets the current ar.io node version to be set on X-AR-IO-Node-Release header on requests to the reference gateway")]),t._v(" "),e("tr",[e("th",[t._v("OBSERVER_WALLET")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v("undefined")]),t._v(" "),e("td",[t._v("The public wallet address of the wallet being used to sign report upload transactions for Observer")])]),t._v(" "),e("tr",[e("th",[t._v("CHUNKS_DATA_PATH")]),t._v(" "),e("td",[t._v("string")]),t._v(" "),e("td",[t._v('"data/chunks"')]),t._v(" "),t._v("Sets the location for chunked data to be saved. If omitted, chunked data will be stored in the `data` directory")]),t._v(" "),e("tr",[e("th",[t._v("CONTIGUOUS_DATA_PATH")]),t._v(" "),e("td",[t._v("string")]),t._v(" "),e("td",[t._v('"data/contiguous"')]),t._v(" "),t._v("Sets the location for contiguous data to be saved. If omitted, contiguous data will be stored in the `data` directory")]),t._v(" "),e("tr",[e("th",[t._v("HEADERS_DATA_PATH")]),t._v(" "),e("td",[t._v("string")]),t._v(" "),e("td",[t._v('"data/headers"')]),t._v(" "),t._v("Sets the location for header data to be saved. If omitted, header data will be stored in the `data` directory")]),t._v(" "),e("tr",[e("th",[t._v("SQLITE_DATA_PATH")]),t._v(" "),e("td",[t._v("string")]),t._v(" "),e("td",[t._v('"data/sqlite"')]),t._v(" "),t._v("Sets the location for sqlite indexed data to be saved. If omitted, sqlite data will be stored in the `data` directory")]),t._v(" "),e("tr",[e("th",[t._v("TEMP_DATA_PATH")]),t._v(" "),e("td",[t._v("string")]),t._v(" "),e("td",[t._v('"data/tmp"')]),t._v(" "),t._v("Sets the location for temporary data to be saved. If omitted, temporary data will be stored in the `data` directory")]),t._v(" "),e("tr",[e("th",[t._v("LMDB_DATA_PATH")]),t._v(" "),e("td",[t._v("string")]),t._v(" "),e("td",[t._v('"data/LMDB"')]),t._v(" "),t._v("Sets the location for LMDB data to be saved. If omitted, LMDB data will be stored in the `data` directory")]),t._v(" "),e("tr",[e("th",[t._v("CHAIN_CACHE_TYPE")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('"redis"')]),t._v(" "),e("td",[t._v("Sets the method for caching chain data, defaults to redis if gateway is started with docker-compose, otherwise defaults to LMDB")])]),t._v(" "),e("tr",[e("th",[t._v("REDIS_CACHE_URL")]),t._v(" "),e("td",[t._v("String (URL)")]),t._v(" "),e("td",[t._v('"redis://localhost:6379"')]),t._v(" "),e("td",[t._v("URL of Redis database to be used for caching")])]),t._v(" "),e("tr",[e("th",[t._v("REDIS_CACHE_TTL_SECONDS")]),t._v(" "),e("td",[t._v("Number")]),t._v(" "),e("td",[t._v("28800")]),t._v(" "),e("td",[t._v("TTL value for Redis cache, defaults to 8 hours (28800 seconds)")])]),t._v(" "),e("tr",[e("th",[t._v("ENABLE_FS_HEADER_CACHE_CLEANUP")]),t._v(" "),e("td",[t._v("Boolean")]),t._v(" "),e("td",[t._v("false")]),t._v(" "),e("td",[t._v("If true, periodically deletes cached header data")])]),t._v(" "),e("tr",[e("th",[t._v("NODE_JS_MAX_OLD_SPACE_SIZE")]),t._v(" "),e("td",[t._v("Number")]),t._v(" "),e("td",[t._v("system default")]),t._v(" "),e("td",[t._v("Sets the memory limit, in Megabytes, for NodeJs. Default value depends on hardware")])]),t._v(" "),e("tr",[e("th",[t._v("SUBMIT_CONTRACT_INTERACTIONS")]),t._v(" "),e("td",[t._v("Boolean")]),t._v(" "),e("td",[t._v("true")]),t._v(" "),e("td",[t._v("If true, Observer will submit its generated reports to the ar.io Network. If false, reports will be generated but not submitted")])]),t._v(" "),e("tr",[e("th",[t._v("REDIS_MAX_MEMORY")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v("256mb")]),t._v(" "),e("td",[t._v("Sets the max memory allocated to Redis")])]),t._v(" "),e("tr",[e("th",[t._v("REDIS_EXTRA_FLAGS")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('--save "" --appendonly no')]),t._v(" "),e("td",[t._v("Additional CLI flags passed to Redis")])]),t._v(" "),e("tr",[e("th",[t._v("WEBHOOK_TARGET_SERVERS")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v("undefined")]),t._v(" "),e("td",[t._v("Target servers for webhooks")])]),t._v(" "),e("tr",[e("th",[t._v("WEBHOOK_INDEX_FILTER")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('{"never": true}')]),t._v(" "),e("td",[t._v("Only emit webhooks for transactions and data items compliant with this filter")])]),t._v(" "),e("tr",[e("th",[t._v("WEBHOOK_BLOCK_FILTER")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('{"never": true}')]),t._v(" "),e("td",[t._v("Only emit webhooks for blocks compliant with this filter")])]),t._v(" "),e("tr",[e("th",[t._v("CONTIGUOUS_DATA_CACHE_CLEANUP_THRESHOLD")]),t._v(" "),e("td",[t._v("Number")]),t._v(" "),e("td",[t._v("undefined")]),t._v(" "),e("td",[t._v("Sets the age threshold in seconds; files older than this are candidates for contiguous data cache cleanup")])]),t._v(" "),e("tr",[e("th",[t._v("RUN_RESOLVER")]),t._v(" "),e("td",[t._v("Boolean")]),t._v(" "),e("td",[t._v("false")]),t._v(" "),e("td",[t._v("If true, enables the experimental local ArNS resolver service")])]),t._v(" "),e("tr",[e("th",[t._v("TRUSTED_ARNS_RESOLVER_TYPE")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v("gateway")]),t._v(" "),e("td",[t._v("Sets the type of ArNS resolver the gateway will use, either `gateway` or `resolver`. Set `resolver` to use experimental local ArNS resolver.")])]),t._v(" "),e("tr",[e("th",[t._v("TRUSTED_ARNS_RESOLVER_URL")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v("https:__NAME__.arweave.dev")]),t._v(" "),e("td",[t._v("Sets the url a gateway will use to request ArNS name resolution when type is set to `resolver`")])]),t._v(" "),e("tr",[e("th",[t._v("ENABLE_MEMPOOL_WATCHER")]),t._v(" "),e("td",[t._v("Boolean")]),t._v(" "),e("td",[t._v("false")]),t._v(" "),e("td",[t._v("If true, the gateway will start indexing pending tx from the mempool")])]),t._v(" "),e("tr",[e("th",[t._v("MEMPOOL_POLLING_INTERVAL_MS")]),t._v(" "),e("td",[t._v("Number")]),t._v(" "),e("td",[t._v("30000")]),t._v(" "),e("td",[t._v("Sets the mempool Polling interval, in milliseconds")])])])])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{347:function(t,e,_){"use strict";_.r(e);var v=_(10),r=Object(v.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"environmental-variables"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#environmental-variables"}},[t._v("#")]),t._v(" Environmental Variables")]),t._v(" "),e("h2",{attrs:{id:"overview"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[t._v("#")]),t._v(" Overview")]),t._v(" "),e("p",[t._v("The AR.IO Gateway allows configuration customization through environmental variables. These variables dictate the gateway's behavior, from block synchronization settings to log formatting. Detailed below is a table enumerating all available environmental variables, their respective types, default values, and a brief description. Note that certain variables, such as "),e("code",[t._v("SANDBOX_PROTOCOL")]),t._v(", rely on others (e.g., "),e("code",[t._v("ARNS_ROOT_HOST")]),t._v(") to function effectively. Ensure proper understanding of these dependencies when configuring.")]),t._v(" "),e("h2",{attrs:{id:"variables"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#variables"}},[t._v("#")]),t._v(" Variables")]),t._v(" "),e("div",{staticStyle:{"text-align":"center"}},[e("table",{staticClass:"inline-table",attrs:{id:"gateway-table"}},[e("tr",[e("th",[t._v("ENV Name")]),t._v(" "),e("th",[t._v("Type")]),t._v(" "),e("th",[t._v("Default Value")]),t._v(" "),e("th",[t._v("Description")])]),t._v(" "),e("tr",[e("th",[t._v("START_HEIGHT")]),t._v(" "),e("td",[t._v('Number or "Infinity"')]),t._v(" "),e("td",[t._v("0")]),t._v(" "),e("td",[t._v("Starting block height for node synchronization (0 = start from genesis block)")])]),t._v(" "),e("tr",[e("th",[t._v("STOP_HEIGHT")]),t._v(" "),e("td",[t._v('Number or "Infinity"')]),t._v(" "),e("td",[t._v('"Infinity"')]),t._v(" "),e("td",[t._v("Stop block height for node synchronization (Infinity = keep syncing until stopped)")])]),t._v(" "),e("tr",[e("th",[t._v("TRUSTED_NODE_URL")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('"https://arweave.net"')]),t._v(" "),e("td",[t._v("Arweave node to use for fetching data")])]),t._v(" "),e("tr",[e("th",[t._v("TRUSTED_GATEWAY_URL")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('"https://arweave.net"')]),t._v(" "),e("td",[t._v("Arweave node to use for proxying reqeusts")])]),t._v(" "),e("tr",[e("th",[t._v("TRUSTED_ARNS_GATEWAY_URL")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v("https://NAME.arweave.dev")]),t._v(" "),e("td",[t._v("ArNS gateway")])]),t._v(" "),e("tr",[e("th",[t._v("INSTANCE_ID")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('""')]),t._v(" "),e("td",[t._v('Adds an "INSTANCE_ID" field to output logs')])]),t._v(" "),e("tr",[e("th",[t._v("LOG_FORMAT")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('"simple"')]),t._v(" "),e("td",[t._v('Sets the format of output logs, accepts "simple" and "json"')])]),t._v(" "),e("tr",[e("th",[t._v("SKIP_CACHE")]),t._v(" "),e("td",[t._v("Boolean")]),t._v(" "),e("td",[t._v("false")]),t._v(" "),e("td",[t._v("If true, skips the local cache and always fetches headers from the node")])]),t._v(" "),e("tr",[e("th",[t._v("PORT")]),t._v(" "),e("td",[t._v("Number")]),t._v(" "),e("td",[t._v("4000")]),t._v(" "),e("td",[t._v("AR.IO node exposed port number")])]),t._v(" "),e("tr",[e("th",[t._v("SIMULATED_REQUEST_FAILURE_RATE")]),t._v(" "),e("td",[t._v("Number")]),t._v(" "),e("td",[t._v("0")]),t._v(" "),e("td",[t._v("Number from 0 to 1, representing the probability of a request failing")])]),t._v(" "),e("tr",[e("th",[t._v("AR_IO_WALLET")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('""')]),t._v(" "),e("td",[t._v("Arweave wallet address used for staking and rewards")])]),t._v(" "),e("tr",[e("th",[t._v("ADMIN_API_KEY")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v("Generated")]),t._v(" "),e("td",[t._v("API key used for admin API requests (if not set, it is generated and logged into the console)")])]),t._v(" "),e("tr",[e("th",[t._v("BACKFILL_BUNDLE_RECORDS")]),t._v(" "),e("td",[t._v("Boolean")]),t._v(" "),e("td",[t._v("false")]),t._v(" "),e("td",[t._v("If true, AR.IO node will start indexing missing bundles")])]),t._v(" "),e("tr",[e("th",[t._v("FILTER_CHANGE_REPROCESS")]),t._v(" "),e("td",[t._v("Boolean")]),t._v(" "),e("td",[t._v("false")]),t._v(" "),e("td",[t._v("If true, all indexed bundles will be reprocessed with the new filters (you can use this when you change the filters)")])]),t._v(" "),e("tr",[e("th",[t._v("ANS104_UNBUNDLE_FILTER")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('{"never": true}')]),t._v(" "),e("td",[t._v("Only bundles compliant with this filter will be unbundled")])]),t._v(" "),e("tr",[e("th",[t._v("ANS104_INDEX_FILTER")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('{"never": true}')]),t._v(" "),e("td",[t._v("Only bundles compliant with this filter will be indexed")])]),t._v(" "),e("tr",[e("th",[t._v("ARNS_ROOT_HOST")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v("undefined")]),t._v(" "),e("td",[t._v("Domain name for ArNS host")])]),t._v(" "),e("tr",[e("th",[t._v("SANDBOX_PROTOCOL")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v("undefined")]),t._v(" "),e("td",[t._v('Protocol setting in process of creating sandbox domains in ArNS (ARNS_ROOT_HOST needs to be set for this env to have any effect) accepts "http" or "https"')])]),t._v(" "),e("tr",[e("th",[t._v("START_WRITERS")]),t._v(" "),e("td",[t._v("Boolean")]),t._v(" "),e("td",[t._v("true")]),t._v(" "),e("td",[t._v("If true, start indexing blocks, tx, ANS104 bundles")])]),t._v(" "),e("tr",[e("th",[t._v("RUN_OBSERVER")]),t._v(" "),e("td",[t._v("Boolean")]),t._v(" "),e("td",[t._v("true")]),t._v(" "),e("td",[t._v("If true, runs the Observer alongside the gateway to generate Network compliance reports")])]),t._v(" "),e("tr",[e("th",[t._v("MIN_RELEASE_NUMBER")]),t._v(" "),e("td",[t._v("string")]),t._v(" "),e("td",[t._v('"0"')]),t._v(" "),t._v("Sets the minimum Gateway release version to check while doing a gateway version assessment")]),t._v(" "),e("tr",[e("th",[t._v("AR_IO_NODE_RELEASE")]),t._v(" "),e("td",[t._v("string")]),t._v(" "),e("td",[t._v('"0"')]),t._v(" "),t._v("Sets the current ar.io node version to be set on X-AR-IO-Node-Release header on requests to the reference gateway")]),t._v(" "),e("tr",[e("th",[t._v("OBSERVER_WALLET")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v("undefined")]),t._v(" "),e("td",[t._v("The public wallet address of the wallet being used to sign report upload transactions for Observer")])]),t._v(" "),e("tr",[e("th",[t._v("CHUNKS_DATA_PATH")]),t._v(" "),e("td",[t._v("string")]),t._v(" "),e("td",[t._v('"data/chunks"')]),t._v(" "),t._v("Sets the location for chunked data to be saved. If omitted, chunked data will be stored in the `data` directory")]),t._v(" "),e("tr",[e("th",[t._v("CONTIGUOUS_DATA_PATH")]),t._v(" "),e("td",[t._v("string")]),t._v(" "),e("td",[t._v('"data/contiguous"')]),t._v(" "),t._v("Sets the location for contiguous data to be saved. If omitted, contiguous data will be stored in the `data` directory")]),t._v(" "),e("tr",[e("th",[t._v("HEADERS_DATA_PATH")]),t._v(" "),e("td",[t._v("string")]),t._v(" "),e("td",[t._v('"data/headers"')]),t._v(" "),t._v("Sets the location for header data to be saved. If omitted, header data will be stored in the `data` directory")]),t._v(" "),e("tr",[e("th",[t._v("SQLITE_DATA_PATH")]),t._v(" "),e("td",[t._v("string")]),t._v(" "),e("td",[t._v('"data/sqlite"')]),t._v(" "),t._v("Sets the location for sqlite indexed data to be saved. If omitted, sqlite data will be stored in the `data` directory")]),t._v(" "),e("tr",[e("th",[t._v("TEMP_DATA_PATH")]),t._v(" "),e("td",[t._v("string")]),t._v(" "),e("td",[t._v('"data/tmp"')]),t._v(" "),t._v("Sets the location for temporary data to be saved. If omitted, temporary data will be stored in the `data` directory")]),t._v(" "),e("tr",[e("th",[t._v("LMDB_DATA_PATH")]),t._v(" "),e("td",[t._v("string")]),t._v(" "),e("td",[t._v('"data/LMDB"')]),t._v(" "),t._v("Sets the location for LMDB data to be saved. If omitted, LMDB data will be stored in the `data` directory")]),t._v(" "),e("tr",[e("th",[t._v("CHAIN_CACHE_TYPE")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('"redis"')]),t._v(" "),e("td",[t._v("Sets the method for caching chain data, defaults to redis if gateway is started with docker-compose, otherwise defaults to LMDB")])]),t._v(" "),e("tr",[e("th",[t._v("REDIS_CACHE_URL")]),t._v(" "),e("td",[t._v("String (URL)")]),t._v(" "),e("td",[t._v('"redis://localhost:6379"')]),t._v(" "),e("td",[t._v("URL of Redis database to be used for caching")])]),t._v(" "),e("tr",[e("th",[t._v("REDIS_CACHE_TTL_SECONDS")]),t._v(" "),e("td",[t._v("Number")]),t._v(" "),e("td",[t._v("28800")]),t._v(" "),e("td",[t._v("TTL value for Redis cache, defaults to 8 hours (28800 seconds)")])]),t._v(" "),e("tr",[e("th",[t._v("ENABLE_FS_HEADER_CACHE_CLEANUP")]),t._v(" "),e("td",[t._v("Boolean")]),t._v(" "),e("td",[t._v("false")]),t._v(" "),e("td",[t._v("If true, periodically deletes cached header data")])]),t._v(" "),e("tr",[e("th",[t._v("NODE_JS_MAX_OLD_SPACE_SIZE")]),t._v(" "),e("td",[t._v("Number")]),t._v(" "),e("td",[t._v("system default")]),t._v(" "),e("td",[t._v("Sets the memory limit, in Megabytes, for NodeJs. Default value depends on hardware")])]),t._v(" "),e("tr",[e("th",[t._v("SUBMIT_CONTRACT_INTERACTIONS")]),t._v(" "),e("td",[t._v("Boolean")]),t._v(" "),e("td",[t._v("true")]),t._v(" "),e("td",[t._v("If true, Observer will submit its generated reports to the ar.io Network. If false, reports will be generated but not submitted")])]),t._v(" "),e("tr",[e("th",[t._v("REDIS_MAX_MEMORY")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v("256mb")]),t._v(" "),e("td",[t._v("Sets the max memory allocated to Redis")])]),t._v(" "),e("tr",[e("th",[t._v("REDIS_EXTRA_FLAGS")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('--save "" --appendonly no')]),t._v(" "),e("td",[t._v("Additional CLI flags passed to Redis")])]),t._v(" "),e("tr",[e("th",[t._v("WEBHOOK_TARGET_SERVERS")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v("undefined")]),t._v(" "),e("td",[t._v("Target servers for webhooks")])]),t._v(" "),e("tr",[e("th",[t._v("WEBHOOK_INDEX_FILTER")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('{"never": true}')]),t._v(" "),e("td",[t._v("Only emit webhooks for transactions and data items compliant with this filter")])]),t._v(" "),e("tr",[e("th",[t._v("WEBHOOK_BLOCK_FILTER")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v('{"never": true}')]),t._v(" "),e("td",[t._v("Only emit webhooks for blocks compliant with this filter")])]),t._v(" "),e("tr",[e("th",[t._v("CONTIGUOUS_DATA_CACHE_CLEANUP_THRESHOLD")]),t._v(" "),e("td",[t._v("Number")]),t._v(" "),e("td",[t._v("undefined")]),t._v(" "),e("td",[t._v("Sets the age threshold in seconds; files older than this are candidates for contiguous data cache cleanup")])]),t._v(" "),e("tr",[e("th",[t._v("RUN_RESOLVER")]),t._v(" "),e("td",[t._v("Boolean")]),t._v(" "),e("td",[t._v("false")]),t._v(" "),e("td",[t._v("If true, enables the experimental local ArNS resolver service")])]),t._v(" "),e("tr",[e("th",[t._v("TRUSTED_ARNS_RESOLVER_TYPE")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v("gateway")]),t._v(" "),e("td",[t._v("Sets the type of ArNS resolver the gateway will use, either `gateway` or `resolver`. Set `resolver` to use experimental local ArNS resolver.")])]),t._v(" "),e("tr",[e("th",[t._v("TRUSTED_ARNS_RESOLVER_URL")]),t._v(" "),e("td",[t._v("String")]),t._v(" "),e("td",[t._v("https:__NAME__.arweave.dev")]),t._v(" "),e("td",[t._v("Sets the url a gateway will use to request ArNS name resolution when type is set to `resolver`")])]),t._v(" "),e("tr",[e("th",[t._v("ENABLE_MEMPOOL_WATCHER")]),t._v(" "),e("td",[t._v("Boolean")]),t._v(" "),e("td",[t._v("false")]),t._v(" "),e("td",[t._v("If true, the gateway will start indexing pending tx from the mempool")])]),t._v(" "),e("tr",[e("th",[t._v("MEMPOOL_POLLING_INTERVAL_MS")]),t._v(" "),e("td",[t._v("Number")]),t._v(" "),e("td",[t._v("30000")]),t._v(" "),e("td",[t._v("Sets the mempool Polling interval, in milliseconds")])])])])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/45.d3bea9da.js b/assets/js/45.ddc8a78c.js similarity index 98% rename from assets/js/45.d3bea9da.js rename to assets/js/45.ddc8a78c.js index ac1dc07a..ef0cf63c 100644 --- a/assets/js/45.d3bea9da.js +++ b/assets/js/45.ddc8a78c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{345:function(e,a,t){"use strict";t.r(a);var r=t(10),s=Object(r.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"farcaster-frames"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#farcaster-frames"}},[e._v("#")]),e._v(" Farcaster Frames")]),e._v(" "),a("h2",{attrs:{id:"overview"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),a("p",[a("a",{attrs:{href:"https://docs.farcaster.xyz/learn/what-is-farcaster/frames",target:"_blank",rel:"noopener noreferrer"}},[e._v("Frames by Farcaster"),a("OutboundLink")],1),e._v(' is a standard for posts, or "casts", that allows them to be interactive and easily authenticated self contained apps. Because the standard relies on HTML Meta tags, they can easily be integrated into dApps hosted permanently on Arweave. Until recently, the full capabilities of Frames hosted on Arweave were not accessible through ar.io gateways. This is because a specific type of interaction between the frame and the hosting server, a '),a("code",[e._v("POST")]),e._v(", is needed to facilitate interactivity, and ar.io gateways did not support this interaction type.")]),e._v(" "),a("h2",{attrs:{id:"experimental-gateway-support"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#experimental-gateway-support"}},[e._v("#")]),e._v(" Experimental Gateway Support")]),e._v(" "),a("p",[e._v("With "),a("RouterLink",{attrs:{to:"/gateways/ar-io-node/release-notes.html#release-9---2024-04-10"}},[e._v("Release 9")]),e._v(" of the ar.io gateways, a new experimental endpoint was added that supports the "),a("code",[e._v("POST")]),e._v(" requests needed by frames. The "),a("code",[e._v("/local")]),e._v(" endpoint on a gateway is used to facilitate experimental new features, as well as features which may be specific to an individual gateway. Operators and users should be fully aware that all endpoints stemming from "),a("code",[e._v("/local")]),e._v(" are experimental, and may not always perform exactly as expected.")],1),e._v(" "),a("h2",{attrs:{id:"using-frames"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#using-frames"}},[e._v("#")]),e._v(" Using Frames")]),e._v(" "),a("p",[e._v("The full path for accessing a frame hosted on Arweave is "),a("code",[e._v("https:///local/farcaster/frame/")]),e._v(" where "),a("code",[e._v("")]),e._v(" represents any ar.io gateway using release 9 or higher, and "),a("code",[e._v("")]),e._v(" represents the txId of the frame on Arweave. Since frames require full, absolute url paths, you will need to choose specific, supported gateway when you are embedding the frame in your cast.")]),e._v(" "),a("p",[e._v("Beyond that, simply embed the url for a frame in a cast and farcaster will be able to render it.")]),e._v(" "),a("h2",{attrs:{id:"example"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example"}},[e._v("#")]),e._v(" Example")]),e._v(" "),a("p",[e._v("Arweave community member K, who is a pioneer in permaweb frames, created the below frame to demonstrate how permaweb frames can be interactive when embedded from ar.io gateways.")]),e._v(" "),a("p",[e._v("The ID for the frame he uploaded to Arweave is "),a("code",[e._v("JFfYkpW5--I5UOxnJTYHhY9-F8X6WrvDsXQv8jYr0WE")]),e._v(". Using this, He made a Farcaster cast with the embedded url "),a("code",[e._v("https://erl5reuvxh56eokq5rtsknqhqwhx4f6f7jnlxq5roqx7enrl2fqq.ar-io.dev/local/farcaster/frame/JFfYkpW5--I5UOxnJTYHhY9-F8X6WrvDsXQv8jYr0WE/")]),e._v(". This full url includes the "),a("RouterLink",{attrs:{to:"/concepts/sandboxing.html"}},[e._v("sandbox")]),e._v(" prefix generated by an ar.io gateway when serving content.")],1),e._v(" "),a("p",[e._v("When embedding this full url in a cast, farcaster will render the content into a frame:")]),e._v(" "),a("center",[a("img",{attrs:{src:e.$withBase("/images/frame.png")}})]),e._v(" "),a("p",[e._v("View the original post "),a("a",{attrs:{href:"https://warpcast.com/fllstck/0x3d5fb763",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),a("OutboundLink")],1),e._v(" to experience the interactivity first hand.")])],1)}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{344:function(e,a,t){"use strict";t.r(a);var r=t(10),s=Object(r.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"farcaster-frames"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#farcaster-frames"}},[e._v("#")]),e._v(" Farcaster Frames")]),e._v(" "),a("h2",{attrs:{id:"overview"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),a("p",[a("a",{attrs:{href:"https://docs.farcaster.xyz/learn/what-is-farcaster/frames",target:"_blank",rel:"noopener noreferrer"}},[e._v("Frames by Farcaster"),a("OutboundLink")],1),e._v(' is a standard for posts, or "casts", that allows them to be interactive and easily authenticated self contained apps. Because the standard relies on HTML Meta tags, they can easily be integrated into dApps hosted permanently on Arweave. Until recently, the full capabilities of Frames hosted on Arweave were not accessible through ar.io gateways. This is because a specific type of interaction between the frame and the hosting server, a '),a("code",[e._v("POST")]),e._v(", is needed to facilitate interactivity, and ar.io gateways did not support this interaction type.")]),e._v(" "),a("h2",{attrs:{id:"experimental-gateway-support"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#experimental-gateway-support"}},[e._v("#")]),e._v(" Experimental Gateway Support")]),e._v(" "),a("p",[e._v("With "),a("RouterLink",{attrs:{to:"/gateways/ar-io-node/release-notes.html#release-9---2024-04-10"}},[e._v("Release 9")]),e._v(" of the ar.io gateways, a new experimental endpoint was added that supports the "),a("code",[e._v("POST")]),e._v(" requests needed by frames. The "),a("code",[e._v("/local")]),e._v(" endpoint on a gateway is used to facilitate experimental new features, as well as features which may be specific to an individual gateway. Operators and users should be fully aware that all endpoints stemming from "),a("code",[e._v("/local")]),e._v(" are experimental, and may not always perform exactly as expected.")],1),e._v(" "),a("h2",{attrs:{id:"using-frames"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#using-frames"}},[e._v("#")]),e._v(" Using Frames")]),e._v(" "),a("p",[e._v("The full path for accessing a frame hosted on Arweave is "),a("code",[e._v("https:///local/farcaster/frame/")]),e._v(" where "),a("code",[e._v("")]),e._v(" represents any ar.io gateway using release 9 or higher, and "),a("code",[e._v("")]),e._v(" represents the txId of the frame on Arweave. Since frames require full, absolute url paths, you will need to choose specific, supported gateway when you are embedding the frame in your cast.")]),e._v(" "),a("p",[e._v("Beyond that, simply embed the url for a frame in a cast and farcaster will be able to render it.")]),e._v(" "),a("h2",{attrs:{id:"example"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example"}},[e._v("#")]),e._v(" Example")]),e._v(" "),a("p",[e._v("Arweave community member K, who is a pioneer in permaweb frames, created the below frame to demonstrate how permaweb frames can be interactive when embedded from ar.io gateways.")]),e._v(" "),a("p",[e._v("The ID for the frame he uploaded to Arweave is "),a("code",[e._v("JFfYkpW5--I5UOxnJTYHhY9-F8X6WrvDsXQv8jYr0WE")]),e._v(". Using this, He made a Farcaster cast with the embedded url "),a("code",[e._v("https://erl5reuvxh56eokq5rtsknqhqwhx4f6f7jnlxq5roqx7enrl2fqq.ar-io.dev/local/farcaster/frame/JFfYkpW5--I5UOxnJTYHhY9-F8X6WrvDsXQv8jYr0WE/")]),e._v(". This full url includes the "),a("RouterLink",{attrs:{to:"/concepts/sandboxing.html"}},[e._v("sandbox")]),e._v(" prefix generated by an ar.io gateway when serving content.")],1),e._v(" "),a("p",[e._v("When embedding this full url in a cast, farcaster will render the content into a frame:")]),e._v(" "),a("center",[a("img",{attrs:{src:e.$withBase("/images/frame.png")}})]),e._v(" "),a("p",[e._v("View the original post "),a("a",{attrs:{href:"https://warpcast.com/fllstck/0x3d5fb763",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),a("OutboundLink")],1),e._v(" to experience the interactivity first hand.")])],1)}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/46.f0bd9579.js b/assets/js/46.5e287b20.js similarity index 99% rename from assets/js/46.f0bd9579.js rename to assets/js/46.5e287b20.js index 78191f76..a329854c 100644 --- a/assets/js/46.f0bd9579.js +++ b/assets/js/46.5e287b20.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{347:function(e,t,a){"use strict";a.r(t);var s=a(10),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"linux-installation-instructions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#linux-installation-instructions"}},[e._v("#")]),e._v(" Linux Installation Instructions")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("The following instructions will guide you through the process of installing the AR.IO node on a Linux machine, specifically Ubuntu 22.04.3 desktop on a home computer. Actual steps may differ slightly on different versions or distributions. This guide will cover how to set up your node, point a domain name to your home network, and create an nginx server for routing traffic to your node. No prior coding experience is required.")]),e._v(" "),t("h2",{attrs:{id:"system-requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#system-requirements"}},[e._v("#")]),e._v(" System Requirements")]),e._v(" "),t("p",[e._v("Please note, The AR.IO Node software is still in development and testing, all system requirements are subject to change.")]),e._v(" "),t("p",[e._v("External storage devices should be formatted as ext4.")]),e._v(" "),t("h3",{attrs:{id:"minimum-requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#minimum-requirements"}},[e._v("#")]),e._v(" Minimum requirements")]),e._v(" "),t("p",[e._v("The hardware specifications listed below represent the minimum system requirements at which the AR.IO Node has been tested. While your Node may still operate on systems with lesser specifications, please note that AR.IO cannot guarantee performance or functionality under those conditions. Use below-minimum hardware at your own risk.")]),e._v(" "),t("ul",[t("li",[e._v("4 core CPU")]),e._v(" "),t("li",[e._v("4 GB Ram")]),e._v(" "),t("li",[e._v("500 GB storage (SSD recommended)")]),e._v(" "),t("li",[e._v("Stable 50 Mbps internet connection")])]),e._v(" "),t("h3",{attrs:{id:"recommended"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#recommended"}},[e._v("#")]),e._v(" Recommended")]),e._v(" "),t("ul",[t("li",[e._v("12 core CPU")]),e._v(" "),t("li",[e._v("32 GB Ram")]),e._v(" "),t("li",[e._v("2 TB SSD storage")]),e._v(" "),t("li",[e._v("Stable 1 Gbps internet connection")])]),e._v(" "),t("h2",{attrs:{id:"install-packages"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-packages"}},[e._v("#")]),e._v(" Install Packages")]),e._v(" "),t("p",[e._v("If you would like to quickly install all required and suggested packages, you can run the following 2 commands in your terminal, and skip to "),t("a",{attrs:{href:"#install-the-node"}},[e._v("installing the Node")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('sudo apt update -y && sudo apt upgrade -y && sudo apt install -y curl openssh-server docker-compose git certbot nginx sqlite3 build-essential && sudo systemctl enable ssh && curl -sSL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list && sudo apt-get update -y && sudo apt-get install -y yarn && curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash && source ~/.bashrc && sudo ufw allow 22 80 443 && sudo ufw enable\n')])])]),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("nvm install 20.11.1 && nvm use 20.11.1\n")])])]),t("h3",{attrs:{id:"required-packages"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#required-packages"}},[e._v("#")]),e._v(" Required packages")]),e._v(" "),t("ol",[t("li",[t("p",[e._v("Update your software:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo apt update\nsudo apt upgrade\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Enable your firewall and open necessary ports:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo ufw enable\n\n# Optional: If using SSH, allow port 22\nsudo ufw allow 22\n\n# Allow ports 80 and 443 for HTTP and HTTPS\nsudo ufw allow 80\nsudo ufw allow 443\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Install nginx:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo apt install nginx -y\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Install git:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo apt install git -y\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Install Docker:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo apt install docker-compose -y\n")])])]),t("ul",[t("li",[e._v("Test Docker installation:"),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo docker run hello-world\n")])])])])])]),e._v(" "),t("li",[t("p",[e._v("Install Certbot:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo apt install certbot -y\n")])])])])]),e._v(" "),t("h3",{attrs:{id:"suggested-packages"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#suggested-packages"}},[e._v("#")]),e._v(" Suggested packages")]),e._v(" "),t("p",[e._v("These packages are not required to run a node in its basic form. However, they will become necessary for more advanced usage or customization.")]),e._v(" "),t("ol",{attrs:{start:"7"}},[t("li",[t("p",[e._v("Install ssh (optional, for remote access to your Linux machine):")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo apt install openssh-server -y\nsudo systemctl enable ssh\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Install Yarn:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('curl -sSL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -\n\necho "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list\n\nsudo apt-get update -y\n\nsudo apt-get install yarn -y\n')])])])]),e._v(" "),t("li",[t("p",[e._v("Install NVM (Node Version Manager):")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash\nsource ~/.bashrc\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Install Node.js:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("nvm install 20.11.1\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Install build tools")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo apt install build-essential\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Install SQLite:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo apt install sqlite3 -y\n")])])])])]),e._v(" "),t("h2",{attrs:{id:"install-the-node"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-the-node"}},[e._v("#")]),e._v(" Install the Node")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Navigate to the desired installation location:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("NOTE")]),e._v(": Your database of Arweave Transaction Headers will be created in the project directory, not Docker. So, if you are using an external hard drive to turn an old machine into a node, install the node directly to that external drive.")])])]),e._v(" "),t("li",[t("p",[e._v("Clone the ar-io-node repository and navigate into it:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("git clone -b main https://github.com/ar-io/ar-io-node\ncd ar-io-node\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Create an environmental variables file:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("nano .env\n")])])]),t("p",[e._v("Paste the following content into the new file, replacing with the domain address you are using to access the node, and with the public address of your Arweave wallet, save, and exit:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("\nGRAPHQL_HOST=arweave.net\nGRAPHQL_PORT=443\nSTART_HEIGHT=0\nRUN_OBSERVER=true\nARNS_ROOT_HOST=\nAR_IO_WALLET=\nOBSERVER_WALLET=\n")])])]),t("ul",[t("li",[e._v("The GRAPHQL values set the proxy for GQL queries to arweave.net, You may use any available gateway that supports GQL queries. If omitted, your node can support GQL queries on locally indexed transactions, but only L1 transactions are indexed by default.")]),e._v(" "),t("li",[t("code",[e._v("START_HEIGHT")]),e._v(" is an optional line. It sets the block number where your node will start downloading and indexing transactions headers. Omitting this line will begin indexing at block 0.")]),e._v(" "),t("li",[t("code",[e._v("RUN_OBSERVER")]),e._v(" turns on the Observer to generate Network Compliance Reports. This is required for full participation in the AR.IO Network. Set to "),t("code",[e._v("false")]),e._v(" to run your gateway without Observer.")]),e._v(" "),t("li",[t("code",[e._v("ARNS_ROOT_HOST")]),e._v(" sets the starting point for resolving ARNS names, which are accessed as a subdomain of a gateway. It should be set to the url you are pointing to your node, excluding any protocol prefix. For example, use "),t("code",[e._v("node-ar.io")]),e._v(" and not "),t("code",[e._v("https://node-ar.io")]),e._v(". If you are using a subdomain to access your node and do not set this value, the node will not understand incoming requests.")]),e._v(" "),t("li",[t("code",[e._v("AR_IO_WALLET")]),e._v(" is optional, and sets the wallet you want associated with your Gateway. An associated wallet is required to join the AR.IO network.")]),e._v(" "),t("li",[t("code",[e._v("OBSERVER_WALLET")]),e._v(" is the public address of the wallet used to sign Observer transactions. This is required for Observer to run, but may be omitted if you are running a gateway outside of the AR.IO network and do not plan to run Observer. You will need to supply the keyfile to this wallet in the next step.")])]),e._v(" "),t("p",[e._v("Advanced configuration options can be found at "),t("a",{attrs:{href:"https://docs.ar.io/gateways/ar-io-node/advanced-config.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("docs.ar.io"),t("OutboundLink")],1)])]),e._v(" "),t("li",[t("p",[e._v("Supply Your Observer Wallet Keyfile:")]),e._v(" "),t("p",[e._v("If you are running Observer, you need to provide a wallet keyfile in order to sign report upload transactions. The keyfile must be saved in the "),t("code",[e._v("wallets")]),e._v(" directory in the root of the repository. Name the file "),t("code",[e._v(".json")]),e._v(', replacing "" with the public address of the wallet. This should match your '),t("code",[e._v("OBSERVER_WALLET")]),e._v(" environmental variable.")]),e._v(" "),t("p",[e._v("Learn more about creating Arweave wallets and obtaining keyfiles "),t("a",{attrs:{href:"https://ar.io/wallet/",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1)])]),e._v(" "),t("li",[t("p",[e._v("Start the Docker container:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo docker-compose up -d\n")])])]),t("ul",[t("li",[e._v("Explanation of flags:\n"),t("ul",[t("li",[t("code",[e._v("up")]),e._v(": Start the Docker containers.")]),e._v(" "),t("li",[t("code",[e._v("-d")]),e._v(": Run the containers as background processes (detached mode).")])])])]),e._v(" "),t("p",[t("strong",[e._v("NOTE")]),e._v(": Effective with Release #3, it is no longer required to include the "),t("code",[e._v("--build")]),e._v(" flag when starting your gateway. Docker will automatically build using the image specified in the "),t("code",[e._v("docker-commpose.yaml")]),e._v(" file.")]),e._v(" "),t("p",[e._v("To shut down your gateway, run the command:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo docker-compose down\n")])])])])]),e._v(" "),t("p",[e._v("To ensure your node is running correctly, check the logs for errors:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo docker-compose logs -f --tail=0\n")])])]),t("ul",[t("li",[e._v("Explanation of flags:\n"),t("ul",[t("li",[t("code",[e._v("-f")]),e._v(": Follow the logs in real time.")]),e._v(" "),t("li",[t("code",[e._v("--tail=0")]),e._v(": Ignore all logs from before running the command.")])])])]),e._v(" "),t("p",[t("strong",[e._v("NOTE")]),e._v(": Previous versions of these instructions advised checking a gateway's ability to fetch content using "),t("code",[e._v("localhost")]),e._v(". Subsequent security updates prevent this without first disabling "),t("code",[e._v("ARNS_ROOT_HOST")]),e._v(" in your "),t("code",[e._v(".env")]),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"set-up-networking"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-up-networking"}},[e._v("#")]),e._v(" Set up Networking")]),e._v(" "),t("p",[e._v("The following guide assumes you are running your node on a local home computer.")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Register a Domain Name:\nChoose a domain registrar (e.g., "),t("a",{attrs:{href:"https://www.namecheap.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("Namecheap"),t("OutboundLink")],1),e._v(") to register a domain name.")])]),e._v(" "),t("li",[t("p",[e._v("Point the Domain at Your Home Internet:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Obtain your public IP address by visiting https://www.whatsmyip.org/ or running:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("curl ifconfig.me\n")])])])]),e._v(" "),t("li",[t("p",[e._v('Create an A record with your registrar for your domain and wildcard subdomains, using your public IP address. For example, if your domain is "ar.io," create a record for "ar.io" and "*.ar.io."')])])])]),e._v(" "),t("li",[t("p",[e._v("Set up Port Forwarding:")]),e._v(" "),t("ul",[t("li",[e._v("Obtain the local IP address of the machine where the node is installed by running:"),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("ip addr show | grep -w inet | awk '{print $2}' | awk -F'/' '{print $1}'\n")])])]),t("ul",[t("li",[e._v("If there are multiple lines of output, choose the one starting with 192 (usually).")])])]),e._v(" "),t("li",[e._v("Enter your router's IP address in the address bar of a browser (e.g., "),t("code",[e._v("192.168.0.1")]),e._v(").\n"),t("ul",[t("li",[e._v("If you're unsure of your router's IP address, consult your router's documentation or contact your Internet Service Provider (ISP).")])])]),e._v(" "),t("li",[e._v("Navigate to the port forwarding settings in your router configuration.\n"),t("ul",[t("li",[e._v("The exact steps may vary depending on your router model. Consult your router's documentation or support for detailed steps.")])])]),e._v(" "),t("li",[e._v("Set up port forwarding rules to forward incoming traffic on ports 80 (HTTP) and 443 (HTTPS) to the same ports on the machine running your node. You may also forward port 22 if you want to enable SSH access to your node from outside your home network.")])])]),e._v(" "),t("li",[t("p",[e._v("Create SSL (HTTPS) Certificates for Your Domain:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo certbot certonly --manual --preferred-challenges dns --email -d .com -d '*..com'\n")])])]),t("p",[e._v("Follow the instructions to create the required TXT records for your domain in your chosen registrar. Use a "),t("a",{attrs:{href:"https://dnschecker.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("DNS checker"),t("OutboundLink")],1),e._v(" to verify the propagation of each record. This can take some time.")]),e._v(" "),t("p",[t("strong",[e._v("IMPORTANT")]),e._v(": Wild card subdomain (*..com) cannot auto renew without obtaining an API key from your domain registrar. Not all registrars offer this. Certbot certificates expire every 90 days. Be sure to consult with your chosen registrar to see if they offer an API for this purpose, or run the above command again to renew your certificates. You will receive an email warning at the address you provided to remind you when it is time to renew.")])]),e._v(" "),t("li",[t("p",[e._v("Configure nginx:\nnginx is a free and open-source web server and reverse proxy server. It will handle incoming traffic, provide SSL certificates, and redirect the traffic to your node.")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Open the default configuration file:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo nano /etc/nginx/sites-available/default\n")])])])]),e._v(" "),t("li",[t("p",[e._v('Replace the file\'s contents with the following configuration (replace "" when necessary):')]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("# Force redirects from HTTP to HTTPS\nserver {\n listen 80;\n listen [::]:80;\n server_name .com *..com;\n\n location / {\n return 301 https://$host$request_uri;\n }\n}\n\n# Forward traffic to your node and provide SSL certificates\nserver {\n listen 443 ssl;\n listen [::]:443 ssl;\n server_name .com *..com;\n\n ssl_certificate /etc/letsencrypt/live/.com/fullchain.pem;\n ssl_certificate_key /etc/letsencrypt/live/.com/privkey.pem;\n\n location / {\n proxy_pass http://localhost:3000;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_http_version 1.1;\n }\n}\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Save and exit nano.")])]),e._v(" "),t("li",[t("p",[e._v("Test the configuration:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo nginx -t\n")])])])]),e._v(" "),t("li",[t("p",[e._v("If there are no errors, restart nginx:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo service nginx restart\n")])])])])])])]),e._v(" "),t("p",[e._v("Your node should now be running and connected to the internet. Test it by entering https:///3lyxgbgEvqNSvJrTX2J7CfRychUD5KClFhhVLyTPNCQ in your browser.")]),e._v(" "),t("p",[t("strong",[e._v("Note")]),e._v(": If you encounter any issues during the installation process, please seek assistance from the "),t("a",{attrs:{href:"https://discord.gg/7zUPfN4D6g",target:"_blank",rel:"noopener noreferrer"}},[e._v("AR.IO community"),t("OutboundLink")],1),e._v(".")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{346:function(e,t,a){"use strict";a.r(t);var s=a(10),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"linux-installation-instructions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#linux-installation-instructions"}},[e._v("#")]),e._v(" Linux Installation Instructions")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("The following instructions will guide you through the process of installing the AR.IO node on a Linux machine, specifically Ubuntu 22.04.3 desktop on a home computer. Actual steps may differ slightly on different versions or distributions. This guide will cover how to set up your node, point a domain name to your home network, and create an nginx server for routing traffic to your node. No prior coding experience is required.")]),e._v(" "),t("h2",{attrs:{id:"system-requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#system-requirements"}},[e._v("#")]),e._v(" System Requirements")]),e._v(" "),t("p",[e._v("Please note, The AR.IO Node software is still in development and testing, all system requirements are subject to change.")]),e._v(" "),t("p",[e._v("External storage devices should be formatted as ext4.")]),e._v(" "),t("h3",{attrs:{id:"minimum-requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#minimum-requirements"}},[e._v("#")]),e._v(" Minimum requirements")]),e._v(" "),t("p",[e._v("The hardware specifications listed below represent the minimum system requirements at which the AR.IO Node has been tested. While your Node may still operate on systems with lesser specifications, please note that AR.IO cannot guarantee performance or functionality under those conditions. Use below-minimum hardware at your own risk.")]),e._v(" "),t("ul",[t("li",[e._v("4 core CPU")]),e._v(" "),t("li",[e._v("4 GB Ram")]),e._v(" "),t("li",[e._v("500 GB storage (SSD recommended)")]),e._v(" "),t("li",[e._v("Stable 50 Mbps internet connection")])]),e._v(" "),t("h3",{attrs:{id:"recommended"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#recommended"}},[e._v("#")]),e._v(" Recommended")]),e._v(" "),t("ul",[t("li",[e._v("12 core CPU")]),e._v(" "),t("li",[e._v("32 GB Ram")]),e._v(" "),t("li",[e._v("2 TB SSD storage")]),e._v(" "),t("li",[e._v("Stable 1 Gbps internet connection")])]),e._v(" "),t("h2",{attrs:{id:"install-packages"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-packages"}},[e._v("#")]),e._v(" Install Packages")]),e._v(" "),t("p",[e._v("If you would like to quickly install all required and suggested packages, you can run the following 2 commands in your terminal, and skip to "),t("a",{attrs:{href:"#install-the-node"}},[e._v("installing the Node")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('sudo apt update -y && sudo apt upgrade -y && sudo apt install -y curl openssh-server docker-compose git certbot nginx sqlite3 build-essential && sudo systemctl enable ssh && curl -sSL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list && sudo apt-get update -y && sudo apt-get install -y yarn && curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash && source ~/.bashrc && sudo ufw allow 22 80 443 && sudo ufw enable\n')])])]),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("nvm install 20.11.1 && nvm use 20.11.1\n")])])]),t("h3",{attrs:{id:"required-packages"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#required-packages"}},[e._v("#")]),e._v(" Required packages")]),e._v(" "),t("ol",[t("li",[t("p",[e._v("Update your software:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo apt update\nsudo apt upgrade\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Enable your firewall and open necessary ports:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo ufw enable\n\n# Optional: If using SSH, allow port 22\nsudo ufw allow 22\n\n# Allow ports 80 and 443 for HTTP and HTTPS\nsudo ufw allow 80\nsudo ufw allow 443\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Install nginx:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo apt install nginx -y\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Install git:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo apt install git -y\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Install Docker:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo apt install docker-compose -y\n")])])]),t("ul",[t("li",[e._v("Test Docker installation:"),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo docker run hello-world\n")])])])])])]),e._v(" "),t("li",[t("p",[e._v("Install Certbot:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo apt install certbot -y\n")])])])])]),e._v(" "),t("h3",{attrs:{id:"suggested-packages"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#suggested-packages"}},[e._v("#")]),e._v(" Suggested packages")]),e._v(" "),t("p",[e._v("These packages are not required to run a node in its basic form. However, they will become necessary for more advanced usage or customization.")]),e._v(" "),t("ol",{attrs:{start:"7"}},[t("li",[t("p",[e._v("Install ssh (optional, for remote access to your Linux machine):")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo apt install openssh-server -y\nsudo systemctl enable ssh\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Install Yarn:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('curl -sSL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -\n\necho "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list\n\nsudo apt-get update -y\n\nsudo apt-get install yarn -y\n')])])])]),e._v(" "),t("li",[t("p",[e._v("Install NVM (Node Version Manager):")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash\nsource ~/.bashrc\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Install Node.js:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("nvm install 20.11.1\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Install build tools")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo apt install build-essential\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Install SQLite:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo apt install sqlite3 -y\n")])])])])]),e._v(" "),t("h2",{attrs:{id:"install-the-node"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-the-node"}},[e._v("#")]),e._v(" Install the Node")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Navigate to the desired installation location:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("NOTE")]),e._v(": Your database of Arweave Transaction Headers will be created in the project directory, not Docker. So, if you are using an external hard drive to turn an old machine into a node, install the node directly to that external drive.")])])]),e._v(" "),t("li",[t("p",[e._v("Clone the ar-io-node repository and navigate into it:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("git clone -b main https://github.com/ar-io/ar-io-node\ncd ar-io-node\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Create an environmental variables file:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("nano .env\n")])])]),t("p",[e._v("Paste the following content into the new file, replacing with the domain address you are using to access the node, and with the public address of your Arweave wallet, save, and exit:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("\nGRAPHQL_HOST=arweave.net\nGRAPHQL_PORT=443\nSTART_HEIGHT=0\nRUN_OBSERVER=true\nARNS_ROOT_HOST=\nAR_IO_WALLET=\nOBSERVER_WALLET=\n")])])]),t("ul",[t("li",[e._v("The GRAPHQL values set the proxy for GQL queries to arweave.net, You may use any available gateway that supports GQL queries. If omitted, your node can support GQL queries on locally indexed transactions, but only L1 transactions are indexed by default.")]),e._v(" "),t("li",[t("code",[e._v("START_HEIGHT")]),e._v(" is an optional line. It sets the block number where your node will start downloading and indexing transactions headers. Omitting this line will begin indexing at block 0.")]),e._v(" "),t("li",[t("code",[e._v("RUN_OBSERVER")]),e._v(" turns on the Observer to generate Network Compliance Reports. This is required for full participation in the AR.IO Network. Set to "),t("code",[e._v("false")]),e._v(" to run your gateway without Observer.")]),e._v(" "),t("li",[t("code",[e._v("ARNS_ROOT_HOST")]),e._v(" sets the starting point for resolving ARNS names, which are accessed as a subdomain of a gateway. It should be set to the url you are pointing to your node, excluding any protocol prefix. For example, use "),t("code",[e._v("node-ar.io")]),e._v(" and not "),t("code",[e._v("https://node-ar.io")]),e._v(". If you are using a subdomain to access your node and do not set this value, the node will not understand incoming requests.")]),e._v(" "),t("li",[t("code",[e._v("AR_IO_WALLET")]),e._v(" is optional, and sets the wallet you want associated with your Gateway. An associated wallet is required to join the AR.IO network.")]),e._v(" "),t("li",[t("code",[e._v("OBSERVER_WALLET")]),e._v(" is the public address of the wallet used to sign Observer transactions. This is required for Observer to run, but may be omitted if you are running a gateway outside of the AR.IO network and do not plan to run Observer. You will need to supply the keyfile to this wallet in the next step.")])]),e._v(" "),t("p",[e._v("Advanced configuration options can be found at "),t("a",{attrs:{href:"https://docs.ar.io/gateways/ar-io-node/advanced-config.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("docs.ar.io"),t("OutboundLink")],1)])]),e._v(" "),t("li",[t("p",[e._v("Supply Your Observer Wallet Keyfile:")]),e._v(" "),t("p",[e._v("If you are running Observer, you need to provide a wallet keyfile in order to sign report upload transactions. The keyfile must be saved in the "),t("code",[e._v("wallets")]),e._v(" directory in the root of the repository. Name the file "),t("code",[e._v(".json")]),e._v(', replacing "" with the public address of the wallet. This should match your '),t("code",[e._v("OBSERVER_WALLET")]),e._v(" environmental variable.")]),e._v(" "),t("p",[e._v("Learn more about creating Arweave wallets and obtaining keyfiles "),t("a",{attrs:{href:"https://ar.io/wallet/",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1)])]),e._v(" "),t("li",[t("p",[e._v("Start the Docker container:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo docker-compose up -d\n")])])]),t("ul",[t("li",[e._v("Explanation of flags:\n"),t("ul",[t("li",[t("code",[e._v("up")]),e._v(": Start the Docker containers.")]),e._v(" "),t("li",[t("code",[e._v("-d")]),e._v(": Run the containers as background processes (detached mode).")])])])]),e._v(" "),t("p",[t("strong",[e._v("NOTE")]),e._v(": Effective with Release #3, it is no longer required to include the "),t("code",[e._v("--build")]),e._v(" flag when starting your gateway. Docker will automatically build using the image specified in the "),t("code",[e._v("docker-commpose.yaml")]),e._v(" file.")]),e._v(" "),t("p",[e._v("To shut down your gateway, run the command:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo docker-compose down\n")])])])])]),e._v(" "),t("p",[e._v("To ensure your node is running correctly, check the logs for errors:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo docker-compose logs -f --tail=0\n")])])]),t("ul",[t("li",[e._v("Explanation of flags:\n"),t("ul",[t("li",[t("code",[e._v("-f")]),e._v(": Follow the logs in real time.")]),e._v(" "),t("li",[t("code",[e._v("--tail=0")]),e._v(": Ignore all logs from before running the command.")])])])]),e._v(" "),t("p",[t("strong",[e._v("NOTE")]),e._v(": Previous versions of these instructions advised checking a gateway's ability to fetch content using "),t("code",[e._v("localhost")]),e._v(". Subsequent security updates prevent this without first disabling "),t("code",[e._v("ARNS_ROOT_HOST")]),e._v(" in your "),t("code",[e._v(".env")]),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"set-up-networking"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-up-networking"}},[e._v("#")]),e._v(" Set up Networking")]),e._v(" "),t("p",[e._v("The following guide assumes you are running your node on a local home computer.")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Register a Domain Name:\nChoose a domain registrar (e.g., "),t("a",{attrs:{href:"https://www.namecheap.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("Namecheap"),t("OutboundLink")],1),e._v(") to register a domain name.")])]),e._v(" "),t("li",[t("p",[e._v("Point the Domain at Your Home Internet:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Obtain your public IP address by visiting https://www.whatsmyip.org/ or running:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("curl ifconfig.me\n")])])])]),e._v(" "),t("li",[t("p",[e._v('Create an A record with your registrar for your domain and wildcard subdomains, using your public IP address. For example, if your domain is "ar.io," create a record for "ar.io" and "*.ar.io."')])])])]),e._v(" "),t("li",[t("p",[e._v("Set up Port Forwarding:")]),e._v(" "),t("ul",[t("li",[e._v("Obtain the local IP address of the machine where the node is installed by running:"),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("ip addr show | grep -w inet | awk '{print $2}' | awk -F'/' '{print $1}'\n")])])]),t("ul",[t("li",[e._v("If there are multiple lines of output, choose the one starting with 192 (usually).")])])]),e._v(" "),t("li",[e._v("Enter your router's IP address in the address bar of a browser (e.g., "),t("code",[e._v("192.168.0.1")]),e._v(").\n"),t("ul",[t("li",[e._v("If you're unsure of your router's IP address, consult your router's documentation or contact your Internet Service Provider (ISP).")])])]),e._v(" "),t("li",[e._v("Navigate to the port forwarding settings in your router configuration.\n"),t("ul",[t("li",[e._v("The exact steps may vary depending on your router model. Consult your router's documentation or support for detailed steps.")])])]),e._v(" "),t("li",[e._v("Set up port forwarding rules to forward incoming traffic on ports 80 (HTTP) and 443 (HTTPS) to the same ports on the machine running your node. You may also forward port 22 if you want to enable SSH access to your node from outside your home network.")])])]),e._v(" "),t("li",[t("p",[e._v("Create SSL (HTTPS) Certificates for Your Domain:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo certbot certonly --manual --preferred-challenges dns --email -d .com -d '*..com'\n")])])]),t("p",[e._v("Follow the instructions to create the required TXT records for your domain in your chosen registrar. Use a "),t("a",{attrs:{href:"https://dnschecker.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("DNS checker"),t("OutboundLink")],1),e._v(" to verify the propagation of each record. This can take some time.")]),e._v(" "),t("p",[t("strong",[e._v("IMPORTANT")]),e._v(": Wild card subdomain (*..com) cannot auto renew without obtaining an API key from your domain registrar. Not all registrars offer this. Certbot certificates expire every 90 days. Be sure to consult with your chosen registrar to see if they offer an API for this purpose, or run the above command again to renew your certificates. You will receive an email warning at the address you provided to remind you when it is time to renew.")])]),e._v(" "),t("li",[t("p",[e._v("Configure nginx:\nnginx is a free and open-source web server and reverse proxy server. It will handle incoming traffic, provide SSL certificates, and redirect the traffic to your node.")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Open the default configuration file:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo nano /etc/nginx/sites-available/default\n")])])])]),e._v(" "),t("li",[t("p",[e._v('Replace the file\'s contents with the following configuration (replace "" when necessary):')]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("# Force redirects from HTTP to HTTPS\nserver {\n listen 80;\n listen [::]:80;\n server_name .com *..com;\n\n location / {\n return 301 https://$host$request_uri;\n }\n}\n\n# Forward traffic to your node and provide SSL certificates\nserver {\n listen 443 ssl;\n listen [::]:443 ssl;\n server_name .com *..com;\n\n ssl_certificate /etc/letsencrypt/live/.com/fullchain.pem;\n ssl_certificate_key /etc/letsencrypt/live/.com/privkey.pem;\n\n location / {\n proxy_pass http://localhost:3000;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_http_version 1.1;\n }\n}\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Save and exit nano.")])]),e._v(" "),t("li",[t("p",[e._v("Test the configuration:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo nginx -t\n")])])])]),e._v(" "),t("li",[t("p",[e._v("If there are no errors, restart nginx:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo service nginx restart\n")])])])])])])]),e._v(" "),t("p",[e._v("Your node should now be running and connected to the internet. Test it by entering https:///3lyxgbgEvqNSvJrTX2J7CfRychUD5KClFhhVLyTPNCQ in your browser.")]),e._v(" "),t("p",[t("strong",[e._v("Note")]),e._v(": If you encounter any issues during the installation process, please seek assistance from the "),t("a",{attrs:{href:"https://discord.gg/7zUPfN4D6g",target:"_blank",rel:"noopener noreferrer"}},[e._v("AR.IO community"),t("OutboundLink")],1),e._v(".")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/50.d222d982.js b/assets/js/50.641ebe19.js similarity index 91% rename from assets/js/50.d222d982.js rename to assets/js/50.641ebe19.js index 5b9c2766..f7a26965 100644 --- a/assets/js/50.d222d982.js +++ b/assets/js/50.641ebe19.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{352:function(e,t,s){"use strict";s.r(t);var n=s(10),o=Object(n.a)({},(function(){var e=this._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[e("h1",{attrs:{id:"overview"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[this._v("#")]),this._v(" Overview")]),this._v(" "),e("p",[this._v("Easy setup guides have been designed to get your AR.IO Gateway up and running correctly and quickly. These guides only go through some basic configurations, while more advanced options can be found "),e("RouterLink",{attrs:{to:"/gateways/ar-io-node/advanced-config.html"}},[this._v("here")])],1)])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{351:function(e,t,s){"use strict";s.r(t);var n=s(10),o=Object(n.a)({},(function(){var e=this._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[e("h1",{attrs:{id:"overview"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[this._v("#")]),this._v(" Overview")]),this._v(" "),e("p",[this._v("Easy setup guides have been designed to get your AR.IO Gateway up and running correctly and quickly. These guides only go through some basic configurations, while more advanced options can be found "),e("RouterLink",{attrs:{to:"/gateways/ar-io-node/advanced-config.html"}},[this._v("here")])],1)])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/51.8f645cd4.js b/assets/js/51.6af9064b.js similarity index 99% rename from assets/js/51.8f645cd4.js rename to assets/js/51.6af9064b.js index 6a835c13..faf286d6 100644 --- a/assets/js/51.8f645cd4.js +++ b/assets/js/51.6af9064b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{351:function(e,t,a){"use strict";a.r(t);var r=a(10),i=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"ar-io-release-notes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ar-io-release-notes"}},[e._v("#")]),e._v(" ar.io Release Notes")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("Welcome to the documentation page for the ar.io gateway release notes. Here, you will find detailed information about each version of the ar.io gateway, including the enhancements, bug fixes, and any other changes introduced in every release. This page serves as a comprehensive resource to keep you informed about the latest developments and updates in the ar.io gateway. For those interested in exploring the source code, each release's code is readily accessible at our GitHub repository: ar.io gateway "),t("a",{attrs:{href:"https://github.com/ar-io/ar-io-node/blob/main/CHANGELOG.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("change logs"),t("OutboundLink")],1),e._v(". Stay updated with the continuous improvements and advancements in the ar.io gateway by referring to this page for all release-related information.")]),e._v(" "),t("h2",{attrs:{id:"release-18-2024-10-01"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-18-2024-10-01"}},[e._v("#")]),e._v(" [Release 18] - 2024-10-01")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Improved performance of data attributes query that was preventing "),t("code",[e._v("data.db")]),e._v("\nWAL flushing.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added WAL "),t("code",[e._v("sqlite_wal_checkpoint_pages")]),e._v(" Prometheus metric to help monitor WAL\nflushing.")]),e._v(" "),t("li",[e._v("Added a POST "),t("code",[e._v("/ar-io/admin/export-parquet")]),e._v(" endpoint that can be used to\nexport the contents of the SQLite3 core and bundle DBs as Parquet. To trigger\nan export, POST JSON containing "),t("code",[e._v("outputDir")]),e._v(", "),t("code",[e._v("startHeight")]),e._v(", "),t("code",[e._v("endHeight")]),e._v(", and\n"),t("code",[e._v("maxFileRows")]),e._v(" keys. The resulting Parquet files can then be queried directly\nusing DuckDB or loaded into another system (e.g. ClickHouse). Scripts will be\nprovided to help automate the latter in a future release.")]),e._v(" "),t("li",[e._v("Added "),t("code",[e._v("ARNS_RESOLVER_OVERRIDE_TTL_SECONDS")]),e._v(" that can be used to force ArNS\nnames to refresh before their TTLs expire.")]),e._v(" "),t("li",[e._v("Added a GET "),t("code",[e._v("/ar-io/resolver/:name")]),e._v(" endpoint that returns an ArNS resolution\nfor the given name.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Removed ArNS resolver service in favor of integrated resolver. If a\nstandalone resolver is still desired, the core service can be run with the\n"),t("code",[e._v("START_WRITERS")]),e._v(" environment variable set to "),t("code",[e._v("false")]),e._v(". This will disable\nindexing while preserving resolver functionality.")]),e._v(" "),t("li",[e._v("Deduplicated writes to "),t("code",[e._v("data.db")]),e._v(" to improve performance and reduce WAL growth\nrate.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-17-2024-09-09"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-17-2024-09-09"}},[e._v("#")]),e._v(" [Release 17] - 2024-09-09")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Notes")])]),e._v(" "),t("ul",[t("li",[e._v("This release includes a "),t("strong",[e._v("LONG RUNNING MIGRATION")]),e._v(". Your node may appear\nunresponsive while it is running. It is best to wait for it to complete. If\nit fails or is interrupted, removing your SQLite DBs (in "),t("code",[e._v("data/sqlite")]),e._v(" by\ndefault) should resolve the issue, provided you are willing to lose your\nGraphQL index and let your node rebuild it.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Use the correct environment variable to populate "),t("code",[e._v("WEBHOOK_BLOCK_FILTER")]),e._v(" in\n"),t("code",[e._v("docker-compose.yaml")]),e._v(".")]),e._v(" "),t("li",[e._v("Don't cache data regions retrieved to satisfy range requests to avoid\nunnecessary storage overhead and prevent inserting invalid ID to hash\nmappings into the data DB.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added a new ClickHouse based DB backend. It can be used in combination with\nthe SQLite DB backend to enable batch loading of historical data from\nParquet. It also opens up the possibility of higher DB performance and\nscalability. In its current state it should be considered a technology\npreview. It won't be useful to most users until we either provide Parquet\nfiles to load into it or automate flushing of the SQLite DB to it (both are\nplanned in future release). It is not intended to be standalone solution. It\nsupports bulk loading and efficient GraphQL querying of transactions and data\nitems, but it relies on SQLite (or potentially another OLTP in the future) to\nindex recent data. These limitations allow greatly simplified schema and\nquery construction. Querying the new ClickHouse DB for transaction and data\nitems via GraphQL is enabled by setting the "),t("code",[e._v("CLICKHOUSE_URL")]),e._v(" environment\nvariable.")]),e._v(" "),t("li",[e._v("Added the ability to skip storing transaction signatures in the DB by setting\nWRITE_TRANSACTION_DB_SIGNATURES to false. Missing signatures are fetched from\nthe trusted Arweave node when needed for GraphQL results.")]),e._v(" "),t("li",[e._v("Added a Redis backed signature cache to support retrieving optimistically\nindexed data item signatures in GraphQL queries when writing data items\nsignatures to the DB has been disabled.")]),e._v(" "),t("li",[e._v("Added on-demand and composite ArNS resolvers. The on-demand resolver\nfetches results directly from an AO CU. The composite resolver attempts\nresolution in the order specified by the "),t("code",[e._v("ARNS_RESOLVER_PRIORITY_ORDER")]),e._v("\nenvironment variable (defaults to "),t("code",[e._v("on-demand,gateway")]),e._v(").")]),e._v(" "),t("li",[e._v("Added a queue_length Prometheus metric to fasciliate monitoring queues and\ninform future optimizations")]),e._v(" "),t("li",[e._v("Added SQLite WAL cleanup worker to help manage the size of the "),t("code",[e._v("data.db-wal")]),e._v("\nfile. Future improvements to "),t("code",[e._v("data.db")]),e._v(" usage are also planned to further\nimprove WAL management.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Handle data requests by ID on ArNS sites. This enables ArNS sites to use\nrelative links to data by ID.")]),e._v(" "),t("li",[e._v("Replaced "),t("code",[e._v("ARNS_RESOLVER_TYPE")]),e._v(" with "),t("code",[e._v("ARNS_RESOLVER_PRIORITY_ORDER")]),e._v(" (defaults to\n"),t("code",[e._v("on-demand,gateway")]),e._v(").")]),e._v(" "),t("li",[e._v("Introduced unbundling back pressure. When either data item data or GraphQL\nindexing queue depths are more than the value specified by the\n"),t("code",[e._v("MAX_DATA_ITEM_QUEUE_SIZE")]),e._v(" environment variable (defaults to 100000),\nunbundling is paused until the queues length falls bellow that threshold.\nThis prevents the gateway from running out of memory when the unbundling rate\nexceeds the indexing rate while avoiding wasteful bundle reprocessing.")]),e._v(" "),t("li",[e._v("Prioritized optimistic data item indexing by inserting optimistic data items\nat the front of the indexing queues.")]),e._v(" "),t("li",[e._v("Prioritized nested bundle indexing by inserting nested bundles at the front\nof the unbundling queue.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-16-2024-08-09"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-16-2024-08-09"}},[e._v("#")]),e._v(" [Release 16] - 2024-08-09")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Fixed promise leak caused by missing await when saving data items to the DB.")]),e._v(" "),t("li",[e._v("Modified ArNS middleware to not attempt resolution when receiving requests for a different hostname than the one specified by "),t("code",[e._v("ARNS_ROOT_HOST")]),e._v(".")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added support for returning "),t("code",[e._v("Content-Encoding")]),e._v(" HTTP headers based on user specified Content-Encoding tags.")]),e._v(" "),t("li",[e._v("Added "),t("code",[e._v("isNestedBundle")]),e._v(" filter enables that matches any nested bundle when indexing. This enables composite unbundling filters that match a set of L1 tags and bundles nested under them.")]),e._v(" "),t("li",[e._v("Added ability to skip writing ANS-104 signatures to the DB and load them based on offsets from the data instead. This significantly reduces the size of the bundles DB. It can be enabled by setting the "),t("code",[e._v("WRITE_ANS104_DATA_ITEM_DB_SIGNATURES")]),e._v(" environment variable to false.")]),e._v(" "),t("li",[e._v("Added "),t("code",[e._v("data_item_data_indexed_total")]),e._v(" Prometheus counter to count data items with data attributes indexed.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Queue data attributes writes when serving data rather than writing them syncronously.")]),e._v(" "),t("li",[e._v("Reduced the default data indexer count to 1 to lessen the load on the data DB.")]),e._v(" "),t("li",[e._v("Switched a number of overly verbose info logs to debug level.")]),e._v(" "),t("li",[e._v("Removed docker-compose on-failure restart limits to ensure that services restart no matter how many times they fail.")]),e._v(" "),t("li",[e._v("Modified the "),t("code",[e._v("data_items_indexed_total")]),e._v(" Prometheus counter to count data items indexed for GraphQL querying instead of data attributes.")]),e._v(" "),t("li",[e._v("Increased aggressiveness of contiguous data cleanup. It now pauses 5 seconds instead of 10 seconds per batch and runs every 4 hours instead of every 24 hours.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-15-2024-07-19"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-15-2024-07-19"}},[e._v("#")]),e._v(" [Release 15] - 2024-07-19")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Fixed query error that was preventing bundles from being marked as fully imported in the database.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Adjusted data item indexing to record data item signature types in the DB. This helps distinguish between signatures using different key formats, and will enable querying by signature type in the future.")]),e._v(" "),t("li",[e._v("Adjusted data item indexing to record offsets for data items within bundles and signatures and owners within data items. In the future this will allow us to avoid saving owners and signatures in the DB and thus considerably reduce the size of the bundles DB.")]),e._v(" "),t("li",[e._v("Added "),t("code",[e._v("ARNS_CACHE_TTL_MS")]),e._v(" environment variable to control the TTL of ARNS cache entries (defaults to 1 hour).")]),e._v(" "),t("li",[e._v("Added support for multiple ranges in a single HTTP range request.")]),e._v(" "),t("li",[e._v("Added experimental chunk POST endpoint that broadcasts chunks to the comma-separate list of URLS in the "),t("code",[e._v("CHUNK_BROADCAST_URLS")]),e._v(" environment variable. It is available at "),t("code",[e._v("/chunk")]),e._v(" on the internal gateway service port (4000 by default) but is not yet exposed through Envoy.")]),e._v(" "),t("li",[e._v("Added support for running an AO CU adjacent to the gateway (see README.md for details).")]),e._v(" "),t("li",[e._v("Added "),t("code",[e._v("X-ArNS-Process-Id")]),e._v(" to ArNS resolved name headers.")]),e._v(" "),t("li",[e._v("Added a set of "),t("code",[e._v("AO_...")]),e._v(" environment variables for specifying which AO URLs should be used (see "),t("code",[e._v("docker-compose.yaml")]),e._v(" for the complete list). The "),t("code",[e._v("AO_CU_URL")]),e._v(" is of particular use since the core and resolver services only perform AO reads and only the CU is needed for reads.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Split the monolithic "),t("code",[e._v("docker-compose.yaml")]),e._v(" into "),t("code",[e._v("docker-compose.yaml")]),e._v(", "),t("code",[e._v("docker-compose.bundler.yaml")]),e._v(", and "),t("code",[e._v("docker-compose.ao.yaml")]),e._v(" (see README for details).")]),e._v(" "),t("li",[e._v("Replaced references to 'docker-compose' with 'docker compose' in the docs since the former is mostly deprecated.")]),e._v(" "),t("li",[e._v("Reduce max fork depth from 50 to 18 inline to reflect Arweave 2.7.2 protocol changes.")]),e._v(" "),t("li",[e._v("Increased the aggressiveness of bundle reprocessing by reducing reprocessing interval from 10 minutes to 5 minutes and raising reprocessing batch size from 100 to 1000.")]),e._v(" "),t("li",[e._v("Use a patched version of Litestream to work around insufficient S3 multipart upload size in the upstream version.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-14-2024-06-26"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-14-2024-06-26"}},[e._v("#")]),e._v(" [Release 14] - 2024-06-26")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Correctly handle manifest "),t("code",[e._v("index")]),e._v(" after "),t("code",[e._v("paths")]),e._v(".")])])])]),e._v(" "),t("h2",{attrs:{id:"release-13-2024-06-24"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-13-2024-06-24"}},[e._v("#")]),e._v(" [Release 13] - 2024-06-24")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added support for optimistically reading data items uploaded using the integrated Turbo bundler via the LocalStack S3 interface.")]),e._v(" "),t("li",[e._v("Added "),t("code",[e._v("X-AR-IO-Origin-Node-Release")]),e._v(" header to outbound data requests.")]),e._v(" "),t("li",[e._v("Added "),t("code",[e._v("hops")]),e._v(", "),t("code",[e._v("origin")]),e._v(", and "),t("code",[e._v("originNodeRelease")]),e._v(" query params to outbound data requests.")]),e._v(" "),t("li",[e._v("Added support for "),t("code",[e._v("fallback")]),e._v(" in v0.2 manifests that is used if no path in the manifest is matched.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Updated Observer to read prescribed names from and write observations to the ar.io AO network process.")]),e._v(" "),t("li",[e._v("Updated Resolver to read from the ar.io AO network process.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Modified optimistic indexing of data items to use a null "),t("code",[e._v("parent_id")]),e._v(" when inserting into the DB instead of a placeholder value. This prevents unexpected non-null "),t("code",[e._v("bundledIn")]),e._v(" values in GraphQL results for optimistically indexed data items.")]),e._v(" "),t("li",[e._v("Modified GraphQl query logic to require an ID for single block GraphQL queries. Previously queries missing an ID were returning an internal SQLite error. This represents a small departure from arweave.net's query logic which returns the latest block for these queries. We recommend querying "),t("code",[e._v("blocks")]),e._v(" instead of "),t("code",[e._v("block")]),e._v(" in cases where the latest block is desired.")]),e._v(" "),t("li",[e._v("Adjusted Observer health check to reflect port change to 5050.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Security")])]),e._v(" "),t("ul",[t("li",[e._v("Modified docker-compose.yaml to only expose Redis, PostgreSQL, and LocalStack ports internally. This protects gateways that neglect to deploy behind a firewall, reverse proxy, or load balancer.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-12-2024-06-05"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-12-2024-06-05"}},[e._v("#")]),e._v(" [Release 12] - 2024-06-05")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added "),t("code",[e._v("/ar-io/admin/queue-data-item")]),e._v(" endpoint for queuing data item headers for indexing before the bundles containing them are processed. This allows trusted bundlers to make their data items quickly available to be queried via GraphQL without having to wait for bundle data submission or unbundling.")]),e._v(" "),t("li",[e._v("Added experimental support for retrieving contiguous data from S3. See "),t("code",[e._v("AWS_*")]),e._v(" "),t("a",{attrs:{href:""}},[e._v("environment variables documentation")]),e._v(" for configuration details. In conjuction with a local Turbo bundler this allows optimistic bundle (but not yet data item) retrieval.")]),e._v(" "),t("li",[e._v("Add experimental support for fetching data from gateway peers. It can be enabled by adding "),t("code",[e._v("ario-peer")]),e._v(" to "),t("code",[e._v("ON_DEMAND_RETRIEVAL_ORDER")]),e._v(". Note: do not expect this work reliably yet! This functionality is in active development and will be improved in future releases.")]),e._v(" "),t("li",[e._v("Add "),t("code",[e._v("import_attempt_count")]),e._v(" to "),t("code",[e._v("bundle")]),e._v(" records to enable future bundle import retry optimizations.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Removed "),t("code",[e._v("version")]),e._v(" from "),t("code",[e._v("docker-compose.yaml")]),e._v(" to avoid warnings with recent versions of "),t("code",[e._v("docker-compose")]),e._v(".")]),e._v(" "),t("li",[e._v("Switched default observer port from 5000 to 5050 to avoid conflict on OS X. Since Envoy is used to provide external access to the observer API this should have no user visible effect.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-11-2024-05-21"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-11-2024-05-21"}},[e._v("#")]),e._v(" [Release 11] - 2024-05-21")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added "),t("code",[e._v("arweave_tx_fetch_total")]),e._v(" Prometheus metric to track counts of transaction headers fetched from the trusted node and Arweave network peers.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Revert to using unnamed bind mounts due to cross platform issues with named volumes.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-10-2024-05-20"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-10-2024-05-20"}},[e._v("#")]),e._v(" [Release 10] - 2024-05-20")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added experimental support for streaming SQLite backups to S3 (and compatible services) using "),t("a",{attrs:{href:"https://litestream.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Litestream"),t("OutboundLink")],1),e._v('. Start the service using the docker-compose "litestream" profile to use it, and see the '),t("code",[e._v("AR_IO_SQLITE_BACKUP_*")]),e._v(" "),t("a",{attrs:{href:"https://github.com/ar-io/ar-io-node/blob/r10-prep/docs/env.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("environment variables documentation"),t("OutboundLink")],1),e._v(" for further details.")]),e._v(" "),t("li",[e._v("Added "),t("code",[e._v("/ar-io/admin/queue-bundle")]),e._v(" endpoint for queueing bundles for import for import before they're in the mempool. In the future this will enable optimistic indexing when combined with a local trusted bundler.")]),e._v(" "),t("li",[e._v("Added support for triggering webhooks when blocks are imported matching the filter specified by the "),t("code",[e._v("WEBHOOK_BLOCK_FILTER")]),e._v(" environment variable.")]),e._v(" "),t("li",[e._v("Added experimental support for indexing transactions and related data items from the mempool. Enable it by setting "),t("code",[e._v("ENABLE_MEMPOOL_WATCHER")]),e._v(" to 'true'.")]),e._v(" "),t("li",[e._v("Made on-demand data caching circuit breakers configurable via the "),t("code",[e._v("GET_DATA_CIRCUIT_BREAKER_TIMEOUT_MS")]),e._v(" environment variable. This allows gateway operators to decide how much latency they will tolerate when serving data in exchange for more complete data indexing and caching.")]),e._v(" "),t("li",[e._v("Rename cache header from "),t("code",[e._v("X-Cached")]),e._v(" to "),t("code",[e._v("X-Cache")]),e._v(" to mimic typical CDN practices.")]),e._v(" "),t("li",[e._v("Add X-AR-IO-Hops and X-AR-IO-Origin headers in preparation for future peer-to-peer functionality.")]),e._v(" "),t("li",[e._v("Upgrade to Node.js v20 and switch to native test runner.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-9-2024-04-10"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-9-2024-04-10"}},[e._v("#")]),e._v(" [Release 9] - 2024-04-10")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Added")]),e._v(" "),t("ul",[t("li",[e._v("Added experimental Farcaster Frames support, enabling simple Arweave based Frames with button navigation. Transaction and data item data is now served under "),t("code",[e._v("/local/farcaster/frame/")]),e._v(". "),t("code",[e._v("/local")]),e._v(" is used as a prefix to indicate this functionality is both experimental and local to a particular gateway rather than part of the global gateway API. Both GET and POST requests are supported.")]),e._v(" "),t("li",[e._v("Added an experimental local ArNS resolver. When enabled it removes dependence on arweave.net for ArNS resolution! Enable it by setting "),t("code",[e._v("RUN_RESOLVER=TRUE")]),e._v(", "),t("code",[e._v("TRUSTED_ARNS_RESOLVER_TYPE=resolver")]),e._v(", and "),t("code",[e._v("TRUSTED_ARNS_RESOLVER_URL=http://resolver:6000")]),e._v(" in your "),t("code",[e._v(".env")]),e._v(" file.")]),e._v(" "),t("li",[e._v("Added an "),t("code",[e._v("X-Cached")]),e._v(" header to data responses to indicate when data is served from the local cache rather than being retrieved from an external source. This is helpful for interfacing with external systems, debugging, and end-to-end testing.")]),e._v(" "),t("li",[e._v("Save hashes for unbundled data items during indexing. This enables reduction in data storage via hash based deduplication as well as more efficient peer-to-peer data retrieval in the future.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-8-2024-03-14"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-8-2024-03-14"}},[e._v("#")]),e._v(" [Release 8] - 2024-03-14")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added GraphQL SQL query debug logging to support trouble-shooting and performance optimization.")]),e._v(" "),t("li",[e._v("Added support for indexing data items (not GraphQL querying) based solely on tag name. (example use case: indexing all IPFS CID tagged data items).")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changes")])]),e._v(" "),t("ul",[t("li",[e._v("Observer data sampling now uses randomized ranges to generate content hashes.")]),e._v(" "),t("li",[e._v("Reference gateway ArNS resolutions are now cached to improve report generation performance.")]),e._v(" "),t("li",[e._v("Contract interactions are now tested before posting using "),t("code",[e._v("dryWrite")]),e._v(" to avoid submitting interactions that would fail.")]),e._v(" "),t("li",[t("code",[e._v("/ar-io/observer/info")]),e._v(" now reports "),t("code",[e._v("INVALID")]),e._v(" for wallets that fail to load.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Fix data caching failure caused by incorrect method name in "),t("code",[e._v("getData")]),e._v(" circuit breakers.")]),e._v(" "),t("li",[e._v("Fix healthcheck when "),t("code",[e._v("ARNS_ROOT_HOST")]),e._v(" includes a subdomain.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-7-2024-02-14"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-7-2024-02-14"}},[e._v("#")]),e._v(" [Release 7] - 2024 - 02 - 14")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Add support for notifying other services of transactions and data items using webhooks (see README for details).")]),e._v(" "),t("li",[e._v("Add support for filter negation (particularly useful for excluding large bundles from indexint).")]),e._v(" "),t("li",[e._v("Improve unbundling throughput by decoupling data fetching from unbundling.")]),e._v(" "),t("li",[e._v("Add Envoy and core service ARM builds.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Improve resouce cleanup and shutdown behavior.")]),e._v(" "),t("li",[e._v("Don't save Redis data to disk by default to help prevent memory issues on startup for small gateways.")]),e._v(" "),t("li",[e._v("Reduce the amount of data sampled from large files by the observer.")]),e._v(" "),t("li",[e._v("Ensure block poa2 field is not chached to reduce memory consumption.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-6-2024-01-29"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-6-2024-01-29"}},[e._v("#")]),e._v(" [Release 6] - 2024-01-29")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Fixed")]),e._v(" "),t("ul",[t("li",[e._v("Update observer to improve reliability of contract state synchronization and evaluation.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-5-2024-01-25"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-5-2024-01-25"}},[e._v("#")]),e._v(" [Release 5] - 2024-01-25")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added transaction offset indexing to support future data retrieval capabilities.")]),e._v(" "),t("li",[e._v("Enabled IPv6 support in Envoy config.")]),e._v(" "),t("li",[e._v("Added ability to configure observer report generation interval via the "),t("code",[e._v("REPORT_GENERATION_INTERVAL_MS")]),e._v(" environmental variable. (Intended primarily for development and testing)")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Updated observer to properly handle FQDN conflicts.")]),e._v(" "),t("li",[e._v("Renamed most "),t("code",[e._v("created_at")]),e._v(" columns to index to "),t("code",[e._v("indexed_at")]),e._v(" for consistency and clarity.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Updated LMDB version to remove Buffer workaround and fix occasional block cache errors.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-4-2024-01-11"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-4-2024-01-11"}},[e._v("#")]),e._v(" [Release 4] - 2024-01-11")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added circuit breakers around data index access to reduce impact of DB access contention under heavy requests loads.")]),e._v(" "),t("li",[e._v("Added support for configuring data source priority via the ON_DEMAND_RETRIEVAL_ORDER environment variable.")]),e._v(" "),t("li",[e._v("Updated observer to a version that retrieves epoch start and duration from contract state.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Set the Redis max memory eviction policy to "),t("code",[e._v("allkeys-lru")]),e._v(".")]),e._v(" "),t("li",[e._v("Reduced default Redis max memory from 2GB to 256MB.")]),e._v(" "),t("li",[e._v("Improved predictability and performance of GraphQL queries.")]),e._v(" "),t("li",[e._v("Eliminated unbundling worker threads when filters are configured to skip indexing ANS-104 bundles.")]),e._v(" "),t("li",[e._v("Reduced the default number of ANS-104 worker threads from 2 to 1 when unbundling is enabled to conserve memory.")]),e._v(" "),t("li",[e._v("Increased nodejs max old space size to 8GB when ANS-104 workers > 1.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Adjusted paths for chunks indexed by data root to include the full data root.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-3-2023-12-05"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-3-2023-12-05"}},[e._v("#")]),e._v(" [Release 3] - 2023-12-05")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Support range requests ("),t("a",{attrs:{href:"https://github.com/ar-io/ar-io-node/pull/61",target:"_blank",rel:"noopener noreferrer"}},[e._v("PR 61"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://github.com/ar-io/ar-io-node/pull/64",target:"_blank",rel:"noopener noreferrer"}},[e._v("PR 64"),t("OutboundLink")],1),e._v(")\n"),t("ul",[t("li",[e._v("Note: serving multiple ranges in a single request is not yet supported.")])])]),e._v(" "),t("li",[e._v("Release number in "),t("code",[e._v("/ar-io/info")]),e._v(" response.")]),e._v(" "),t("li",[e._v("Redis header cache implementation ("),t("a",{attrs:{href:"https://github.com/ar-io/ar-io-node/pull/62",target:"_blank",rel:"noopener noreferrer"}},[e._v("PR 62"),t("OutboundLink")],1),e._v(").\n"),t("ul",[t("li",[e._v("New default header cache (replaces old FS cache).")])])]),e._v(" "),t("li",[e._v("LMDB header cache implementation ("),t("a",{attrs:{href:"https://github.com/ar-io/ar-io-node/pull/60",target:"_blank",rel:"noopener noreferrer"}},[e._v("PR 60"),t("OutboundLink")],1),e._v(").\n"),t("ul",[t("li",[e._v("Intended for use in development only.")]),e._v(" "),t("li",[e._v("Enable by setting "),t("code",[e._v("CHAIN_CACHE_TYPE=lmdb")]),e._v(".")])])]),e._v(" "),t("li",[e._v("Filesystem header cache cleanup worker ("),t("a",{attrs:{href:"https://github.com/ar-io/ar-io-node/pull/68",target:"_blank",rel:"noopener noreferrer"}},[e._v("PR 68"),t("OutboundLink")],1),e._v(").\n"),t("ul",[t("li",[e._v("Enabled by default to cleanup old filesystem cache now that Redis is the new default.")])])]),e._v(" "),t("li",[e._v("Support for parallel ANS-104 unbundling ("),t("a",{attrs:{href:"https://github.com/ar-io/ar-io-node/pull/65",target:"_blank",rel:"noopener noreferrer"}},[e._v("PR 65"),t("OutboundLink")],1),e._v(").")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Used pinned container images tags for releases.")]),e._v(" "),t("li",[e._v("Default to Redis header cache when running via docker-compose.")]),e._v(" "),t("li",[e._v("Default to LMDB header cache when running via "),t("code",[e._v("yarn start")]),e._v(".")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Correct GraphQL pagination for transactions with duplicate tags.")])])])])])}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{350:function(e,t,a){"use strict";a.r(t);var r=a(10),i=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"ar-io-release-notes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ar-io-release-notes"}},[e._v("#")]),e._v(" ar.io Release Notes")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("Welcome to the documentation page for the ar.io gateway release notes. Here, you will find detailed information about each version of the ar.io gateway, including the enhancements, bug fixes, and any other changes introduced in every release. This page serves as a comprehensive resource to keep you informed about the latest developments and updates in the ar.io gateway. For those interested in exploring the source code, each release's code is readily accessible at our GitHub repository: ar.io gateway "),t("a",{attrs:{href:"https://github.com/ar-io/ar-io-node/blob/main/CHANGELOG.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("change logs"),t("OutboundLink")],1),e._v(". Stay updated with the continuous improvements and advancements in the ar.io gateway by referring to this page for all release-related information.")]),e._v(" "),t("h2",{attrs:{id:"release-18-2024-10-01"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-18-2024-10-01"}},[e._v("#")]),e._v(" [Release 18] - 2024-10-01")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Improved performance of data attributes query that was preventing "),t("code",[e._v("data.db")]),e._v("\nWAL flushing.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added WAL "),t("code",[e._v("sqlite_wal_checkpoint_pages")]),e._v(" Prometheus metric to help monitor WAL\nflushing.")]),e._v(" "),t("li",[e._v("Added a POST "),t("code",[e._v("/ar-io/admin/export-parquet")]),e._v(" endpoint that can be used to\nexport the contents of the SQLite3 core and bundle DBs as Parquet. To trigger\nan export, POST JSON containing "),t("code",[e._v("outputDir")]),e._v(", "),t("code",[e._v("startHeight")]),e._v(", "),t("code",[e._v("endHeight")]),e._v(", and\n"),t("code",[e._v("maxFileRows")]),e._v(" keys. The resulting Parquet files can then be queried directly\nusing DuckDB or loaded into another system (e.g. ClickHouse). Scripts will be\nprovided to help automate the latter in a future release.")]),e._v(" "),t("li",[e._v("Added "),t("code",[e._v("ARNS_RESOLVER_OVERRIDE_TTL_SECONDS")]),e._v(" that can be used to force ArNS\nnames to refresh before their TTLs expire.")]),e._v(" "),t("li",[e._v("Added a GET "),t("code",[e._v("/ar-io/resolver/:name")]),e._v(" endpoint that returns an ArNS resolution\nfor the given name.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Removed ArNS resolver service in favor of integrated resolver. If a\nstandalone resolver is still desired, the core service can be run with the\n"),t("code",[e._v("START_WRITERS")]),e._v(" environment variable set to "),t("code",[e._v("false")]),e._v(". This will disable\nindexing while preserving resolver functionality.")]),e._v(" "),t("li",[e._v("Deduplicated writes to "),t("code",[e._v("data.db")]),e._v(" to improve performance and reduce WAL growth\nrate.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-17-2024-09-09"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-17-2024-09-09"}},[e._v("#")]),e._v(" [Release 17] - 2024-09-09")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Notes")])]),e._v(" "),t("ul",[t("li",[e._v("This release includes a "),t("strong",[e._v("LONG RUNNING MIGRATION")]),e._v(". Your node may appear\nunresponsive while it is running. It is best to wait for it to complete. If\nit fails or is interrupted, removing your SQLite DBs (in "),t("code",[e._v("data/sqlite")]),e._v(" by\ndefault) should resolve the issue, provided you are willing to lose your\nGraphQL index and let your node rebuild it.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Use the correct environment variable to populate "),t("code",[e._v("WEBHOOK_BLOCK_FILTER")]),e._v(" in\n"),t("code",[e._v("docker-compose.yaml")]),e._v(".")]),e._v(" "),t("li",[e._v("Don't cache data regions retrieved to satisfy range requests to avoid\nunnecessary storage overhead and prevent inserting invalid ID to hash\nmappings into the data DB.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added a new ClickHouse based DB backend. It can be used in combination with\nthe SQLite DB backend to enable batch loading of historical data from\nParquet. It also opens up the possibility of higher DB performance and\nscalability. In its current state it should be considered a technology\npreview. It won't be useful to most users until we either provide Parquet\nfiles to load into it or automate flushing of the SQLite DB to it (both are\nplanned in future release). It is not intended to be standalone solution. It\nsupports bulk loading and efficient GraphQL querying of transactions and data\nitems, but it relies on SQLite (or potentially another OLTP in the future) to\nindex recent data. These limitations allow greatly simplified schema and\nquery construction. Querying the new ClickHouse DB for transaction and data\nitems via GraphQL is enabled by setting the "),t("code",[e._v("CLICKHOUSE_URL")]),e._v(" environment\nvariable.")]),e._v(" "),t("li",[e._v("Added the ability to skip storing transaction signatures in the DB by setting\nWRITE_TRANSACTION_DB_SIGNATURES to false. Missing signatures are fetched from\nthe trusted Arweave node when needed for GraphQL results.")]),e._v(" "),t("li",[e._v("Added a Redis backed signature cache to support retrieving optimistically\nindexed data item signatures in GraphQL queries when writing data items\nsignatures to the DB has been disabled.")]),e._v(" "),t("li",[e._v("Added on-demand and composite ArNS resolvers. The on-demand resolver\nfetches results directly from an AO CU. The composite resolver attempts\nresolution in the order specified by the "),t("code",[e._v("ARNS_RESOLVER_PRIORITY_ORDER")]),e._v("\nenvironment variable (defaults to "),t("code",[e._v("on-demand,gateway")]),e._v(").")]),e._v(" "),t("li",[e._v("Added a queue_length Prometheus metric to fasciliate monitoring queues and\ninform future optimizations")]),e._v(" "),t("li",[e._v("Added SQLite WAL cleanup worker to help manage the size of the "),t("code",[e._v("data.db-wal")]),e._v("\nfile. Future improvements to "),t("code",[e._v("data.db")]),e._v(" usage are also planned to further\nimprove WAL management.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Handle data requests by ID on ArNS sites. This enables ArNS sites to use\nrelative links to data by ID.")]),e._v(" "),t("li",[e._v("Replaced "),t("code",[e._v("ARNS_RESOLVER_TYPE")]),e._v(" with "),t("code",[e._v("ARNS_RESOLVER_PRIORITY_ORDER")]),e._v(" (defaults to\n"),t("code",[e._v("on-demand,gateway")]),e._v(").")]),e._v(" "),t("li",[e._v("Introduced unbundling back pressure. When either data item data or GraphQL\nindexing queue depths are more than the value specified by the\n"),t("code",[e._v("MAX_DATA_ITEM_QUEUE_SIZE")]),e._v(" environment variable (defaults to 100000),\nunbundling is paused until the queues length falls bellow that threshold.\nThis prevents the gateway from running out of memory when the unbundling rate\nexceeds the indexing rate while avoiding wasteful bundle reprocessing.")]),e._v(" "),t("li",[e._v("Prioritized optimistic data item indexing by inserting optimistic data items\nat the front of the indexing queues.")]),e._v(" "),t("li",[e._v("Prioritized nested bundle indexing by inserting nested bundles at the front\nof the unbundling queue.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-16-2024-08-09"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-16-2024-08-09"}},[e._v("#")]),e._v(" [Release 16] - 2024-08-09")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Fixed promise leak caused by missing await when saving data items to the DB.")]),e._v(" "),t("li",[e._v("Modified ArNS middleware to not attempt resolution when receiving requests for a different hostname than the one specified by "),t("code",[e._v("ARNS_ROOT_HOST")]),e._v(".")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added support for returning "),t("code",[e._v("Content-Encoding")]),e._v(" HTTP headers based on user specified Content-Encoding tags.")]),e._v(" "),t("li",[e._v("Added "),t("code",[e._v("isNestedBundle")]),e._v(" filter enables that matches any nested bundle when indexing. This enables composite unbundling filters that match a set of L1 tags and bundles nested under them.")]),e._v(" "),t("li",[e._v("Added ability to skip writing ANS-104 signatures to the DB and load them based on offsets from the data instead. This significantly reduces the size of the bundles DB. It can be enabled by setting the "),t("code",[e._v("WRITE_ANS104_DATA_ITEM_DB_SIGNATURES")]),e._v(" environment variable to false.")]),e._v(" "),t("li",[e._v("Added "),t("code",[e._v("data_item_data_indexed_total")]),e._v(" Prometheus counter to count data items with data attributes indexed.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Queue data attributes writes when serving data rather than writing them syncronously.")]),e._v(" "),t("li",[e._v("Reduced the default data indexer count to 1 to lessen the load on the data DB.")]),e._v(" "),t("li",[e._v("Switched a number of overly verbose info logs to debug level.")]),e._v(" "),t("li",[e._v("Removed docker-compose on-failure restart limits to ensure that services restart no matter how many times they fail.")]),e._v(" "),t("li",[e._v("Modified the "),t("code",[e._v("data_items_indexed_total")]),e._v(" Prometheus counter to count data items indexed for GraphQL querying instead of data attributes.")]),e._v(" "),t("li",[e._v("Increased aggressiveness of contiguous data cleanup. It now pauses 5 seconds instead of 10 seconds per batch and runs every 4 hours instead of every 24 hours.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-15-2024-07-19"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-15-2024-07-19"}},[e._v("#")]),e._v(" [Release 15] - 2024-07-19")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Fixed query error that was preventing bundles from being marked as fully imported in the database.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Adjusted data item indexing to record data item signature types in the DB. This helps distinguish between signatures using different key formats, and will enable querying by signature type in the future.")]),e._v(" "),t("li",[e._v("Adjusted data item indexing to record offsets for data items within bundles and signatures and owners within data items. In the future this will allow us to avoid saving owners and signatures in the DB and thus considerably reduce the size of the bundles DB.")]),e._v(" "),t("li",[e._v("Added "),t("code",[e._v("ARNS_CACHE_TTL_MS")]),e._v(" environment variable to control the TTL of ARNS cache entries (defaults to 1 hour).")]),e._v(" "),t("li",[e._v("Added support for multiple ranges in a single HTTP range request.")]),e._v(" "),t("li",[e._v("Added experimental chunk POST endpoint that broadcasts chunks to the comma-separate list of URLS in the "),t("code",[e._v("CHUNK_BROADCAST_URLS")]),e._v(" environment variable. It is available at "),t("code",[e._v("/chunk")]),e._v(" on the internal gateway service port (4000 by default) but is not yet exposed through Envoy.")]),e._v(" "),t("li",[e._v("Added support for running an AO CU adjacent to the gateway (see README.md for details).")]),e._v(" "),t("li",[e._v("Added "),t("code",[e._v("X-ArNS-Process-Id")]),e._v(" to ArNS resolved name headers.")]),e._v(" "),t("li",[e._v("Added a set of "),t("code",[e._v("AO_...")]),e._v(" environment variables for specifying which AO URLs should be used (see "),t("code",[e._v("docker-compose.yaml")]),e._v(" for the complete list). The "),t("code",[e._v("AO_CU_URL")]),e._v(" is of particular use since the core and resolver services only perform AO reads and only the CU is needed for reads.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Split the monolithic "),t("code",[e._v("docker-compose.yaml")]),e._v(" into "),t("code",[e._v("docker-compose.yaml")]),e._v(", "),t("code",[e._v("docker-compose.bundler.yaml")]),e._v(", and "),t("code",[e._v("docker-compose.ao.yaml")]),e._v(" (see README for details).")]),e._v(" "),t("li",[e._v("Replaced references to 'docker-compose' with 'docker compose' in the docs since the former is mostly deprecated.")]),e._v(" "),t("li",[e._v("Reduce max fork depth from 50 to 18 inline to reflect Arweave 2.7.2 protocol changes.")]),e._v(" "),t("li",[e._v("Increased the aggressiveness of bundle reprocessing by reducing reprocessing interval from 10 minutes to 5 minutes and raising reprocessing batch size from 100 to 1000.")]),e._v(" "),t("li",[e._v("Use a patched version of Litestream to work around insufficient S3 multipart upload size in the upstream version.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-14-2024-06-26"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-14-2024-06-26"}},[e._v("#")]),e._v(" [Release 14] - 2024-06-26")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Correctly handle manifest "),t("code",[e._v("index")]),e._v(" after "),t("code",[e._v("paths")]),e._v(".")])])])]),e._v(" "),t("h2",{attrs:{id:"release-13-2024-06-24"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-13-2024-06-24"}},[e._v("#")]),e._v(" [Release 13] - 2024-06-24")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added support for optimistically reading data items uploaded using the integrated Turbo bundler via the LocalStack S3 interface.")]),e._v(" "),t("li",[e._v("Added "),t("code",[e._v("X-AR-IO-Origin-Node-Release")]),e._v(" header to outbound data requests.")]),e._v(" "),t("li",[e._v("Added "),t("code",[e._v("hops")]),e._v(", "),t("code",[e._v("origin")]),e._v(", and "),t("code",[e._v("originNodeRelease")]),e._v(" query params to outbound data requests.")]),e._v(" "),t("li",[e._v("Added support for "),t("code",[e._v("fallback")]),e._v(" in v0.2 manifests that is used if no path in the manifest is matched.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Updated Observer to read prescribed names from and write observations to the ar.io AO network process.")]),e._v(" "),t("li",[e._v("Updated Resolver to read from the ar.io AO network process.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Modified optimistic indexing of data items to use a null "),t("code",[e._v("parent_id")]),e._v(" when inserting into the DB instead of a placeholder value. This prevents unexpected non-null "),t("code",[e._v("bundledIn")]),e._v(" values in GraphQL results for optimistically indexed data items.")]),e._v(" "),t("li",[e._v("Modified GraphQl query logic to require an ID for single block GraphQL queries. Previously queries missing an ID were returning an internal SQLite error. This represents a small departure from arweave.net's query logic which returns the latest block for these queries. We recommend querying "),t("code",[e._v("blocks")]),e._v(" instead of "),t("code",[e._v("block")]),e._v(" in cases where the latest block is desired.")]),e._v(" "),t("li",[e._v("Adjusted Observer health check to reflect port change to 5050.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Security")])]),e._v(" "),t("ul",[t("li",[e._v("Modified docker-compose.yaml to only expose Redis, PostgreSQL, and LocalStack ports internally. This protects gateways that neglect to deploy behind a firewall, reverse proxy, or load balancer.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-12-2024-06-05"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-12-2024-06-05"}},[e._v("#")]),e._v(" [Release 12] - 2024-06-05")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added "),t("code",[e._v("/ar-io/admin/queue-data-item")]),e._v(" endpoint for queuing data item headers for indexing before the bundles containing them are processed. This allows trusted bundlers to make their data items quickly available to be queried via GraphQL without having to wait for bundle data submission or unbundling.")]),e._v(" "),t("li",[e._v("Added experimental support for retrieving contiguous data from S3. See "),t("code",[e._v("AWS_*")]),e._v(" "),t("a",{attrs:{href:""}},[e._v("environment variables documentation")]),e._v(" for configuration details. In conjuction with a local Turbo bundler this allows optimistic bundle (but not yet data item) retrieval.")]),e._v(" "),t("li",[e._v("Add experimental support for fetching data from gateway peers. It can be enabled by adding "),t("code",[e._v("ario-peer")]),e._v(" to "),t("code",[e._v("ON_DEMAND_RETRIEVAL_ORDER")]),e._v(". Note: do not expect this work reliably yet! This functionality is in active development and will be improved in future releases.")]),e._v(" "),t("li",[e._v("Add "),t("code",[e._v("import_attempt_count")]),e._v(" to "),t("code",[e._v("bundle")]),e._v(" records to enable future bundle import retry optimizations.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Removed "),t("code",[e._v("version")]),e._v(" from "),t("code",[e._v("docker-compose.yaml")]),e._v(" to avoid warnings with recent versions of "),t("code",[e._v("docker-compose")]),e._v(".")]),e._v(" "),t("li",[e._v("Switched default observer port from 5000 to 5050 to avoid conflict on OS X. Since Envoy is used to provide external access to the observer API this should have no user visible effect.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-11-2024-05-21"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-11-2024-05-21"}},[e._v("#")]),e._v(" [Release 11] - 2024-05-21")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added "),t("code",[e._v("arweave_tx_fetch_total")]),e._v(" Prometheus metric to track counts of transaction headers fetched from the trusted node and Arweave network peers.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Revert to using unnamed bind mounts due to cross platform issues with named volumes.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-10-2024-05-20"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-10-2024-05-20"}},[e._v("#")]),e._v(" [Release 10] - 2024-05-20")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added experimental support for streaming SQLite backups to S3 (and compatible services) using "),t("a",{attrs:{href:"https://litestream.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Litestream"),t("OutboundLink")],1),e._v('. Start the service using the docker-compose "litestream" profile to use it, and see the '),t("code",[e._v("AR_IO_SQLITE_BACKUP_*")]),e._v(" "),t("a",{attrs:{href:"https://github.com/ar-io/ar-io-node/blob/r10-prep/docs/env.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("environment variables documentation"),t("OutboundLink")],1),e._v(" for further details.")]),e._v(" "),t("li",[e._v("Added "),t("code",[e._v("/ar-io/admin/queue-bundle")]),e._v(" endpoint for queueing bundles for import for import before they're in the mempool. In the future this will enable optimistic indexing when combined with a local trusted bundler.")]),e._v(" "),t("li",[e._v("Added support for triggering webhooks when blocks are imported matching the filter specified by the "),t("code",[e._v("WEBHOOK_BLOCK_FILTER")]),e._v(" environment variable.")]),e._v(" "),t("li",[e._v("Added experimental support for indexing transactions and related data items from the mempool. Enable it by setting "),t("code",[e._v("ENABLE_MEMPOOL_WATCHER")]),e._v(" to 'true'.")]),e._v(" "),t("li",[e._v("Made on-demand data caching circuit breakers configurable via the "),t("code",[e._v("GET_DATA_CIRCUIT_BREAKER_TIMEOUT_MS")]),e._v(" environment variable. This allows gateway operators to decide how much latency they will tolerate when serving data in exchange for more complete data indexing and caching.")]),e._v(" "),t("li",[e._v("Rename cache header from "),t("code",[e._v("X-Cached")]),e._v(" to "),t("code",[e._v("X-Cache")]),e._v(" to mimic typical CDN practices.")]),e._v(" "),t("li",[e._v("Add X-AR-IO-Hops and X-AR-IO-Origin headers in preparation for future peer-to-peer functionality.")]),e._v(" "),t("li",[e._v("Upgrade to Node.js v20 and switch to native test runner.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-9-2024-04-10"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-9-2024-04-10"}},[e._v("#")]),e._v(" [Release 9] - 2024-04-10")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Added")]),e._v(" "),t("ul",[t("li",[e._v("Added experimental Farcaster Frames support, enabling simple Arweave based Frames with button navigation. Transaction and data item data is now served under "),t("code",[e._v("/local/farcaster/frame/")]),e._v(". "),t("code",[e._v("/local")]),e._v(" is used as a prefix to indicate this functionality is both experimental and local to a particular gateway rather than part of the global gateway API. Both GET and POST requests are supported.")]),e._v(" "),t("li",[e._v("Added an experimental local ArNS resolver. When enabled it removes dependence on arweave.net for ArNS resolution! Enable it by setting "),t("code",[e._v("RUN_RESOLVER=TRUE")]),e._v(", "),t("code",[e._v("TRUSTED_ARNS_RESOLVER_TYPE=resolver")]),e._v(", and "),t("code",[e._v("TRUSTED_ARNS_RESOLVER_URL=http://resolver:6000")]),e._v(" in your "),t("code",[e._v(".env")]),e._v(" file.")]),e._v(" "),t("li",[e._v("Added an "),t("code",[e._v("X-Cached")]),e._v(" header to data responses to indicate when data is served from the local cache rather than being retrieved from an external source. This is helpful for interfacing with external systems, debugging, and end-to-end testing.")]),e._v(" "),t("li",[e._v("Save hashes for unbundled data items during indexing. This enables reduction in data storage via hash based deduplication as well as more efficient peer-to-peer data retrieval in the future.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-8-2024-03-14"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-8-2024-03-14"}},[e._v("#")]),e._v(" [Release 8] - 2024-03-14")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added GraphQL SQL query debug logging to support trouble-shooting and performance optimization.")]),e._v(" "),t("li",[e._v("Added support for indexing data items (not GraphQL querying) based solely on tag name. (example use case: indexing all IPFS CID tagged data items).")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changes")])]),e._v(" "),t("ul",[t("li",[e._v("Observer data sampling now uses randomized ranges to generate content hashes.")]),e._v(" "),t("li",[e._v("Reference gateway ArNS resolutions are now cached to improve report generation performance.")]),e._v(" "),t("li",[e._v("Contract interactions are now tested before posting using "),t("code",[e._v("dryWrite")]),e._v(" to avoid submitting interactions that would fail.")]),e._v(" "),t("li",[t("code",[e._v("/ar-io/observer/info")]),e._v(" now reports "),t("code",[e._v("INVALID")]),e._v(" for wallets that fail to load.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Fix data caching failure caused by incorrect method name in "),t("code",[e._v("getData")]),e._v(" circuit breakers.")]),e._v(" "),t("li",[e._v("Fix healthcheck when "),t("code",[e._v("ARNS_ROOT_HOST")]),e._v(" includes a subdomain.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-7-2024-02-14"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-7-2024-02-14"}},[e._v("#")]),e._v(" [Release 7] - 2024 - 02 - 14")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Add support for notifying other services of transactions and data items using webhooks (see README for details).")]),e._v(" "),t("li",[e._v("Add support for filter negation (particularly useful for excluding large bundles from indexint).")]),e._v(" "),t("li",[e._v("Improve unbundling throughput by decoupling data fetching from unbundling.")]),e._v(" "),t("li",[e._v("Add Envoy and core service ARM builds.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Improve resouce cleanup and shutdown behavior.")]),e._v(" "),t("li",[e._v("Don't save Redis data to disk by default to help prevent memory issues on startup for small gateways.")]),e._v(" "),t("li",[e._v("Reduce the amount of data sampled from large files by the observer.")]),e._v(" "),t("li",[e._v("Ensure block poa2 field is not chached to reduce memory consumption.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-6-2024-01-29"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-6-2024-01-29"}},[e._v("#")]),e._v(" [Release 6] - 2024-01-29")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Fixed")]),e._v(" "),t("ul",[t("li",[e._v("Update observer to improve reliability of contract state synchronization and evaluation.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-5-2024-01-25"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-5-2024-01-25"}},[e._v("#")]),e._v(" [Release 5] - 2024-01-25")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added transaction offset indexing to support future data retrieval capabilities.")]),e._v(" "),t("li",[e._v("Enabled IPv6 support in Envoy config.")]),e._v(" "),t("li",[e._v("Added ability to configure observer report generation interval via the "),t("code",[e._v("REPORT_GENERATION_INTERVAL_MS")]),e._v(" environmental variable. (Intended primarily for development and testing)")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Updated observer to properly handle FQDN conflicts.")]),e._v(" "),t("li",[e._v("Renamed most "),t("code",[e._v("created_at")]),e._v(" columns to index to "),t("code",[e._v("indexed_at")]),e._v(" for consistency and clarity.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Updated LMDB version to remove Buffer workaround and fix occasional block cache errors.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-4-2024-01-11"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-4-2024-01-11"}},[e._v("#")]),e._v(" [Release 4] - 2024-01-11")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Added circuit breakers around data index access to reduce impact of DB access contention under heavy requests loads.")]),e._v(" "),t("li",[e._v("Added support for configuring data source priority via the ON_DEMAND_RETRIEVAL_ORDER environment variable.")]),e._v(" "),t("li",[e._v("Updated observer to a version that retrieves epoch start and duration from contract state.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Set the Redis max memory eviction policy to "),t("code",[e._v("allkeys-lru")]),e._v(".")]),e._v(" "),t("li",[e._v("Reduced default Redis max memory from 2GB to 256MB.")]),e._v(" "),t("li",[e._v("Improved predictability and performance of GraphQL queries.")]),e._v(" "),t("li",[e._v("Eliminated unbundling worker threads when filters are configured to skip indexing ANS-104 bundles.")]),e._v(" "),t("li",[e._v("Reduced the default number of ANS-104 worker threads from 2 to 1 when unbundling is enabled to conserve memory.")]),e._v(" "),t("li",[e._v("Increased nodejs max old space size to 8GB when ANS-104 workers > 1.")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Adjusted paths for chunks indexed by data root to include the full data root.")])])])]),e._v(" "),t("h2",{attrs:{id:"release-3-2023-12-05"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-3-2023-12-05"}},[e._v("#")]),e._v(" [Release 3] - 2023-12-05")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("Added")])]),e._v(" "),t("ul",[t("li",[e._v("Support range requests ("),t("a",{attrs:{href:"https://github.com/ar-io/ar-io-node/pull/61",target:"_blank",rel:"noopener noreferrer"}},[e._v("PR 61"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://github.com/ar-io/ar-io-node/pull/64",target:"_blank",rel:"noopener noreferrer"}},[e._v("PR 64"),t("OutboundLink")],1),e._v(")\n"),t("ul",[t("li",[e._v("Note: serving multiple ranges in a single request is not yet supported.")])])]),e._v(" "),t("li",[e._v("Release number in "),t("code",[e._v("/ar-io/info")]),e._v(" response.")]),e._v(" "),t("li",[e._v("Redis header cache implementation ("),t("a",{attrs:{href:"https://github.com/ar-io/ar-io-node/pull/62",target:"_blank",rel:"noopener noreferrer"}},[e._v("PR 62"),t("OutboundLink")],1),e._v(").\n"),t("ul",[t("li",[e._v("New default header cache (replaces old FS cache).")])])]),e._v(" "),t("li",[e._v("LMDB header cache implementation ("),t("a",{attrs:{href:"https://github.com/ar-io/ar-io-node/pull/60",target:"_blank",rel:"noopener noreferrer"}},[e._v("PR 60"),t("OutboundLink")],1),e._v(").\n"),t("ul",[t("li",[e._v("Intended for use in development only.")]),e._v(" "),t("li",[e._v("Enable by setting "),t("code",[e._v("CHAIN_CACHE_TYPE=lmdb")]),e._v(".")])])]),e._v(" "),t("li",[e._v("Filesystem header cache cleanup worker ("),t("a",{attrs:{href:"https://github.com/ar-io/ar-io-node/pull/68",target:"_blank",rel:"noopener noreferrer"}},[e._v("PR 68"),t("OutboundLink")],1),e._v(").\n"),t("ul",[t("li",[e._v("Enabled by default to cleanup old filesystem cache now that Redis is the new default.")])])]),e._v(" "),t("li",[e._v("Support for parallel ANS-104 unbundling ("),t("a",{attrs:{href:"https://github.com/ar-io/ar-io-node/pull/65",target:"_blank",rel:"noopener noreferrer"}},[e._v("PR 65"),t("OutboundLink")],1),e._v(").")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Changed")])]),e._v(" "),t("ul",[t("li",[e._v("Used pinned container images tags for releases.")]),e._v(" "),t("li",[e._v("Default to Redis header cache when running via docker-compose.")]),e._v(" "),t("li",[e._v("Default to LMDB header cache when running via "),t("code",[e._v("yarn start")]),e._v(".")])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Fixed")])]),e._v(" "),t("ul",[t("li",[e._v("Correct GraphQL pagination for transactions with duplicate tags.")])])])])])}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/52.65514aa6.js b/assets/js/52.bf4997a6.js similarity index 97% rename from assets/js/52.65514aa6.js rename to assets/js/52.bf4997a6.js index 74b1b526..11f06d08 100644 --- a/assets/js/52.65514aa6.js +++ b/assets/js/52.bf4997a6.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{350:function(t,e,a){"use strict";a.r(e);var r=a(10),n=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"join-the-ar-io-testnet"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#join-the-ar-io-testnet"}},[t._v("#")]),t._v(" Join the AR.IO Testnet")]),t._v(" "),e("h2",{attrs:{id:"prerequisites"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[t._v("#")]),t._v(" Prerequisites")]),t._v(" "),e("ol",[e("li",[e("p",[t._v("Must have a fully functional AR.IO gateway.")]),t._v(" "),e("ul",[e("li",[t._v("This includes the ability to resolve ArNS subdomains.")]),t._v(" "),e("li",[t._v("Follow installation instructions for "),e("a",{attrs:{href:"/gateways/ar-io-node/windows-setup"}},[t._v("windows")]),t._v(" or "),e("a",{attrs:{href:"/gateways/ar-io-node/linux-setup"}},[t._v("linux")]),t._v(" and get help from the "),e("a",{attrs:{href:"https://discord.gg/7zUPfN4D6g",target:"_blank",rel:"noopener noreferrer"}},[t._v("ar.io community"),e("OutboundLink")],1),t._v(".")])])]),t._v(" "),e("li",[e("p",[t._v("Gateway must be associated with an Arweave Wallet.")]),t._v(" "),e("ul",[e("li",[t._v("Learn about creating Arweave wallets "),e("a",{attrs:{href:"https://ar.io/wallet",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),e("OutboundLink")],1)])])]),t._v(" "),e("li",[e("p",[t._v("Arweave wallet must be funded with enough AR tokens to pay for transaction gas.")])])]),t._v(" "),e("h2",{attrs:{id:"submit-an-application"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#submit-an-application"}},[t._v("#")]),t._v(" Submit an Application")]),t._v(" "),e("p",[t._v("Joining the ar.io Testnet requires staking a minimum of 50,000 Test IO Tokens. You must have Test IO Tokens before you are able to join. Test IO Tokens are currently not being distributed.")]),t._v(" "),e("p",[t._v("New applications for joining the Testnet are not currently being accepted. Be sure to join the "),e("a",{attrs:{href:"https://discord.com/invite/7zUPfN4D6g",target:"_blank",rel:"noopener noreferrer"}},[t._v("ar.io Discord"),e("OutboundLink")],1),t._v(" to stay up to date on Testnet status and possible future availability prior to the launch of the Mainnet. --\x3e")])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{352:function(t,e,a){"use strict";a.r(e);var r=a(10),n=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"join-the-ar-io-testnet"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#join-the-ar-io-testnet"}},[t._v("#")]),t._v(" Join the AR.IO Testnet")]),t._v(" "),e("h2",{attrs:{id:"prerequisites"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[t._v("#")]),t._v(" Prerequisites")]),t._v(" "),e("ol",[e("li",[e("p",[t._v("Must have a fully functional AR.IO gateway.")]),t._v(" "),e("ul",[e("li",[t._v("This includes the ability to resolve ArNS subdomains.")]),t._v(" "),e("li",[t._v("Follow installation instructions for "),e("a",{attrs:{href:"/gateways/ar-io-node/windows-setup"}},[t._v("windows")]),t._v(" or "),e("a",{attrs:{href:"/gateways/ar-io-node/linux-setup"}},[t._v("linux")]),t._v(" and get help from the "),e("a",{attrs:{href:"https://discord.gg/7zUPfN4D6g",target:"_blank",rel:"noopener noreferrer"}},[t._v("ar.io community"),e("OutboundLink")],1),t._v(".")])])]),t._v(" "),e("li",[e("p",[t._v("Gateway must be associated with an Arweave Wallet.")]),t._v(" "),e("ul",[e("li",[t._v("Learn about creating Arweave wallets "),e("a",{attrs:{href:"https://ar.io/wallet",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),e("OutboundLink")],1)])])]),t._v(" "),e("li",[e("p",[t._v("Arweave wallet must be funded with enough AR tokens to pay for transaction gas.")])])]),t._v(" "),e("h2",{attrs:{id:"submit-an-application"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#submit-an-application"}},[t._v("#")]),t._v(" Submit an Application")]),t._v(" "),e("p",[t._v("Joining the ar.io Testnet requires staking a minimum of 50,000 Test IO Tokens. You must have Test IO Tokens before you are able to join. Test IO Tokens are currently not being distributed.")]),t._v(" "),e("p",[t._v("New applications for joining the Testnet are not currently being accepted. Be sure to join the "),e("a",{attrs:{href:"https://discord.com/invite/7zUPfN4D6g",target:"_blank",rel:"noopener noreferrer"}},[t._v("ar.io Discord"),e("OutboundLink")],1),t._v(" to stay up to date on Testnet status and possible future availability prior to the launch of the Mainnet. --\x3e")])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/56.691644b3.js b/assets/js/56.053616fb.js similarity index 99% rename from assets/js/56.691644b3.js rename to assets/js/56.053616fb.js index 910a45ca..442ef1a7 100644 --- a/assets/js/56.691644b3.js +++ b/assets/js/56.053616fb.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[56],{356:function(e,t,a){"use strict";a.r(t);var i=a(10),n=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"gateway-architecture"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gateway-architecture"}},[e._v("#")]),e._v(" Gateway Architecture")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("A gateway’s primary role in the Arweave ecosystem is to act as a bridge between the Arweave network and the outside world. This means that a gateway's main task is to make it easier for users to interact with the Arweave network by simplifying the technical processes of writing, reading, and discovering data on the blockweave in a trust-minimized fashion.")]),e._v(" "),t("p",[e._v("The core functions of a general Arweave gateway are broken down into the following areas.")]),e._v(" "),t("p",[t("strong",[e._v("Writing data involves:")])]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Proxying Layer 1 transaction headers to one or more healthy and active Arweave nodes (miners) to facilitate inclusion in the mempools of as many nodes as possible.")])]),e._v(" "),t("li",[t("p",[e._v("Proxying chunks for Layer 1 Arweave transactions to Arweave nodes to help facilitate storage and replication of the chunks on the blockweave.")])]),e._v(" "),t("li",[t("p",[e._v("Receiving and bundling so-called Layer 2 data items (e.g., ANS-104 spec) as Layer 1 transactions.")])])]),e._v(" "),t("p",[t("strong",[e._v("Reading involves retrieving:")])]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Transaction headers for a Layer 1 Arweave transaction.")])]),e._v(" "),t("li",[t("p",[e._v("Individual data chunks for a Layer 1 Arweave transaction.")])]),e._v(" "),t("li",[t("p",[e._v("Blocks from the blockweave.")])]),e._v(" "),t("li",[t("p",[e._v("Storage pricing rates for data from the Arweave node network.")])]),e._v(" "),t("li",[t("p",[e._v("Contiguous streams of chunks representing an entire Layer 1 transaction.")])]),e._v(" "),t("li",[t("p",[e._v("Layer 2 bundled data items (e.g., ANS-104).")])]),e._v(" "),t("li",[t("p",[e._v("Wallet information (e.g., token balance).")])])]),e._v(" "),t("p",[t("strong",[e._v("Discovering data involves:")])]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Facilitating efficient, structured queries for Layer 1 and Layer 2 transaction and wallet data by:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("examining incoming streams of data (i.e., directly ingested transactions and data items, blocks emitted by the chain, etc.).")])]),e._v(" "),t("li",[t("p",[e._v("managing index data in a database or analogous data store.")])])])]),e._v(" "),t("li",[t("p",[e._v("Parsing and executing user queries.")])]),e._v(" "),t("li",[t("p",[e._v("Facilitating friendly-path routing via Arweave manifest indexing.")])])]),e._v(" "),t("h2",{attrs:{id:"ar-io-gateway-benefits"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ar-io-gateway-benefits"}},[e._v("#")]),e._v(" AR.IO Gateway Benefits")]),e._v(" "),t("p",[e._v("AR.IO gateways provide many new benefits and capabilities beyond general Arweave gateways:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Providing the modularity and configurability necessary for operating extensible gateways that can be deployed at small or large scales to meet the needs of specific applications, use cases, communities, or business models.")])]),e._v(" "),t("li",[t("p",[e._v("Providing pluggable means for consuming telemetry data for internal and external monitoring and alerting.")])]),e._v(" "),t("li",[t("p",[e._v("Facilitating friendly-subdomain-name routing to Arweave transactions via a direct integration with the Arweave Name System (ArNS).")])]),e._v(" "),t("li",[t("p",[e._v("Facilitating configurable content moderation policies.")])]),e._v(" "),t("li",[t("p",[e._v("Providing connectivity to a decentralized network of other AR.IO gateways, enabling data sharing and other shared workloads.")])])]),e._v(" "),t("h2",{attrs:{id:"gateway-modularity"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gateway-modularity"}},[e._v("#")]),e._v(" Gateway Modularity")]),e._v(" "),t("p",[e._v("A design principle of AR.IO gateways is that their core components should be interchangeable with compatible implementations.")]),e._v(" "),t("p",[e._v("The core services in the gateway are written in Typescript, with flexible interfaces to the various subsystems and databases. This allows operators to customize their gateway to meet their specific requirements. Gateway services can be turned on or off depending on the operator's needs. For example, an operator might choose to have their gateway serve data, but not actively index Layer 2 bundled data.")]),e._v(" "),t("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/diagram-7-3-modded.png")}}),e._v(" "),t("p",[e._v("This flexibility also allows operators to utilize the technologies that are appropriate for the scale and environments in which they operate.")]),e._v(" "),t("p",[e._v("For example, small scale operators might want to use low-overhead relational databases to power their indexing while larger scale operators might opt to use cloud-native, horizontally scalable databases. Analogous examples for storage and caching exist as well.")]),e._v(" "),t("div",{staticStyle:{"text-align":"center"}},[t("table",{staticClass:"inline-table"},[t("tr",[t("th",{staticStyle:{"font-weight":"bold"},attrs:{colspan:"5"}},[e._v("Gateway Tech Stack Options")])]),e._v(" "),t("tr",[t("th",[e._v("Topology")]),e._v(" "),t("th",[e._v("Chain Index")]),e._v(" "),t("th",[e._v("Bundle Index")]),e._v(" "),t("th",[e._v("Data Index")]),e._v(" "),t("th",[e._v("Data Store")])]),e._v(" "),t("tr",[t("td",{staticStyle:{"font-weight":"bold"}},[e._v("Small")]),e._v(" "),t("td",[e._v("SQLite")]),e._v(" "),t("td",[e._v("SQLite")]),e._v(" "),t("td",[e._v("SQLite")]),e._v(" "),t("td",[e._v("Local File System")])]),e._v(" "),t("tr",[t("td",{staticStyle:{"font-weight":"bold"}},[e._v("Large")]),e._v(" "),t("td",[e._v("PostgreSQL")]),e._v(" "),t("td",[e._v("Cassandra")]),e._v(" "),t("td",[e._v("Cassandra")]),e._v(" "),t("td",[e._v("S3 Compatible")])])])]),e._v(" "),t("h2",{attrs:{id:"arns-indexing-and-routing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#arns-indexing-and-routing"}},[e._v("#")]),e._v(" ARNS Indexing and Routing")]),e._v(" "),t("p",[e._v("The Arweave Name System’s (ArNS) state is managed by the IO token’s smart contract. AR.IO gateways shall perform the following minimum functions relative to ArNS:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Actively track state changes in the contract.")])]),e._v(" "),t("li",[t("p",[e._v("Maintain up-to-date indexes for routing configurations based on the state of the IO contract as well as the states of the Arweave Name Token (ANT) contracts to which each name is affiliated.")])]),e._v(" "),t("li",[t("p",[e._v("Manage the expiration of stale records.")])]),e._v(" "),t("li",[t("p",[e._v("Facilitate ArNS routing based on the subdomains specified on incoming requests where appropriate.")])]),e._v(" "),t("li",[t("p",[e._v("Provide a custom HTTP response header for ArNS requests indicating the corresponding Arweave transaction ID.")])])]),e._v(" "),t("h2",{attrs:{id:"content-moderation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#content-moderation"}},[e._v("#")]),e._v(" Content Moderation")]),e._v(" "),t("p",[e._v("The AR.IO Network will adopt Arweave’s voluntary content moderation model whereby every participant of the network has the autonomy to decide which content they want to (or can legally) store, serve, and see. Each gateway operating on the network has the right and ability to blocklist any content (or address) that is deemed in violation of its content policies or non-compliant with local regulations.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[56],{359:function(e,t,a){"use strict";a.r(t);var i=a(10),n=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"gateway-architecture"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gateway-architecture"}},[e._v("#")]),e._v(" Gateway Architecture")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("A gateway’s primary role in the Arweave ecosystem is to act as a bridge between the Arweave network and the outside world. This means that a gateway's main task is to make it easier for users to interact with the Arweave network by simplifying the technical processes of writing, reading, and discovering data on the blockweave in a trust-minimized fashion.")]),e._v(" "),t("p",[e._v("The core functions of a general Arweave gateway are broken down into the following areas.")]),e._v(" "),t("p",[t("strong",[e._v("Writing data involves:")])]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Proxying Layer 1 transaction headers to one or more healthy and active Arweave nodes (miners) to facilitate inclusion in the mempools of as many nodes as possible.")])]),e._v(" "),t("li",[t("p",[e._v("Proxying chunks for Layer 1 Arweave transactions to Arweave nodes to help facilitate storage and replication of the chunks on the blockweave.")])]),e._v(" "),t("li",[t("p",[e._v("Receiving and bundling so-called Layer 2 data items (e.g., ANS-104 spec) as Layer 1 transactions.")])])]),e._v(" "),t("p",[t("strong",[e._v("Reading involves retrieving:")])]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Transaction headers for a Layer 1 Arweave transaction.")])]),e._v(" "),t("li",[t("p",[e._v("Individual data chunks for a Layer 1 Arweave transaction.")])]),e._v(" "),t("li",[t("p",[e._v("Blocks from the blockweave.")])]),e._v(" "),t("li",[t("p",[e._v("Storage pricing rates for data from the Arweave node network.")])]),e._v(" "),t("li",[t("p",[e._v("Contiguous streams of chunks representing an entire Layer 1 transaction.")])]),e._v(" "),t("li",[t("p",[e._v("Layer 2 bundled data items (e.g., ANS-104).")])]),e._v(" "),t("li",[t("p",[e._v("Wallet information (e.g., token balance).")])])]),e._v(" "),t("p",[t("strong",[e._v("Discovering data involves:")])]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Facilitating efficient, structured queries for Layer 1 and Layer 2 transaction and wallet data by:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("examining incoming streams of data (i.e., directly ingested transactions and data items, blocks emitted by the chain, etc.).")])]),e._v(" "),t("li",[t("p",[e._v("managing index data in a database or analogous data store.")])])])]),e._v(" "),t("li",[t("p",[e._v("Parsing and executing user queries.")])]),e._v(" "),t("li",[t("p",[e._v("Facilitating friendly-path routing via Arweave manifest indexing.")])])]),e._v(" "),t("h2",{attrs:{id:"ar-io-gateway-benefits"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ar-io-gateway-benefits"}},[e._v("#")]),e._v(" AR.IO Gateway Benefits")]),e._v(" "),t("p",[e._v("AR.IO gateways provide many new benefits and capabilities beyond general Arweave gateways:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Providing the modularity and configurability necessary for operating extensible gateways that can be deployed at small or large scales to meet the needs of specific applications, use cases, communities, or business models.")])]),e._v(" "),t("li",[t("p",[e._v("Providing pluggable means for consuming telemetry data for internal and external monitoring and alerting.")])]),e._v(" "),t("li",[t("p",[e._v("Facilitating friendly-subdomain-name routing to Arweave transactions via a direct integration with the Arweave Name System (ArNS).")])]),e._v(" "),t("li",[t("p",[e._v("Facilitating configurable content moderation policies.")])]),e._v(" "),t("li",[t("p",[e._v("Providing connectivity to a decentralized network of other AR.IO gateways, enabling data sharing and other shared workloads.")])])]),e._v(" "),t("h2",{attrs:{id:"gateway-modularity"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gateway-modularity"}},[e._v("#")]),e._v(" Gateway Modularity")]),e._v(" "),t("p",[e._v("A design principle of AR.IO gateways is that their core components should be interchangeable with compatible implementations.")]),e._v(" "),t("p",[e._v("The core services in the gateway are written in Typescript, with flexible interfaces to the various subsystems and databases. This allows operators to customize their gateway to meet their specific requirements. Gateway services can be turned on or off depending on the operator's needs. For example, an operator might choose to have their gateway serve data, but not actively index Layer 2 bundled data.")]),e._v(" "),t("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/diagram-7-3-modded.png")}}),e._v(" "),t("p",[e._v("This flexibility also allows operators to utilize the technologies that are appropriate for the scale and environments in which they operate.")]),e._v(" "),t("p",[e._v("For example, small scale operators might want to use low-overhead relational databases to power their indexing while larger scale operators might opt to use cloud-native, horizontally scalable databases. Analogous examples for storage and caching exist as well.")]),e._v(" "),t("div",{staticStyle:{"text-align":"center"}},[t("table",{staticClass:"inline-table"},[t("tr",[t("th",{staticStyle:{"font-weight":"bold"},attrs:{colspan:"5"}},[e._v("Gateway Tech Stack Options")])]),e._v(" "),t("tr",[t("th",[e._v("Topology")]),e._v(" "),t("th",[e._v("Chain Index")]),e._v(" "),t("th",[e._v("Bundle Index")]),e._v(" "),t("th",[e._v("Data Index")]),e._v(" "),t("th",[e._v("Data Store")])]),e._v(" "),t("tr",[t("td",{staticStyle:{"font-weight":"bold"}},[e._v("Small")]),e._v(" "),t("td",[e._v("SQLite")]),e._v(" "),t("td",[e._v("SQLite")]),e._v(" "),t("td",[e._v("SQLite")]),e._v(" "),t("td",[e._v("Local File System")])]),e._v(" "),t("tr",[t("td",{staticStyle:{"font-weight":"bold"}},[e._v("Large")]),e._v(" "),t("td",[e._v("PostgreSQL")]),e._v(" "),t("td",[e._v("Cassandra")]),e._v(" "),t("td",[e._v("Cassandra")]),e._v(" "),t("td",[e._v("S3 Compatible")])])])]),e._v(" "),t("h2",{attrs:{id:"arns-indexing-and-routing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#arns-indexing-and-routing"}},[e._v("#")]),e._v(" ARNS Indexing and Routing")]),e._v(" "),t("p",[e._v("The Arweave Name System’s (ArNS) state is managed by the IO token’s smart contract. AR.IO gateways shall perform the following minimum functions relative to ArNS:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Actively track state changes in the contract.")])]),e._v(" "),t("li",[t("p",[e._v("Maintain up-to-date indexes for routing configurations based on the state of the IO contract as well as the states of the Arweave Name Token (ANT) contracts to which each name is affiliated.")])]),e._v(" "),t("li",[t("p",[e._v("Manage the expiration of stale records.")])]),e._v(" "),t("li",[t("p",[e._v("Facilitate ArNS routing based on the subdomains specified on incoming requests where appropriate.")])]),e._v(" "),t("li",[t("p",[e._v("Provide a custom HTTP response header for ArNS requests indicating the corresponding Arweave transaction ID.")])])]),e._v(" "),t("h2",{attrs:{id:"content-moderation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#content-moderation"}},[e._v("#")]),e._v(" Content Moderation")]),e._v(" "),t("p",[e._v("The AR.IO Network will adopt Arweave’s voluntary content moderation model whereby every participant of the network has the autonomy to decide which content they want to (or can legally) store, serve, and see. Each gateway operating on the network has the right and ability to blocklist any content (or address) that is deemed in violation of its content policies or non-compliant with local regulations.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/57.61a69863.js b/assets/js/57.7ac2880d.js similarity index 99% rename from assets/js/57.61a69863.js rename to assets/js/57.7ac2880d.js index 6b9c90a4..fe04a707 100644 --- a/assets/js/57.61a69863.js +++ b/assets/js/57.7ac2880d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[57],{357:function(e,a,t){"use strict";t.r(a);var r=t(10),s=Object(r.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"glossary"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#glossary"}},[e._v("#")]),e._v(" Glossary")]),e._v(" "),a("p",[e._v("Many novel terms and acronyms are used by the Arweave ecosystem as well as some new ones introduced by AR.IO. The list below is intended to serve as a non-exhaustive reference of those terms:")]),e._v(" "),a("h2",{attrs:{id:"aocomputer-ao"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#aocomputer-ao"}},[e._v("#")]),e._v(" "),a("strong",[e._v("aoComputer (AO)")]),e._v(":")]),e._v(" "),a("p",[e._v("The aoComputer is the actor oriented machine that emerges from the network of nodes that adhere to its core data protocol, running on the Arweave network. It is a single, unified computing environment, hosted on a heterogenous set of nodes in a distributed network. AO is designed to offer an environment in which an arbitrary number of parallel processes can be resident, coordinating through an open message passing layer. This message passing standard connects the machine's independently operating processes together into a 'web' -- in the same way that websites operate on independent servers but are conjoined into a cohesive, unified experience via hyperlinks.")]),e._v(" "),a("h2",{attrs:{id:"arweave-name-system-arns"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#arweave-name-system-arns"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Arweave Name System (ArNS)")]),e._v(":")]),e._v(" "),a("p",[e._v("A decentralized and censorship-resistant naming system enabled by AR.IO gateways which connects friendly names to permaweb applications, pages, and data.")]),e._v(" "),a("h2",{attrs:{id:"arweave-name-token-ant-name-token"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#arweave-name-token-ant-name-token"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Arweave Name Token (ANT), “Name Token”")]),e._v(":")]),e._v(" "),a("p",[e._v("An aoComputer based token, that is connected to each registered ArNS Name. Each ANT gives the owner the ability to update the subdomains and Arweave transaction IDs used by the registered name as well as transfer ownership and other functions.")]),e._v(" "),a("h2",{attrs:{id:"arweave-network-standards-ans"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#arweave-network-standards-ans"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Arweave Network Standards (ANS)")]),e._v(":")]),e._v(" "),a("p",[e._v("Drafts and finalized standards for data formats, tag formats, data protocols, custom gateway features and anything that is built on top the Arweave Network. Specific standards are denoted by an associated number, e.g., ANS-###.")]),e._v(" "),a("h2",{attrs:{id:"base-layer-transaction"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#base-layer-transaction"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Base Layer Transaction")]),e._v(":")]),e._v(" "),a("p",[e._v("Refers to one of up to 1,000 transactions that make up a single Arweave block. A base layer transaction may contain bundled data items.")]),e._v(" "),a("h2",{attrs:{id:"bundle-bundling"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bundle-bundling"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Bundle, bundling")]),e._v(":")]),e._v(" "),a("p",[e._v("An Arweave concept introduced in ANS-104 that allows for a way of writing multiple independent data transactions into one base layer transaction. Bundled transactions contain multiple independent transactions, called data items, wrapped into one larger transaction. This offers two major network benefits:")]),e._v(" "),a("ul",[a("li",[a("p",[e._v("A scaling solution for increasing the throughput of uploads to the Arweave network,")])]),e._v(" "),a("li",[a("p",[e._v("Allows delegation of payment for an upload to a third party, while maintaining the identity and signature of the person who created the upload, without them needing to have a wallet with funds.")])])]),e._v(" "),a("h2",{attrs:{id:"bundled-data-item-bdi"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bundled-data-item-bdi"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Bundled Data Item (BDI)")]),e._v(":")]),e._v(" "),a("p",[e._v("A data item / transaction nested within an ANS-104 bundled transaction.")]),e._v(" "),a("h2",{attrs:{id:"bundler"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bundler"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Bundler")]),e._v(":")]),e._v(" "),a("p",[e._v("A third-party service and gateway feature that bundles data files on a user’s behalf.")]),e._v(" "),a("h2",{attrs:{id:"chunk"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#chunk"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Chunk")]),e._v(":")]),e._v(" "),a("p",[e._v("A chunk is a unit of data that is stored on the Arweave network. It represents a piece of a larger file that has been split into smaller, manageable segments for efficient storage and retrieval.")]),e._v(" "),a("h2",{attrs:{id:"decentralized-decentralization-etc"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#decentralized-decentralization-etc"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Decentralized, decentralization, etc")]),e._v(":")]),e._v(" "),a("p",[e._v("A nonbinary, many axis scale enabling a system or platform to be: permissionless, trustless, verifiable, transparent, open-source, composable, resilient, and censorship resistant. Ultimately, something that is decentralized is not prone to single points of failure or influence.")]),e._v(" "),a("h2",{attrs:{id:"epoch"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#epoch"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Epoch")]),e._v(":")]),e._v(" "),a("p",[e._v("A specific duration (e.g., one block-week) during which network activities and evaluations are conducted. It serves as a key time frame for processes such as observation duties, performance assessments, and reward distributions within the network's protocols.")]),e._v(" "),a("h2",{attrs:{id:"gateway"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#gateway"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Gateway")]),e._v(":")]),e._v(" "),a("p",[e._v("A node operating on the Arweave network that provides services for reading from, writing to, and indexing the data stored on the permaweb. Sometimes referred to as “permaweb nodes”.")]),e._v(" "),a("h2",{attrs:{id:"gateway-address-registry-gar"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#gateway-address-registry-gar"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Gateway Address Registry (GAR)")]),e._v(":")]),e._v(" "),a("p",[e._v("A decentralized directory maintained in the AR.IO smart contract. It serves as the authoritative list of all registered gateways on the AR.IO Network. The registry provides detailed metadata about each gateway to facilitate discovery, health monitoring, and data sharing among permaweb apps and users. The GAR is designed to be easily queryable, sortable, and filterable by end users and clients, allowing for tailored selections based on various criteria to meet specific use cases.")]),e._v(" "),a("h2",{attrs:{id:"indexing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#indexing"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Indexing")]),e._v(":")]),e._v(" "),a("p",[e._v("The act of organizing transaction data tags into queryable databases.")]),e._v(" "),a("h2",{attrs:{id:"layer-2-infrastructure"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#layer-2-infrastructure"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Layer 2 Infrastructure")]),e._v(":")]),e._v(" "),a("p",[e._v("Layer 2 refers to the technology / infrastructure stack built “above” a base layer. In this use, the AR.IO Network would be considered Layer 2 infrastructure to the base Arweave protocol.")]),e._v(" "),a("h2",{attrs:{id:"manifest-aka-path-manifest-arweave-manifest"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#manifest-aka-path-manifest-arweave-manifest"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Manifest (aka Path Manifest, Arweave Manifest)")]),e._v(":")]),e._v(" "),a("p",[e._v("Special “aggregate” files uploaded to Arweave that map user-definable sub-paths with other Arweave transaction IDs. This allows users to create logical groups of content, for example a directory of related files, or the files and assets that make up a web page or application. Instead of having to manually collate these assets, manifests group them together so that an entire website or app can be launched from a single manifest file. Gateways can interpret this structure, so that users can then reference individual transactions by their file name and/or path.")]),e._v(" "),a("h2",{attrs:{id:"mempool"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#mempool"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Mempool")]),e._v(":")]),e._v(" "),a("p",[e._v('Short for "memory pool," is a component of Arweave mining nodes that temporarily stores valid transactions that have been broadcasted to the network but have not yet been added to a block.')]),e._v(" "),a("h2",{attrs:{id:"miner-aka-arweave-node"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#miner-aka-arweave-node"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Miner (aka Arweave Node)")]),e._v(":")]),e._v(" "),a("p",[e._v("A node operating on the Arweave network responsible for data storage and recall.")]),e._v(" "),a("h2",{attrs:{id:"native-address"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#native-address"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Native Address")]),e._v(":")]),e._v(" "),a("p",[e._v("The way public addresses are commonly (or by spec) represented in their native blockchain. Arweave keys are 43 character base64url representations of the "),a("a",{attrs:{href:"#public-key"}},[e._v("public key")]),e._v(", while Ethereum keys use a different hashing algorithm and start with "),a("code",[e._v("0x")]),e._v(" etc.")]),e._v(" "),a("h2",{attrs:{id:"normalized-address"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#normalized-address"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Normalized Address")]),e._v(":")]),e._v(" "),a("p",[e._v("43 character base64url representation of the sha256 hash of a "),a("a",{attrs:{href:"#public-key"}},[e._v("public key")]),e._v(". Public keys for other chains can be normalized by this representation.")]),e._v(" "),a("h2",{attrs:{id:"observer"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#observer"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Observer")]),e._v(":")]),e._v(" "),a("p",[e._v("A gateway selected to evaluate the performance of peer gateways in resolving ArNS names. Observers assess and report on the operational efficacy of other gateways.")]),e._v(" "),a("h2",{attrs:{id:"optimistic-indexing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#optimistic-indexing"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Optimistic Indexing")]),e._v(":")]),e._v(" "),a("p",[e._v("Indexing transaction or data item headers before the associated L1 transaction has been accepted and confirmed in a chain block.")]),e._v(" "),a("h2",{attrs:{id:"owner"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#owner"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Owner")]),e._v(":")]),e._v(" "),a("p",[e._v("Generally, the public key of the signer.")]),e._v(" "),a("h2",{attrs:{id:"owner-address"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#owner-address"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Owner Address")]),e._v(":")]),e._v(" "),a("p",[e._v("The "),a("a",{attrs:{href:"#normalized-address"}},[e._v("normalized address")]),e._v(" of the "),a("a",{attrs:{href:"#owner"}},[e._v("owner")])]),e._v(" "),a("h2",{attrs:{id:"period"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#period"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Period")]),e._v(":")]),e._v(" "),a("p",[e._v("Refers to a predefined time span (e.g., a block-day) that serves as a cycle for network activities such as dynamic pricing. It is a fundamental unit of time for operational and protocol processes within the network.")]),e._v(" "),a("h2",{attrs:{id:"permaweb"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#permaweb"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Permaweb")]),e._v(":")]),e._v(" "),a("p",[e._v("The permaweb is the permanent and decentralized web of files and applications built on top of Arweave.")]),e._v(" "),a("h2",{attrs:{id:"protocol-balance"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#protocol-balance"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Protocol Balance")]),e._v(":")]),e._v(" "),a("p",[e._v("The primary sink and source of IO tokens circulating through the AR.IO Network. This balance is akin to a central vault or wallet programmatically encoded into the network’s smart contract from which ArNS revenue is accumulated and incentive rewards are distributed.")]),e._v(" "),a("h2",{attrs:{id:"protocol-rewards"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#protocol-rewards"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Protocol Rewards")]),e._v(":")]),e._v(" "),a("p",[e._v("IO Token incentive rewards distributed by the protocol to the network’s eligible users and gateway operators.")]),e._v(" "),a("h2",{attrs:{id:"public-key"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#public-key"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Public Key")]),e._v(":")]),e._v(" "),a("p",[e._v("The publicly known keys for a signer (wallet). Public keys are different byte lengths depending on the signer type (e.g. Arweave vs. Ethereum (ECDSA), vs Solana, etc.)")]),e._v(" "),a("h2",{attrs:{id:"seeding"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#seeding"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Seeding")]),e._v(":")]),e._v(" "),a("p",[e._v("Refers to the act of propagating new data throughout the network. Miner nodes seed Arweave base layer transaction data to other miners, while gateways ensure that the transactions they receive reach the Arweave nodes. Both gateways and Arweave nodes seed base layer transactions and data chunks.")]),e._v(" "),a("h2",{attrs:{id:"staking-of-tokens"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#staking-of-tokens"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Staking (of tokens)")]),e._v(":")]),e._v(" "),a("p",[e._v("Refers to the process of locking IO tokens into a protocol-facilitated vault, temporarily removing them from circulation until unlocked. This action represents an opportunity cost for the gateway operator and serves as a motivator to prioritize the network's collective interests.")]),e._v(" "),a("h2",{attrs:{id:"transaction-id-txid"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#transaction-id-txid"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Transaction ID (txID)")]),e._v(":")]),e._v(" "),a("p",[e._v("Every transaction and data file uploaded to Arweave is assigned a unique identifier code known as the Transaction ID. These txID’s can be referenced by users to easily locate and retrieve files.")]),e._v(" "),a("h2",{attrs:{id:"trust-minimization"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#trust-minimization"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Trust-minimization")]),e._v(":")]),e._v(" "),a("p",[e._v("Relates to enacting network security by minimizing the number of entities and the degree to which they must be trusted to achieve reliable network interactions. A network with trust-minimizing mechanisms means that it has reduced exposure to undesirable third-party actions and built-in incentives to reward good behavior while punishing bad behavior.")]),e._v(" "),a("h2",{attrs:{id:"vault"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#vault"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Vault")]),e._v(":")]),e._v(" "),a("p",[e._v("Token vaults are protocol level mechanisms used to contain staked tokens over time. Each vault contains a starting block height, ending block height (if applicable), along with a balance of tokens.")])])}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[57],{360:function(e,a,t){"use strict";t.r(a);var r=t(10),s=Object(r.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"glossary"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#glossary"}},[e._v("#")]),e._v(" Glossary")]),e._v(" "),a("p",[e._v("Many novel terms and acronyms are used by the Arweave ecosystem as well as some new ones introduced by AR.IO. The list below is intended to serve as a non-exhaustive reference of those terms:")]),e._v(" "),a("h2",{attrs:{id:"aocomputer-ao"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#aocomputer-ao"}},[e._v("#")]),e._v(" "),a("strong",[e._v("aoComputer (AO)")]),e._v(":")]),e._v(" "),a("p",[e._v("The aoComputer is the actor oriented machine that emerges from the network of nodes that adhere to its core data protocol, running on the Arweave network. It is a single, unified computing environment, hosted on a heterogenous set of nodes in a distributed network. AO is designed to offer an environment in which an arbitrary number of parallel processes can be resident, coordinating through an open message passing layer. This message passing standard connects the machine's independently operating processes together into a 'web' -- in the same way that websites operate on independent servers but are conjoined into a cohesive, unified experience via hyperlinks.")]),e._v(" "),a("h2",{attrs:{id:"arweave-name-system-arns"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#arweave-name-system-arns"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Arweave Name System (ArNS)")]),e._v(":")]),e._v(" "),a("p",[e._v("A decentralized and censorship-resistant naming system enabled by AR.IO gateways which connects friendly names to permaweb applications, pages, and data.")]),e._v(" "),a("h2",{attrs:{id:"arweave-name-token-ant-name-token"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#arweave-name-token-ant-name-token"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Arweave Name Token (ANT), “Name Token”")]),e._v(":")]),e._v(" "),a("p",[e._v("An aoComputer based token, that is connected to each registered ArNS Name. Each ANT gives the owner the ability to update the subdomains and Arweave transaction IDs used by the registered name as well as transfer ownership and other functions.")]),e._v(" "),a("h2",{attrs:{id:"arweave-network-standards-ans"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#arweave-network-standards-ans"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Arweave Network Standards (ANS)")]),e._v(":")]),e._v(" "),a("p",[e._v("Drafts and finalized standards for data formats, tag formats, data protocols, custom gateway features and anything that is built on top the Arweave Network. Specific standards are denoted by an associated number, e.g., ANS-###.")]),e._v(" "),a("h2",{attrs:{id:"base-layer-transaction"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#base-layer-transaction"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Base Layer Transaction")]),e._v(":")]),e._v(" "),a("p",[e._v("Refers to one of up to 1,000 transactions that make up a single Arweave block. A base layer transaction may contain bundled data items.")]),e._v(" "),a("h2",{attrs:{id:"bundle-bundling"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bundle-bundling"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Bundle, bundling")]),e._v(":")]),e._v(" "),a("p",[e._v("An Arweave concept introduced in ANS-104 that allows for a way of writing multiple independent data transactions into one base layer transaction. Bundled transactions contain multiple independent transactions, called data items, wrapped into one larger transaction. This offers two major network benefits:")]),e._v(" "),a("ul",[a("li",[a("p",[e._v("A scaling solution for increasing the throughput of uploads to the Arweave network,")])]),e._v(" "),a("li",[a("p",[e._v("Allows delegation of payment for an upload to a third party, while maintaining the identity and signature of the person who created the upload, without them needing to have a wallet with funds.")])])]),e._v(" "),a("h2",{attrs:{id:"bundled-data-item-bdi"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bundled-data-item-bdi"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Bundled Data Item (BDI)")]),e._v(":")]),e._v(" "),a("p",[e._v("A data item / transaction nested within an ANS-104 bundled transaction.")]),e._v(" "),a("h2",{attrs:{id:"bundler"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bundler"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Bundler")]),e._v(":")]),e._v(" "),a("p",[e._v("A third-party service and gateway feature that bundles data files on a user’s behalf.")]),e._v(" "),a("h2",{attrs:{id:"chunk"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#chunk"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Chunk")]),e._v(":")]),e._v(" "),a("p",[e._v("A chunk is a unit of data that is stored on the Arweave network. It represents a piece of a larger file that has been split into smaller, manageable segments for efficient storage and retrieval.")]),e._v(" "),a("h2",{attrs:{id:"decentralized-decentralization-etc"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#decentralized-decentralization-etc"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Decentralized, decentralization, etc")]),e._v(":")]),e._v(" "),a("p",[e._v("A nonbinary, many axis scale enabling a system or platform to be: permissionless, trustless, verifiable, transparent, open-source, composable, resilient, and censorship resistant. Ultimately, something that is decentralized is not prone to single points of failure or influence.")]),e._v(" "),a("h2",{attrs:{id:"epoch"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#epoch"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Epoch")]),e._v(":")]),e._v(" "),a("p",[e._v("A specific duration (e.g., one block-week) during which network activities and evaluations are conducted. It serves as a key time frame for processes such as observation duties, performance assessments, and reward distributions within the network's protocols.")]),e._v(" "),a("h2",{attrs:{id:"gateway"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#gateway"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Gateway")]),e._v(":")]),e._v(" "),a("p",[e._v("A node operating on the Arweave network that provides services for reading from, writing to, and indexing the data stored on the permaweb. Sometimes referred to as “permaweb nodes”.")]),e._v(" "),a("h2",{attrs:{id:"gateway-address-registry-gar"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#gateway-address-registry-gar"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Gateway Address Registry (GAR)")]),e._v(":")]),e._v(" "),a("p",[e._v("A decentralized directory maintained in the AR.IO smart contract. It serves as the authoritative list of all registered gateways on the AR.IO Network. The registry provides detailed metadata about each gateway to facilitate discovery, health monitoring, and data sharing among permaweb apps and users. The GAR is designed to be easily queryable, sortable, and filterable by end users and clients, allowing for tailored selections based on various criteria to meet specific use cases.")]),e._v(" "),a("h2",{attrs:{id:"indexing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#indexing"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Indexing")]),e._v(":")]),e._v(" "),a("p",[e._v("The act of organizing transaction data tags into queryable databases.")]),e._v(" "),a("h2",{attrs:{id:"layer-2-infrastructure"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#layer-2-infrastructure"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Layer 2 Infrastructure")]),e._v(":")]),e._v(" "),a("p",[e._v("Layer 2 refers to the technology / infrastructure stack built “above” a base layer. In this use, the AR.IO Network would be considered Layer 2 infrastructure to the base Arweave protocol.")]),e._v(" "),a("h2",{attrs:{id:"manifest-aka-path-manifest-arweave-manifest"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#manifest-aka-path-manifest-arweave-manifest"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Manifest (aka Path Manifest, Arweave Manifest)")]),e._v(":")]),e._v(" "),a("p",[e._v("Special “aggregate” files uploaded to Arweave that map user-definable sub-paths with other Arweave transaction IDs. This allows users to create logical groups of content, for example a directory of related files, or the files and assets that make up a web page or application. Instead of having to manually collate these assets, manifests group them together so that an entire website or app can be launched from a single manifest file. Gateways can interpret this structure, so that users can then reference individual transactions by their file name and/or path.")]),e._v(" "),a("h2",{attrs:{id:"mempool"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#mempool"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Mempool")]),e._v(":")]),e._v(" "),a("p",[e._v('Short for "memory pool," is a component of Arweave mining nodes that temporarily stores valid transactions that have been broadcasted to the network but have not yet been added to a block.')]),e._v(" "),a("h2",{attrs:{id:"miner-aka-arweave-node"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#miner-aka-arweave-node"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Miner (aka Arweave Node)")]),e._v(":")]),e._v(" "),a("p",[e._v("A node operating on the Arweave network responsible for data storage and recall.")]),e._v(" "),a("h2",{attrs:{id:"native-address"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#native-address"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Native Address")]),e._v(":")]),e._v(" "),a("p",[e._v("The way public addresses are commonly (or by spec) represented in their native blockchain. Arweave keys are 43 character base64url representations of the "),a("a",{attrs:{href:"#public-key"}},[e._v("public key")]),e._v(", while Ethereum keys use a different hashing algorithm and start with "),a("code",[e._v("0x")]),e._v(" etc.")]),e._v(" "),a("h2",{attrs:{id:"normalized-address"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#normalized-address"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Normalized Address")]),e._v(":")]),e._v(" "),a("p",[e._v("43 character base64url representation of the sha256 hash of a "),a("a",{attrs:{href:"#public-key"}},[e._v("public key")]),e._v(". Public keys for other chains can be normalized by this representation.")]),e._v(" "),a("h2",{attrs:{id:"observer"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#observer"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Observer")]),e._v(":")]),e._v(" "),a("p",[e._v("A gateway selected to evaluate the performance of peer gateways in resolving ArNS names. Observers assess and report on the operational efficacy of other gateways.")]),e._v(" "),a("h2",{attrs:{id:"optimistic-indexing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#optimistic-indexing"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Optimistic Indexing")]),e._v(":")]),e._v(" "),a("p",[e._v("Indexing transaction or data item headers before the associated L1 transaction has been accepted and confirmed in a chain block.")]),e._v(" "),a("h2",{attrs:{id:"owner"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#owner"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Owner")]),e._v(":")]),e._v(" "),a("p",[e._v("Generally, the public key of the signer.")]),e._v(" "),a("h2",{attrs:{id:"owner-address"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#owner-address"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Owner Address")]),e._v(":")]),e._v(" "),a("p",[e._v("The "),a("a",{attrs:{href:"#normalized-address"}},[e._v("normalized address")]),e._v(" of the "),a("a",{attrs:{href:"#owner"}},[e._v("owner")])]),e._v(" "),a("h2",{attrs:{id:"period"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#period"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Period")]),e._v(":")]),e._v(" "),a("p",[e._v("Refers to a predefined time span (e.g., a block-day) that serves as a cycle for network activities such as dynamic pricing. It is a fundamental unit of time for operational and protocol processes within the network.")]),e._v(" "),a("h2",{attrs:{id:"permaweb"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#permaweb"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Permaweb")]),e._v(":")]),e._v(" "),a("p",[e._v("The permaweb is the permanent and decentralized web of files and applications built on top of Arweave.")]),e._v(" "),a("h2",{attrs:{id:"protocol-balance"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#protocol-balance"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Protocol Balance")]),e._v(":")]),e._v(" "),a("p",[e._v("The primary sink and source of IO tokens circulating through the AR.IO Network. This balance is akin to a central vault or wallet programmatically encoded into the network’s smart contract from which ArNS revenue is accumulated and incentive rewards are distributed.")]),e._v(" "),a("h2",{attrs:{id:"protocol-rewards"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#protocol-rewards"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Protocol Rewards")]),e._v(":")]),e._v(" "),a("p",[e._v("IO Token incentive rewards distributed by the protocol to the network’s eligible users and gateway operators.")]),e._v(" "),a("h2",{attrs:{id:"public-key"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#public-key"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Public Key")]),e._v(":")]),e._v(" "),a("p",[e._v("The publicly known keys for a signer (wallet). Public keys are different byte lengths depending on the signer type (e.g. Arweave vs. Ethereum (ECDSA), vs Solana, etc.)")]),e._v(" "),a("h2",{attrs:{id:"seeding"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#seeding"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Seeding")]),e._v(":")]),e._v(" "),a("p",[e._v("Refers to the act of propagating new data throughout the network. Miner nodes seed Arweave base layer transaction data to other miners, while gateways ensure that the transactions they receive reach the Arweave nodes. Both gateways and Arweave nodes seed base layer transactions and data chunks.")]),e._v(" "),a("h2",{attrs:{id:"staking-of-tokens"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#staking-of-tokens"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Staking (of tokens)")]),e._v(":")]),e._v(" "),a("p",[e._v("Refers to the process of locking IO tokens into a protocol-facilitated vault, temporarily removing them from circulation until unlocked. This action represents an opportunity cost for the gateway operator and serves as a motivator to prioritize the network's collective interests.")]),e._v(" "),a("h2",{attrs:{id:"transaction-id-txid"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#transaction-id-txid"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Transaction ID (txID)")]),e._v(":")]),e._v(" "),a("p",[e._v("Every transaction and data file uploaded to Arweave is assigned a unique identifier code known as the Transaction ID. These txID’s can be referenced by users to easily locate and retrieve files.")]),e._v(" "),a("h2",{attrs:{id:"trust-minimization"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#trust-minimization"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Trust-minimization")]),e._v(":")]),e._v(" "),a("p",[e._v("Relates to enacting network security by minimizing the number of entities and the degree to which they must be trusted to achieve reliable network interactions. A network with trust-minimizing mechanisms means that it has reduced exposure to undesirable third-party actions and built-in incentives to reward good behavior while punishing bad behavior.")]),e._v(" "),a("h2",{attrs:{id:"vault"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#vault"}},[e._v("#")]),e._v(" "),a("strong",[e._v("Vault")]),e._v(":")]),e._v(" "),a("p",[e._v("Token vaults are protocol level mechanisms used to contain staked tokens over time. Each vault contains a starting block height, ending block height (if applicable), along with a balance of tokens.")])])}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/58.5a28316f.js b/assets/js/58.51348c99.js similarity index 99% rename from assets/js/58.5a28316f.js rename to assets/js/58.51348c99.js index 0d8c454f..81017484 100644 --- a/assets/js/58.5a28316f.js +++ b/assets/js/58.51348c99.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[58],{361:function(e,a,t){"use strict";t.r(a);var r=t(10),s=Object(r.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"trading-ants-on-bazar"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#trading-ants-on-bazar"}},[e._v("#")]),e._v(" Trading ANTs on Bazar")]),e._v(" "),a("h2",{attrs:{id:"overview"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),a("p",[a("RouterLink",{attrs:{to:"/arns.html#arweave-name-token-ant"}},[e._v("Arweave Name Tokens")]),e._v(" are "),a("a",{attrs:{href:"https://github.com/permaweb/ao-permaweb/blob/asset-manager/services/assets/spec.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("Atomic Asset Spec"),a("OutboundLink")],1),e._v(" compliant AO tokens that manage records and permission for ArNS names. Because the ANT spec is compliant with the Atomic Asset Spec, they are tradable on "),a("a",{attrs:{href:"https://bazar.arweave.net",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bazar"),a("OutboundLink")],1),e._v(", which is a decentralized market place for Atomic Assets on AO. There are a few simple steps that are required in order to make an ANT available on Bazar to be traded.")],1),e._v(" "),a("h2",{attrs:{id:"bazar-profile"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bazar-profile"}},[e._v("#")]),e._v(" Bazar Profile")]),e._v(" "),a("p",[e._v("Bazar relies on "),a("a",{attrs:{href:"https://bazar.g8way.io/#/docs/overview/profiles",target:"_blank",rel:"noopener noreferrer"}},[e._v("profiles"),a("OutboundLink")],1),e._v(" for displaying user information and tradable assets. Profiles are AO processes that contain user specified information like a name, a nickname, and images associated with the profile. Profiles also track assets held by the profile in order to provide their information to bazar.")]),e._v(" "),a("h3",{attrs:{id:"create-a-profile"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-a-profile"}},[e._v("#")]),e._v(" Create a Profile")]),e._v(" "),a("p",[e._v('If you do not already have a profile associated with your wallet, you can easily create one on using the "Create your profile" button on bazar after connecting your wallet:')]),e._v(" "),a("img",{staticClass:"largerdiagram",attrs:{src:e.$withBase("/images/bazar-create-profile1.png")}}),e._v(" "),a("p",[e._v("You will be prompted to add, at a minimum, a name and handle (nickname) to associate with the profile. These values can be changed later.")]),e._v(" "),a("img",{staticClass:"largerdiagram",attrs:{src:e.$withBase("/images/bazar-create-profile2.png")}}),e._v(" "),a("p",[e._v('Click "Save" at the bottom to finish creation of your profile.')]),e._v(" "),a("p",[e._v('Once your profile is created, you can get its ao process Id at any time by clicking on the user icon in Bazar, and then the "Copy profile address" button from the menu.')]),e._v(" "),a("img",{staticClass:"largerdiagram",attrs:{src:e.$withBase("/images/bazar-create-profile3.png")}}),e._v(" "),a("h2",{attrs:{id:"transfer-ant-to-the-profile"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#transfer-ant-to-the-profile"}},[e._v("#")]),e._v(" Transfer ANT to the Profile")]),e._v(" "),a("p",[e._v("Bazar profiles only track assets that are held in the profile process, not in a user wallet. In order for an ANT to be displayed and transferred on Bazar, it must first be transferred into the Bazar profile. This can be done easily using "),a("a",{attrs:{href:"https://arns.app",target:"_blank",rel:"noopener noreferrer"}},[e._v("arns.app"),a("OutboundLink")],1),e._v(" in your manage page for a given name.")]),e._v(" "),a("img",{staticClass:"largerdiagram",attrs:{src:e.$withBase("/images/bazar-transfer-name1.png")}}),e._v(" "),a("br"),a("br"),e._v(" "),a("img",{staticClass:"largerdiagram",attrs:{src:e.$withBase("/images/bazar-transfer-name2.png")}}),e._v(" "),a("p",[e._v("Once an ANT is transferred into the profile process, it will automatically be detected and displayed by Bazar. It can be transferred or sold just like any other atomic asset on the marketplace, with no additional steps required.")]),e._v(" "),a("h2",{attrs:{id:"restore-controllers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#restore-controllers"}},[e._v("#")]),e._v(" Restore Controllers")]),e._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[e._v("Optional")]),e._v(" "),a("p",[e._v("This is an optional step that will enable updating an ANT's Target Id without transferring it back into your wallet. This step may be safely skipped without affecting the ANT's functionality or tradability on Bazar.")])]),e._v(" "),a("p",[e._v("Transferring an ANT to a new wallet or AO process resets all authorized controllers, or non-owner entities that are allowed to update some settings on the ArNS name. It does not reset the Target Id that the ArNS name is pointing to. If you want to be able to update the Target ID and undernames from your wallet using arns.app, you will need to set your wallet address as a controller for the ANT while it is in your profile. The easiest way to do this is using aos.")]),e._v(" "),a("p",[e._v("If you have not used aos before, you can find installation instructions "),a("a",{attrs:{href:"https://cookbook_ao.arweave.net/welcome/getting-started.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),a("OutboundLink")],1)]),e._v(" "),a("p",[e._v("Using aos, you can log directly into your profile process with the command:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("aos "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("profile-address"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--wallet")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"/path/to/your/keyfile"')]),e._v("\n")])])]),a("p",[e._v("Be sure to replace "),a("code",[e._v("")]),e._v(" with the process Id for your profile process, and "),a("code",[e._v("/path/to/your/keyfile")]),e._v(" with the path to the keyfile for the wallet you created the profile with.")]),e._v(" "),a("p",[e._v("Once you are logged in with aos, you can send a message to the ANT in your profile to set your wallet as a controller:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("Send"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v(" Target "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('""')]),e._v(", Action "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Add-Controller"')]),e._v(", Controller "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('""')]),e._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n")])])]),a("p",[e._v("Replace "),a("code",[e._v("")]),e._v(" with the process Id of the ANT you transferred into your profile, and "),a("code",[e._v("")]),e._v(" with your wallet address.")])])}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[58],{356:function(e,a,t){"use strict";t.r(a);var r=t(10),s=Object(r.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"trading-ants-on-bazar"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#trading-ants-on-bazar"}},[e._v("#")]),e._v(" Trading ANTs on Bazar")]),e._v(" "),a("h2",{attrs:{id:"overview"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),a("p",[a("RouterLink",{attrs:{to:"/arns.html#arweave-name-token-ant"}},[e._v("Arweave Name Tokens")]),e._v(" are "),a("a",{attrs:{href:"https://github.com/permaweb/ao-permaweb/blob/asset-manager/services/assets/spec.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("Atomic Asset Spec"),a("OutboundLink")],1),e._v(" compliant AO tokens that manage records and permission for ArNS names. Because the ANT spec is compliant with the Atomic Asset Spec, they are tradable on "),a("a",{attrs:{href:"https://bazar.arweave.net",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bazar"),a("OutboundLink")],1),e._v(", which is a decentralized market place for Atomic Assets on AO. There are a few simple steps that are required in order to make an ANT available on Bazar to be traded.")],1),e._v(" "),a("h2",{attrs:{id:"bazar-profile"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bazar-profile"}},[e._v("#")]),e._v(" Bazar Profile")]),e._v(" "),a("p",[e._v("Bazar relies on "),a("a",{attrs:{href:"https://bazar.g8way.io/#/docs/overview/profiles",target:"_blank",rel:"noopener noreferrer"}},[e._v("profiles"),a("OutboundLink")],1),e._v(" for displaying user information and tradable assets. Profiles are AO processes that contain user specified information like a name, a nickname, and images associated with the profile. Profiles also track assets held by the profile in order to provide their information to bazar.")]),e._v(" "),a("h3",{attrs:{id:"create-a-profile"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-a-profile"}},[e._v("#")]),e._v(" Create a Profile")]),e._v(" "),a("p",[e._v('If you do not already have a profile associated with your wallet, you can easily create one on using the "Create your profile" button on bazar after connecting your wallet:')]),e._v(" "),a("img",{staticClass:"largerdiagram",attrs:{src:e.$withBase("/images/bazar-create-profile1.png")}}),e._v(" "),a("p",[e._v("You will be prompted to add, at a minimum, a name and handle (nickname) to associate with the profile. These values can be changed later.")]),e._v(" "),a("img",{staticClass:"largerdiagram",attrs:{src:e.$withBase("/images/bazar-create-profile2.png")}}),e._v(" "),a("p",[e._v('Click "Save" at the bottom to finish creation of your profile.')]),e._v(" "),a("p",[e._v('Once your profile is created, you can get its ao process Id at any time by clicking on the user icon in Bazar, and then the "Copy profile address" button from the menu.')]),e._v(" "),a("img",{staticClass:"largerdiagram",attrs:{src:e.$withBase("/images/bazar-create-profile3.png")}}),e._v(" "),a("h2",{attrs:{id:"transfer-ant-to-the-profile"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#transfer-ant-to-the-profile"}},[e._v("#")]),e._v(" Transfer ANT to the Profile")]),e._v(" "),a("p",[e._v("Bazar profiles only track assets that are held in the profile process, not in a user wallet. In order for an ANT to be displayed and transferred on Bazar, it must first be transferred into the Bazar profile. This can be done easily using "),a("a",{attrs:{href:"https://arns.app",target:"_blank",rel:"noopener noreferrer"}},[e._v("arns.app"),a("OutboundLink")],1),e._v(" in your manage page for a given name.")]),e._v(" "),a("img",{staticClass:"largerdiagram",attrs:{src:e.$withBase("/images/bazar-transfer-name1.png")}}),e._v(" "),a("br"),a("br"),e._v(" "),a("img",{staticClass:"largerdiagram",attrs:{src:e.$withBase("/images/bazar-transfer-name2.png")}}),e._v(" "),a("p",[e._v("Once an ANT is transferred into the profile process, it will automatically be detected and displayed by Bazar. It can be transferred or sold just like any other atomic asset on the marketplace, with no additional steps required.")]),e._v(" "),a("h2",{attrs:{id:"restore-controllers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#restore-controllers"}},[e._v("#")]),e._v(" Restore Controllers")]),e._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[e._v("Optional")]),e._v(" "),a("p",[e._v("This is an optional step that will enable updating an ANT's Target Id without transferring it back into your wallet. This step may be safely skipped without affecting the ANT's functionality or tradability on Bazar.")])]),e._v(" "),a("p",[e._v("Transferring an ANT to a new wallet or AO process resets all authorized controllers, or non-owner entities that are allowed to update some settings on the ArNS name. It does not reset the Target Id that the ArNS name is pointing to. If you want to be able to update the Target ID and undernames from your wallet using arns.app, you will need to set your wallet address as a controller for the ANT while it is in your profile. The easiest way to do this is using aos.")]),e._v(" "),a("p",[e._v("If you have not used aos before, you can find installation instructions "),a("a",{attrs:{href:"https://cookbook_ao.arweave.net/welcome/getting-started.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),a("OutboundLink")],1)]),e._v(" "),a("p",[e._v("Using aos, you can log directly into your profile process with the command:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("aos "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("profile-address"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--wallet")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"/path/to/your/keyfile"')]),e._v("\n")])])]),a("p",[e._v("Be sure to replace "),a("code",[e._v("")]),e._v(" with the process Id for your profile process, and "),a("code",[e._v("/path/to/your/keyfile")]),e._v(" with the path to the keyfile for the wallet you created the profile with.")]),e._v(" "),a("p",[e._v("Once you are logged in with aos, you can send a message to the ANT in your profile to set your wallet as a controller:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("Send"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v(" Target "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('""')]),e._v(", Action "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Add-Controller"')]),e._v(", Controller "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('""')]),e._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n")])])]),a("p",[e._v("Replace "),a("code",[e._v("")]),e._v(" with the process Id of the ANT you transferred into your profile, and "),a("code",[e._v("")]),e._v(" with your wallet address.")])])}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/59.f8a39860.js b/assets/js/59.4af09aee.js similarity index 97% rename from assets/js/59.f8a39860.js rename to assets/js/59.4af09aee.js index adf4bb1a..c2bae236 100644 --- a/assets/js/59.f8a39860.js +++ b/assets/js/59.4af09aee.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[59],{358:function(a,e,s){"use strict";s.r(e);var t=s(10),n=Object(t.a)({},(function(){var a=this,e=a._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h1",{attrs:{id:"managing-arns-assets"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#managing-arns-assets"}},[a._v("#")]),a._v(" Managing ArNS Assets")]),a._v(" "),e("h2",{attrs:{id:"overview"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[a._v("#")]),a._v(" Overview")]),a._v(" "),e("p",[a._v("From the Manage Assets page of arns.app, you can view details about your registered names, assign new Target IDs for your names to resolve to, or register new "),e("RouterLink",{attrs:{to:"/arns.html#under_names"}},[a._v("undernames")]),a._v(" for your ArNS names.")],1),a._v(" "),e("p",[a._v('Access the Manage Assets page by connecting your Arweave wallet, and clicking on the account button displaying your wallet address (the connect button if you are not connected), then selecting "Manage Assets" from the menu.')]),a._v(" "),e("video",{staticClass:"amazingdiagram",attrs:{controls:""}},[e("source",{attrs:{src:a.$withBase("/videos/manage-assets.mp4"),type:"video/mp4"}}),a._v("\n Your browser does not support the video tag.\n")]),a._v(" "),e("p",[a._v("The Manage Assets page features two important tabs. "),e("code",[a._v("Names")]),a._v(" and "),e("code",[a._v("ANTS")]),a._v(".")]),a._v(" "),e("h2",{attrs:{id:"names"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#names"}},[a._v("#")]),a._v(" Names")]),a._v(" "),e("p",[a._v("The "),e("code",[a._v("Names")]),a._v(' tab displays all of the ArNS names registered to the currently connected wallet. Each name has its own "details" button which allows you to view details about the name, extend the lease period, or increase the available undernames for that name.')]),a._v(" "),e("img",{staticClass:"amazingdiagram",attrs:{src:a.$withBase("/images/arns-assets-names.jpeg")}}),a._v(" "),e("h2",{attrs:{id:"ants"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ants"}},[a._v("#")]),a._v(" ANTs")]),a._v(" "),e("p",[a._v("The "),e("code",[a._v("ANTs")]),a._v(' tab displays each ANT owned by the connected wallet (except for advanced use cases, each ArNS name will have its own ANT). You can view and create new undernames using the "Undernames" button, or access advanced management options by clicking on the "manage" icon (shaped like a gear).')]),a._v(" "),e("img",{staticClass:"amazingdiagram",attrs:{src:a.$withBase("/images/arns-assets-ants.jpeg")}}),a._v(" "),e("p",[a._v("The Advanced manage page allows you to transfer ownership, add or remove controllers (other wallets who are able to manage an ANT) or set/modify a Target ID for a name to resolve to.")]),a._v(" "),e("img",{staticClass:"amazingdiagram",attrs:{src:a.$withBase("/images/arns-manage-ant.jpeg")}})])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[59],{357:function(a,e,s){"use strict";s.r(e);var t=s(10),n=Object(t.a)({},(function(){var a=this,e=a._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h1",{attrs:{id:"managing-arns-assets"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#managing-arns-assets"}},[a._v("#")]),a._v(" Managing ArNS Assets")]),a._v(" "),e("h2",{attrs:{id:"overview"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[a._v("#")]),a._v(" Overview")]),a._v(" "),e("p",[a._v("From the Manage Assets page of arns.app, you can view details about your registered names, assign new Target IDs for your names to resolve to, or register new "),e("RouterLink",{attrs:{to:"/arns.html#under_names"}},[a._v("undernames")]),a._v(" for your ArNS names.")],1),a._v(" "),e("p",[a._v('Access the Manage Assets page by connecting your Arweave wallet, and clicking on the account button displaying your wallet address (the connect button if you are not connected), then selecting "Manage Assets" from the menu.')]),a._v(" "),e("video",{staticClass:"amazingdiagram",attrs:{controls:""}},[e("source",{attrs:{src:a.$withBase("/videos/manage-assets.mp4"),type:"video/mp4"}}),a._v("\n Your browser does not support the video tag.\n")]),a._v(" "),e("p",[a._v("The Manage Assets page features two important tabs. "),e("code",[a._v("Names")]),a._v(" and "),e("code",[a._v("ANTS")]),a._v(".")]),a._v(" "),e("h2",{attrs:{id:"names"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#names"}},[a._v("#")]),a._v(" Names")]),a._v(" "),e("p",[a._v("The "),e("code",[a._v("Names")]),a._v(' tab displays all of the ArNS names registered to the currently connected wallet. Each name has its own "details" button which allows you to view details about the name, extend the lease period, or increase the available undernames for that name.')]),a._v(" "),e("img",{staticClass:"amazingdiagram",attrs:{src:a.$withBase("/images/arns-assets-names.jpeg")}}),a._v(" "),e("h2",{attrs:{id:"ants"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ants"}},[a._v("#")]),a._v(" ANTs")]),a._v(" "),e("p",[a._v("The "),e("code",[a._v("ANTs")]),a._v(' tab displays each ANT owned by the connected wallet (except for advanced use cases, each ArNS name will have its own ANT). You can view and create new undernames using the "Undernames" button, or access advanced management options by clicking on the "manage" icon (shaped like a gear).')]),a._v(" "),e("img",{staticClass:"amazingdiagram",attrs:{src:a.$withBase("/images/arns-assets-ants.jpeg")}}),a._v(" "),e("p",[a._v("The Advanced manage page allows you to transfer ownership, add or remove controllers (other wallets who are able to manage an ANT) or set/modify a Target ID for a name to resolve to.")]),a._v(" "),e("img",{staticClass:"amazingdiagram",attrs:{src:a.$withBase("/images/arns-manage-ant.jpeg")}})])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/60.273bc29a.js b/assets/js/60.e878dcab.js similarity index 94% rename from assets/js/60.273bc29a.js rename to assets/js/60.e878dcab.js index 979d41a9..2b610c94 100644 --- a/assets/js/60.273bc29a.js +++ b/assets/js/60.e878dcab.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[60],{360:function(e,a,r){"use strict";r.r(a);var t=r(10),s=Object(t.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"arweave-name-system-arns"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#arweave-name-system-arns"}},[e._v("#")]),e._v(" Arweave Name System (ArNS)")]),e._v(" "),a("h2",{attrs:{id:"overview"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),a("p",[e._v("The Arweave Name System (ArNS) is a decentralized, censorship-resistant naming system on Arweave. It allows data on Arweave to be assigned to friendly domain names. Learn more about ArNS "),a("RouterLink",{attrs:{to:"/arns.html"}},[e._v("here")]),e._v(".")],1),e._v(" "),a("p",[e._v("This guide will walk you through the process of purchasing and managing an ArNS name using "),a("a",{attrs:{href:"https://arns.app",target:"_blank",rel:"noopener noreferrer"}},[e._v("arns.app"),a("OutboundLink")],1),e._v(", the official ArNS portal from AR.IO.")])])}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[60],{358:function(e,a,r){"use strict";r.r(a);var t=r(10),s=Object(t.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"arweave-name-system-arns"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#arweave-name-system-arns"}},[e._v("#")]),e._v(" Arweave Name System (ArNS)")]),e._v(" "),a("h2",{attrs:{id:"overview"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),a("p",[e._v("The Arweave Name System (ArNS) is a decentralized, censorship-resistant naming system on Arweave. It allows data on Arweave to be assigned to friendly domain names. Learn more about ArNS "),a("RouterLink",{attrs:{to:"/arns.html"}},[e._v("here")]),e._v(".")],1),e._v(" "),a("p",[e._v("This guide will walk you through the process of purchasing and managing an ArNS name using "),a("a",{attrs:{href:"https://arns.app",target:"_blank",rel:"noopener noreferrer"}},[e._v("arns.app"),a("OutboundLink")],1),e._v(", the official ArNS portal from AR.IO.")])])}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/61.88271f1c.js b/assets/js/61.0ddefe13.js similarity index 99% rename from assets/js/61.88271f1c.js rename to assets/js/61.0ddefe13.js index e104f67a..ef5781d3 100644 --- a/assets/js/61.88271f1c.js +++ b/assets/js/61.0ddefe13.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{359:function(e,a,t){"use strict";t.r(a);var r=t(10),n=Object(r.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"registering-an-arns-name"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#registering-an-arns-name"}},[e._v("#")]),e._v(" Registering an ArNS name")]),e._v(" "),a("h2",{attrs:{id:"overview"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),a("p",[e._v("There are two options when registering an ArNS name. You can purchase the name outright, or lease it for a period of 1 to 5 years. Registrations are further broken down into instant buys, and "),a("RouterLink",{attrs:{to:"/arns.html#bid-initiated-dutch-auctions-bida"}},[e._v("dutch auctions")]),e._v(". Auctions are required for purchases of certain names in a specified character length range. Find more information about when an auction is required, as well as the rules an ArNS name must follow to be valid "),a("RouterLink",{attrs:{to:"/arns.html#name-validation-rules"}},[e._v("here")]),e._v(".")],1),e._v(" "),a("h2",{attrs:{id:"connect-your-wallet"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#connect-your-wallet"}},[e._v("#")]),e._v(" Connect Your Wallet")]),e._v(" "),a("p",[e._v('In order to purchase ArNS names, you will need to have a connected Arweave wallet in order to sign and pay for the transaction. Connect your wallet by clicking the "Connect" button in the top right, and following the prompts.')]),e._v(" "),a("video",{staticClass:"amazingdiagram",attrs:{controls:""}},[a("source",{attrs:{src:e.$withBase("/videos/connect-wallet.mp4"),type:"video/mp4"}}),e._v("\n Your browser does not support the video tag.\n")]),e._v(" "),a("h2",{attrs:{id:"checking-availability"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#checking-availability"}},[e._v("#")]),e._v(" Checking Availability")]),e._v(" "),a("p",[e._v("The home page of "),a("a",{attrs:{href:"https://arns.app",target:"_blank",rel:"noopener noreferrer"}},[e._v("arns.app"),a("OutboundLink")],1),e._v(" features a search box for checking if a specific ArNS name is available for registration. Indicators below the box can help to make sure you are complying with the technical requirements for name validity as you type.")]),e._v(" "),a("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/arnshome.jpeg")}}),e._v(" "),a("p",[e._v("Simply type out the name you would like to register and click on the search icon next to the text box. A check will be performed to let you know if your chosen name is available or already in use.")]),e._v(" "),a("p",[a("strong",[e._v("NOTE")]),e._v(": 1 to 4 character names are not available during the testnet.")]),e._v(" "),a("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/arns-name-unavailable.jpeg")}}),e._v(" "),a("center",[e._v("or")]),e._v(" "),a("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/arns-name-available.jpeg")}}),e._v(" "),a("p",[e._v('If a name is unavailable, information about the name\'s registration period and current owner will be displayed. If it is available, a "Register" button will appear, allowing you to move to the next step in registration.')]),e._v(" "),a("h2",{attrs:{id:"configure-your-purchase"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configure-your-purchase"}},[e._v("#")]),e._v(" Configure Your Purchase")]),e._v(" "),a("p",[e._v('After clicking "Register" on a valid and available name, you will be prompted to connect a wallet using '),a("a",{attrs:{href:"https://www.arconnect.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("ArConnect"),a("OutboundLink")],1),e._v(" if you have not already done so. Support for other wallets will be added in the future.")]),e._v(" "),a("p",[e._v("Once you are connected, you will be shown a page to configure your purchase. You will be able to select if you want to lease or buy the name, and the length of the lease. A notice will appear if your purchase requires an auction.")]),e._v(" "),a("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/arns-auction-notice.jpeg")}}),e._v(" "),a("p",[e._v("You can also use this page to assign the name to an existing "),a("RouterLink",{attrs:{to:"/arns.html#arweave-name-token-ant"}},[e._v("Arweave Name Token (ANT)")]),e._v(", or set an Arweave Transaction ID (Target ID) for the name to resolve to. You will be able to set or change the Target ID after your purchase from the asset management page.")],1),e._v(" "),a("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/arns-name-configure.jpeg")}}),e._v(" "),a("p",[e._v("Towards the bottom of the page, you can also see the cost of your currently configured purchase in "),a("RouterLink",{attrs:{to:"/token.html"}},[e._v("IO tokens")]),e._v(", and the AR required to pay for gas for the transaction.")],1),e._v(" "),a("h2",{attrs:{id:"confirm-your-purchase"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#confirm-your-purchase"}},[e._v("#")]),e._v(" Confirm Your Purchase")]),e._v(" "),a("p",[e._v('The final page before submitting your purchase shows a summary of your purchase. If everything looks correct, click on the "confirm" button to finalize the transaction. Remain on the page while the transaction processes.')]),e._v(" "),a("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/arns-name-confirmation.jpeg")}}),e._v(" "),a("br"),e._v(" "),a("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/arns-name-success.jpeg")}}),e._v(" "),a("h2",{attrs:{id:"auctions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#auctions"}},[e._v("#")]),e._v(" Auctions")]),e._v(" "),a("p",[e._v("No additional steps are necessary to initiate a purchase that requires an auction. However, the name will not immediately become yours. Instead, confirming your purchase will begin the auction.")]),e._v(" "),a("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/arns-auction-started.jpeg")}}),e._v(" "),a("p",[e._v('The IO cost displayed on the confirmation page will be frozen by the aoComputer contract, and used to finalize the purchase once the the auction drops to the floor price. You, or anyone else, may purchase the name at any time for the current auction price. You can click on the "View Auction" button from your confirmation page, or find your auction in the "Live Auctions" tab at the top of the screen to view the current auction price, and how it will change over time. If someone else purchases the name prior to the auction reaching the floor price, your frozen tokens will be released to you.')]),e._v(" "),a("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/arns-auction-chart.jpeg")}})],1)}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{361:function(e,a,t){"use strict";t.r(a);var r=t(10),n=Object(r.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"registering-an-arns-name"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#registering-an-arns-name"}},[e._v("#")]),e._v(" Registering an ArNS name")]),e._v(" "),a("h2",{attrs:{id:"overview"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),a("p",[e._v("There are two options when registering an ArNS name. You can purchase the name outright, or lease it for a period of 1 to 5 years. Registrations are further broken down into instant buys, and "),a("RouterLink",{attrs:{to:"/arns.html#bid-initiated-dutch-auctions-bida"}},[e._v("dutch auctions")]),e._v(". Auctions are required for purchases of certain names in a specified character length range. Find more information about when an auction is required, as well as the rules an ArNS name must follow to be valid "),a("RouterLink",{attrs:{to:"/arns.html#name-validation-rules"}},[e._v("here")]),e._v(".")],1),e._v(" "),a("h2",{attrs:{id:"connect-your-wallet"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#connect-your-wallet"}},[e._v("#")]),e._v(" Connect Your Wallet")]),e._v(" "),a("p",[e._v('In order to purchase ArNS names, you will need to have a connected Arweave wallet in order to sign and pay for the transaction. Connect your wallet by clicking the "Connect" button in the top right, and following the prompts.')]),e._v(" "),a("video",{staticClass:"amazingdiagram",attrs:{controls:""}},[a("source",{attrs:{src:e.$withBase("/videos/connect-wallet.mp4"),type:"video/mp4"}}),e._v("\n Your browser does not support the video tag.\n")]),e._v(" "),a("h2",{attrs:{id:"checking-availability"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#checking-availability"}},[e._v("#")]),e._v(" Checking Availability")]),e._v(" "),a("p",[e._v("The home page of "),a("a",{attrs:{href:"https://arns.app",target:"_blank",rel:"noopener noreferrer"}},[e._v("arns.app"),a("OutboundLink")],1),e._v(" features a search box for checking if a specific ArNS name is available for registration. Indicators below the box can help to make sure you are complying with the technical requirements for name validity as you type.")]),e._v(" "),a("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/arnshome.jpeg")}}),e._v(" "),a("p",[e._v("Simply type out the name you would like to register and click on the search icon next to the text box. A check will be performed to let you know if your chosen name is available or already in use.")]),e._v(" "),a("p",[a("strong",[e._v("NOTE")]),e._v(": 1 to 4 character names are not available during the testnet.")]),e._v(" "),a("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/arns-name-unavailable.jpeg")}}),e._v(" "),a("center",[e._v("or")]),e._v(" "),a("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/arns-name-available.jpeg")}}),e._v(" "),a("p",[e._v('If a name is unavailable, information about the name\'s registration period and current owner will be displayed. If it is available, a "Register" button will appear, allowing you to move to the next step in registration.')]),e._v(" "),a("h2",{attrs:{id:"configure-your-purchase"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configure-your-purchase"}},[e._v("#")]),e._v(" Configure Your Purchase")]),e._v(" "),a("p",[e._v('After clicking "Register" on a valid and available name, you will be prompted to connect a wallet using '),a("a",{attrs:{href:"https://www.arconnect.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("ArConnect"),a("OutboundLink")],1),e._v(" if you have not already done so. Support for other wallets will be added in the future.")]),e._v(" "),a("p",[e._v("Once you are connected, you will be shown a page to configure your purchase. You will be able to select if you want to lease or buy the name, and the length of the lease. A notice will appear if your purchase requires an auction.")]),e._v(" "),a("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/arns-auction-notice.jpeg")}}),e._v(" "),a("p",[e._v("You can also use this page to assign the name to an existing "),a("RouterLink",{attrs:{to:"/arns.html#arweave-name-token-ant"}},[e._v("Arweave Name Token (ANT)")]),e._v(", or set an Arweave Transaction ID (Target ID) for the name to resolve to. You will be able to set or change the Target ID after your purchase from the asset management page.")],1),e._v(" "),a("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/arns-name-configure.jpeg")}}),e._v(" "),a("p",[e._v("Towards the bottom of the page, you can also see the cost of your currently configured purchase in "),a("RouterLink",{attrs:{to:"/token.html"}},[e._v("IO tokens")]),e._v(", and the AR required to pay for gas for the transaction.")],1),e._v(" "),a("h2",{attrs:{id:"confirm-your-purchase"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#confirm-your-purchase"}},[e._v("#")]),e._v(" Confirm Your Purchase")]),e._v(" "),a("p",[e._v('The final page before submitting your purchase shows a summary of your purchase. If everything looks correct, click on the "confirm" button to finalize the transaction. Remain on the page while the transaction processes.')]),e._v(" "),a("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/arns-name-confirmation.jpeg")}}),e._v(" "),a("br"),e._v(" "),a("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/arns-name-success.jpeg")}}),e._v(" "),a("h2",{attrs:{id:"auctions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#auctions"}},[e._v("#")]),e._v(" Auctions")]),e._v(" "),a("p",[e._v("No additional steps are necessary to initiate a purchase that requires an auction. However, the name will not immediately become yours. Instead, confirming your purchase will begin the auction.")]),e._v(" "),a("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/arns-auction-started.jpeg")}}),e._v(" "),a("p",[e._v('The IO cost displayed on the confirmation page will be frozen by the aoComputer contract, and used to finalize the purchase once the the auction drops to the floor price. You, or anyone else, may purchase the name at any time for the current auction price. You can click on the "View Auction" button from your confirmation page, or find your auction in the "Live Auctions" tab at the top of the screen to view the current auction price, and how it will change over time. If someone else purchases the name prior to the auction reaching the floor price, your frozen tokens will be released to you.')]),e._v(" "),a("img",{staticClass:"amazingdiagram",attrs:{src:e.$withBase("/images/arns-auction-chart.jpeg")}})],1)}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/62.b45b08d8.js b/assets/js/62.d084afb5.js similarity index 95% rename from assets/js/62.b45b08d8.js rename to assets/js/62.d084afb5.js index ed3f14d2..f819ba95 100644 --- a/assets/js/62.b45b08d8.js +++ b/assets/js/62.d084afb5.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[62],{363:function(e,a,t){"use strict";t.r(a);var r=t(10),s=Object(r.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"delegated-staking"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#delegated-staking"}},[e._v("#")]),e._v(" Delegated Staking")]),e._v(" "),a("h2",{attrs:{id:"overview"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),a("p",[e._v("Delegated staking is a process by which a person can stake their own IO tokens on someone elses ar.io gateway. The additional staked tokens increase that gateway's chance to be selected as an observer, and so they have the potential to earn more rewards.\nIn exchange, the person who delegates the tokens will receive a share of the gateway's rewards. Gateway operators can set the percentage of rewards are available for delegating wallets.")]),e._v(" "),a("p",[e._v("You can find more specific information about delegated staking and how rewards are distributed in the "),a("a",{attrs:{href:"https://whitepaper_ar-io.arweave.dev/",target:"_blank",rel:"noopener noreferrer"}},[e._v("ar.io whitepaper"),a("OutboundLink")],1),e._v(".")]),e._v(" "),a("p",[e._v("You can easily delegate stake to a gateway by using the Gateway Portal at "),a("a",{attrs:{href:"https://gateways.arweave.net/#/staking",target:"_blank",rel:"noopener noreferrer"}},[e._v("ar://gateways"),a("OutboundLink")],1)])])}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[62],{362:function(e,a,t){"use strict";t.r(a);var r=t(10),s=Object(r.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"delegated-staking"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#delegated-staking"}},[e._v("#")]),e._v(" Delegated Staking")]),e._v(" "),a("h2",{attrs:{id:"overview"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),a("p",[e._v("Delegated staking is a process by which a person can stake their own IO tokens on someone elses ar.io gateway. The additional staked tokens increase that gateway's chance to be selected as an observer, and so they have the potential to earn more rewards.\nIn exchange, the person who delegates the tokens will receive a share of the gateway's rewards. Gateway operators can set the percentage of rewards are available for delegating wallets.")]),e._v(" "),a("p",[e._v("You can find more specific information about delegated staking and how rewards are distributed in the "),a("a",{attrs:{href:"https://whitepaper_ar-io.arweave.dev/",target:"_blank",rel:"noopener noreferrer"}},[e._v("ar.io whitepaper"),a("OutboundLink")],1),e._v(".")]),e._v(" "),a("p",[e._v("You can easily delegate stake to a gateway by using the Gateway Portal at "),a("a",{attrs:{href:"https://gateways.arweave.net/#/staking",target:"_blank",rel:"noopener noreferrer"}},[e._v("ar://gateways"),a("OutboundLink")],1)])])}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/63.7c518206.js b/assets/js/63.6c05ff9c.js similarity index 99% rename from assets/js/63.7c518206.js rename to assets/js/63.6c05ff9c.js index 2519d675..b6e86151 100644 --- a/assets/js/63.7c518206.js +++ b/assets/js/63.6c05ff9c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[63],{362:function(e,t,a){"use strict";a.r(t);var s=a(10),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"deploy-a-website-or-application"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#deploy-a-website-or-application"}},[e._v("#")]),e._v(" Deploy a Website or Application")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("With the growing popularity of permanently deployed apps, hosted on Arweave, along with the growing list of tools offered by ar.io, several methods have been developed to automate the process of deploying a website and updating the ArNS name pointed at it. A particularly useful tool for this is "),t("a",{attrs:{href:"https://github.com/permaweb/permaweb-deploy",target:"_blank",rel:"noopener noreferrer"}},[e._v("permaweb-deploy"),t("OutboundLink")],1),e._v(" from Forward Research.")]),e._v(" "),t("p",[e._v("permaweb-deploy is a cli tool that handles uploading a build folder to Arweave using "),t("a",{attrs:{href:"https://docs.ardrive.io/docs/turbo/what-is-turbo.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Turbo"),t("OutboundLink")],1),e._v(", creating a "),t("RouterLink",{attrs:{to:"/concepts/manifests.html"}},[e._v("manifest")]),e._v(", and then updating an ArNS name to point at the new manifest. It being a cli tool makes it very easy to incorporate into a github actions flow. Setting up an automated deployment with permaweb-deploy is simple, but does require a few steps.")],1),e._v(" "),t("h2",{attrs:{id:"getting-started"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#getting-started"}},[e._v("#")]),e._v(" Getting Started")]),e._v(" "),t("h3",{attrs:{id:"installing-package"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installing-package"}},[e._v("#")]),e._v(" Installing package")]),e._v(" "),t("p",[e._v("permaweb-deploy is an npm package, and must be installed in any project before it can be used. If you are using npm, you can install the package with the below command:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" permaweb-deploy\n")])])]),t("p",[e._v("If you prefer yarn for your package installations, the process is slightly more involved. permaweb-deploy is not designed for installation with yarn, so you must provide the additional argument "),t("code",[e._v("ignore-engines")]),e._v(" in order to skip over the yarn version error you would normally get with installation. There are two methods for doing so:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Directly in the install command")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("add")]),e._v(" permaweb-deploy --ignore-engines\n")])])])]),e._v(" "),t("li",[t("p",[e._v("In a "),t("code",[e._v(".yarnc")]),e._v(" file")]),e._v(" "),t("p",[e._v("You can provide a file, named "),t("code",[e._v(".yarnc")]),e._v(" in the same directory as your "),t("code",[e._v("package.json")]),e._v(" in order to assign specific instructions to all of your yarn commands. Creating a "),t("code",[e._v(".yarnc")]),e._v(" file with the line")]),e._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[e._v("ignore-engines "),t("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("true")]),e._v("\n")])])]),t("p",[e._v("will have the same effect as providing the flag directly in your yarn command")])])]),e._v(" "),t("h3",{attrs:{id:"adding-a-deploy-script"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#adding-a-deploy-script"}},[e._v("#")]),e._v(" Adding a Deploy Script")]),e._v(" "),t("p",[e._v("The simplest way to utilize the permaweb-deploy tool is to build it into a script in your "),t("code",[e._v("package.json")]),e._v(". Here you will provide all of the variables that permaweb-deploy needs in order to function properly, as well as ensure that your app is statically built before being uploaded.")]),e._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"scripts"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"build"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"vuepress build src"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"deploy"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"npm run build && permaweb-deploy --deploy-folder ./src/.vuepress/dist --ant-process $DEPLOY_ANT_PROCESS_ID"')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n")])])]),t("p",[e._v("The above example shows a "),t("code",[e._v("build")]),e._v(" script for a vuepress app, which will build the app into a static folder for deployment, and a "),t("code",[e._v("deploy")]),e._v(" script which runs "),t("code",[e._v("build")]),e._v(" and then permaweb-deploy. Your "),t("code",[e._v("build")]),e._v(" script will look different depending on the framework you are using, but most will provide that for you when you create your app.")]),e._v(" "),t("p",[e._v("The permaweb-deploy command has two required arguments:")]),e._v(" "),t("ul",[t("li",[t("p",[t("code",[e._v("--deploy-folder")]),e._v("\nThis is the relative path (from your "),t("code",[e._v("package.json")]),e._v(") to the build folder you want to upload. In a vuepress app, that will be "),t("code",[e._v("./src/.vuepress/dist")]),e._v(" unless you manually specify otherwise in your vuepress configuration. It will be different depending on your chosen framework and if you have modified the default location.")])]),e._v(" "),t("li",[t("p",[t("code",[e._v("--ant-process")]),e._v("\nThis is the process id of the "),t("RouterLink",{attrs:{to:"/arns.html#arweave-name-token-ant"}},[e._v("Arweave Name Token")]),e._v(" for the ArNS name you want to deploy to. You can find this id by viewing the name on "),t("a",{attrs:{href:"https://arns.app",target:"_blank",rel:"noopener noreferrer"}},[e._v("arns.app"),t("OutboundLink")],1),e._v(". Providing the process id is crucial for making sure the update is sent to the ao process that controls the ArNS name.")],1)])]),e._v(" "),t("p",[e._v("There is also the additional, optional flag "),t("code",[e._v("--undername")]),e._v(". If you want to deploy your app to an "),t("RouterLink",{attrs:{to:"/arns.html#under_names"}},[e._v("undername")]),e._v(" on an ArNS name, provide that name with this flag.")],1),e._v(" "),t("h3",{attrs:{id:"providing-arweave-wallet-keys"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#providing-arweave-wallet-keys"}},[e._v("#")]),e._v(" Providing Arweave Wallet Keys")]),e._v(" "),t("p",[e._v("While using permaweb-deploy, you will be uploading data to Arweave using Turbo, as well as performing protected actions on an Arweave Name Token. Because of this, you will need to provide the keys to an Arweave wallet in order for the actions to be successful. The wallet must contain "),t("a",{attrs:{href:"https://ardrive.io/turbo-bundler/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Turbo Credits"),t("OutboundLink")],1),e._v(" to pay for the upload, and it must either be a controller or the owner of the ArNS name you are trying to update.")]),e._v(" "),t("p",[e._v("permaweb-deploy requires your wallet keyfile be encoded in base64 format. You can convert a local keyfile to base64, and copy the new value to your clipboard by using one of the below commands, depending on your operating system:")]),e._v(" "),t("ul",[t("li",[e._v("Linux")])]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("base64 wallet.json "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" xclip "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-selection")]),e._v(" clipboard\n")])])]),t("ul",[t("li",[e._v("Mac")])]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("base64 wallet.json "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" pbcopy\n")])])]),t("ul",[t("li",[e._v("Windows (CMD)")])]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("base64 wallet.json "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" clip\n")])])]),t("p",[e._v("Be sure to replace "),t("code",[e._v("wallet.json")]),e._v(" with the path to your chosen wallet keyfile. Once you have this value saved to your clipboard, you can move on to the next step.")]),e._v(" "),t("h3",{attrs:{id:"create-github-secrets"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#create-github-secrets"}},[e._v("#")]),e._v(" Create Github Secrets")]),e._v(" "),t("p",[e._v("Anyone who has your wallet keyfile (including the base64 formatted keyfile) has full control over your wallet and any of its assets. Because of this, you do not want to include it directly in your package.json script. Instead, keep the value safe by storing it in a "),t("a",{attrs:{href:"https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions",target:"_blank",rel:"noopener noreferrer"}},[e._v("github secret"),t("OutboundLink")],1),e._v(". You will create the secrets in the settings tab on your github repo, and the secrets will act as environmental variables in the github actions workflow.")]),e._v(" "),t("p",[e._v('You will need to create 2 secrets"')]),e._v(" "),t("ul",[t("li",[t("p",[t("code",[e._v("DEPLOY_KEY")]),e._v(": This is the base64 encoded version of your Arweave wallet keyfile.")])]),e._v(" "),t("li",[t("p",[t("code",[e._v("ANT_PROCESS")]),e._v(": This is the process id of the Arweave Name Token for your ArNS name. This value is not as sensitive, and may be provided in your package.json without issue, but it is a very long hashed string, and it is much easier to work with the variable name than the string itself.")])])]),e._v(" "),t("h3",{attrs:{id:"create-action-workflow"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#create-action-workflow"}},[e._v("#")]),e._v(" Create Action Workflow")]),e._v(" "),t("p",[e._v("Github Actions allow you to perform specific actions whenever you push code to github. They are handled by using "),t("code",[e._v(".yaml")]),e._v(" files provided in "),t("code",[e._v("/.github/workflows")]),e._v(".")]),e._v(" "),t("p",[e._v("To get started, create a new file named "),t("code",[e._v("deploy.yaml")]),e._v(" in the workflows directory, then paste the below inside of it:")]),e._v(" "),t("div",{staticClass:"language-yaml extra-class"},[t("pre",{pre:!0,attrs:{class:"language-yaml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" Arweave Deploy\n\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("on")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("push")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("branches")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" main\n\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("jobs")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("Arweave-build-and-deploy")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("runs-on")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" ubuntu"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v("latest\n\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("steps")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("uses")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" actions/checkout@v2\n\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" Setup Node.js environment\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("uses")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" actions/setup"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v("node@v2\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("with")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("node-version")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"20"')]),e._v("\n\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" Run deployment script\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("env")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("DEPLOY_KEY")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" $"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v(" secrets.DEPLOY_KEY "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("DEPLOY_ANT_PROCESS")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" $"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v(" secrets.DEPLOY_ANT_PROCESS"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("run")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("|")]),t("span",{pre:!0,attrs:{class:"token scalar string"}},[e._v("\n npm install\n npm run deploy")]),e._v("\n")])])]),t("p",[e._v("The above tells github to perform these actions when you push new code to the branch "),t("code",[e._v("main")])]),e._v(" "),t("p",[e._v("It then sets up a vps with nodejs v 20. When that is complete, it installs dependencies for your project using npm (You will need to add a step to install yarn if that is your preferred package manager), and runs your "),t("code",[e._v("deploy")]),e._v(" script, which builds your static folder and then runs permaweb-deploy. It also loads your github secrets into environmental variables that can be used by your deploy script.")]),e._v(" "),t("h2",{attrs:{id:"deploying-app"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#deploying-app"}},[e._v("#")]),e._v(" Deploying App")]),e._v(" "),t("p",[e._v("With the above setup complete, the only thing you need to do to deploy a new version of a permasite app to Arweave is push the updated code to branch "),t("code",[e._v("main")]),e._v(" on github. Everything else is fully automated.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[63],{363:function(e,t,a){"use strict";a.r(t);var s=a(10),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"deploy-a-website-or-application"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#deploy-a-website-or-application"}},[e._v("#")]),e._v(" Deploy a Website or Application")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("With the growing popularity of permanently deployed apps, hosted on Arweave, along with the growing list of tools offered by ar.io, several methods have been developed to automate the process of deploying a website and updating the ArNS name pointed at it. A particularly useful tool for this is "),t("a",{attrs:{href:"https://github.com/permaweb/permaweb-deploy",target:"_blank",rel:"noopener noreferrer"}},[e._v("permaweb-deploy"),t("OutboundLink")],1),e._v(" from Forward Research.")]),e._v(" "),t("p",[e._v("permaweb-deploy is a cli tool that handles uploading a build folder to Arweave using "),t("a",{attrs:{href:"https://docs.ardrive.io/docs/turbo/what-is-turbo.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Turbo"),t("OutboundLink")],1),e._v(", creating a "),t("RouterLink",{attrs:{to:"/concepts/manifests.html"}},[e._v("manifest")]),e._v(", and then updating an ArNS name to point at the new manifest. It being a cli tool makes it very easy to incorporate into a github actions flow. Setting up an automated deployment with permaweb-deploy is simple, but does require a few steps.")],1),e._v(" "),t("h2",{attrs:{id:"getting-started"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#getting-started"}},[e._v("#")]),e._v(" Getting Started")]),e._v(" "),t("h3",{attrs:{id:"installing-package"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installing-package"}},[e._v("#")]),e._v(" Installing package")]),e._v(" "),t("p",[e._v("permaweb-deploy is an npm package, and must be installed in any project before it can be used. If you are using npm, you can install the package with the below command:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" permaweb-deploy\n")])])]),t("p",[e._v("If you prefer yarn for your package installations, the process is slightly more involved. permaweb-deploy is not designed for installation with yarn, so you must provide the additional argument "),t("code",[e._v("ignore-engines")]),e._v(" in order to skip over the yarn version error you would normally get with installation. There are two methods for doing so:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Directly in the install command")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("add")]),e._v(" permaweb-deploy --ignore-engines\n")])])])]),e._v(" "),t("li",[t("p",[e._v("In a "),t("code",[e._v(".yarnc")]),e._v(" file")]),e._v(" "),t("p",[e._v("You can provide a file, named "),t("code",[e._v(".yarnc")]),e._v(" in the same directory as your "),t("code",[e._v("package.json")]),e._v(" in order to assign specific instructions to all of your yarn commands. Creating a "),t("code",[e._v(".yarnc")]),e._v(" file with the line")]),e._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[e._v("ignore-engines "),t("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("true")]),e._v("\n")])])]),t("p",[e._v("will have the same effect as providing the flag directly in your yarn command")])])]),e._v(" "),t("h3",{attrs:{id:"adding-a-deploy-script"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#adding-a-deploy-script"}},[e._v("#")]),e._v(" Adding a Deploy Script")]),e._v(" "),t("p",[e._v("The simplest way to utilize the permaweb-deploy tool is to build it into a script in your "),t("code",[e._v("package.json")]),e._v(". Here you will provide all of the variables that permaweb-deploy needs in order to function properly, as well as ensure that your app is statically built before being uploaded.")]),e._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"scripts"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"build"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"vuepress build src"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"deploy"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"npm run build && permaweb-deploy --deploy-folder ./src/.vuepress/dist --ant-process $DEPLOY_ANT_PROCESS_ID"')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n")])])]),t("p",[e._v("The above example shows a "),t("code",[e._v("build")]),e._v(" script for a vuepress app, which will build the app into a static folder for deployment, and a "),t("code",[e._v("deploy")]),e._v(" script which runs "),t("code",[e._v("build")]),e._v(" and then permaweb-deploy. Your "),t("code",[e._v("build")]),e._v(" script will look different depending on the framework you are using, but most will provide that for you when you create your app.")]),e._v(" "),t("p",[e._v("The permaweb-deploy command has two required arguments:")]),e._v(" "),t("ul",[t("li",[t("p",[t("code",[e._v("--deploy-folder")]),e._v("\nThis is the relative path (from your "),t("code",[e._v("package.json")]),e._v(") to the build folder you want to upload. In a vuepress app, that will be "),t("code",[e._v("./src/.vuepress/dist")]),e._v(" unless you manually specify otherwise in your vuepress configuration. It will be different depending on your chosen framework and if you have modified the default location.")])]),e._v(" "),t("li",[t("p",[t("code",[e._v("--ant-process")]),e._v("\nThis is the process id of the "),t("RouterLink",{attrs:{to:"/arns.html#arweave-name-token-ant"}},[e._v("Arweave Name Token")]),e._v(" for the ArNS name you want to deploy to. You can find this id by viewing the name on "),t("a",{attrs:{href:"https://arns.app",target:"_blank",rel:"noopener noreferrer"}},[e._v("arns.app"),t("OutboundLink")],1),e._v(". Providing the process id is crucial for making sure the update is sent to the ao process that controls the ArNS name.")],1)])]),e._v(" "),t("p",[e._v("There is also the additional, optional flag "),t("code",[e._v("--undername")]),e._v(". If you want to deploy your app to an "),t("RouterLink",{attrs:{to:"/arns.html#under_names"}},[e._v("undername")]),e._v(" on an ArNS name, provide that name with this flag.")],1),e._v(" "),t("h3",{attrs:{id:"providing-arweave-wallet-keys"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#providing-arweave-wallet-keys"}},[e._v("#")]),e._v(" Providing Arweave Wallet Keys")]),e._v(" "),t("p",[e._v("While using permaweb-deploy, you will be uploading data to Arweave using Turbo, as well as performing protected actions on an Arweave Name Token. Because of this, you will need to provide the keys to an Arweave wallet in order for the actions to be successful. The wallet must contain "),t("a",{attrs:{href:"https://ardrive.io/turbo-bundler/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Turbo Credits"),t("OutboundLink")],1),e._v(" to pay for the upload, and it must either be a controller or the owner of the ArNS name you are trying to update.")]),e._v(" "),t("p",[e._v("permaweb-deploy requires your wallet keyfile be encoded in base64 format. You can convert a local keyfile to base64, and copy the new value to your clipboard by using one of the below commands, depending on your operating system:")]),e._v(" "),t("ul",[t("li",[e._v("Linux")])]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("base64 wallet.json "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" xclip "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-selection")]),e._v(" clipboard\n")])])]),t("ul",[t("li",[e._v("Mac")])]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("base64 wallet.json "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" pbcopy\n")])])]),t("ul",[t("li",[e._v("Windows (CMD)")])]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("base64 wallet.json "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" clip\n")])])]),t("p",[e._v("Be sure to replace "),t("code",[e._v("wallet.json")]),e._v(" with the path to your chosen wallet keyfile. Once you have this value saved to your clipboard, you can move on to the next step.")]),e._v(" "),t("h3",{attrs:{id:"create-github-secrets"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#create-github-secrets"}},[e._v("#")]),e._v(" Create Github Secrets")]),e._v(" "),t("p",[e._v("Anyone who has your wallet keyfile (including the base64 formatted keyfile) has full control over your wallet and any of its assets. Because of this, you do not want to include it directly in your package.json script. Instead, keep the value safe by storing it in a "),t("a",{attrs:{href:"https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions",target:"_blank",rel:"noopener noreferrer"}},[e._v("github secret"),t("OutboundLink")],1),e._v(". You will create the secrets in the settings tab on your github repo, and the secrets will act as environmental variables in the github actions workflow.")]),e._v(" "),t("p",[e._v('You will need to create 2 secrets"')]),e._v(" "),t("ul",[t("li",[t("p",[t("code",[e._v("DEPLOY_KEY")]),e._v(": This is the base64 encoded version of your Arweave wallet keyfile.")])]),e._v(" "),t("li",[t("p",[t("code",[e._v("ANT_PROCESS")]),e._v(": This is the process id of the Arweave Name Token for your ArNS name. This value is not as sensitive, and may be provided in your package.json without issue, but it is a very long hashed string, and it is much easier to work with the variable name than the string itself.")])])]),e._v(" "),t("h3",{attrs:{id:"create-action-workflow"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#create-action-workflow"}},[e._v("#")]),e._v(" Create Action Workflow")]),e._v(" "),t("p",[e._v("Github Actions allow you to perform specific actions whenever you push code to github. They are handled by using "),t("code",[e._v(".yaml")]),e._v(" files provided in "),t("code",[e._v("/.github/workflows")]),e._v(".")]),e._v(" "),t("p",[e._v("To get started, create a new file named "),t("code",[e._v("deploy.yaml")]),e._v(" in the workflows directory, then paste the below inside of it:")]),e._v(" "),t("div",{staticClass:"language-yaml extra-class"},[t("pre",{pre:!0,attrs:{class:"language-yaml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" Arweave Deploy\n\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("on")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("push")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("branches")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" main\n\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("jobs")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("Arweave-build-and-deploy")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("runs-on")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" ubuntu"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v("latest\n\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("steps")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("uses")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" actions/checkout@v2\n\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" Setup Node.js environment\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("uses")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" actions/setup"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v("node@v2\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("with")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("node-version")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"20"')]),e._v("\n\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" Run deployment script\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("env")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("DEPLOY_KEY")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" $"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v(" secrets.DEPLOY_KEY "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("DEPLOY_ANT_PROCESS")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" $"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v(" secrets.DEPLOY_ANT_PROCESS"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("run")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("|")]),t("span",{pre:!0,attrs:{class:"token scalar string"}},[e._v("\n npm install\n npm run deploy")]),e._v("\n")])])]),t("p",[e._v("The above tells github to perform these actions when you push new code to the branch "),t("code",[e._v("main")])]),e._v(" "),t("p",[e._v("It then sets up a vps with nodejs v 20. When that is complete, it installs dependencies for your project using npm (You will need to add a step to install yarn if that is your preferred package manager), and runs your "),t("code",[e._v("deploy")]),e._v(" script, which builds your static folder and then runs permaweb-deploy. It also loads your github secrets into environmental variables that can be used by your deploy script.")]),e._v(" "),t("h2",{attrs:{id:"deploying-app"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#deploying-app"}},[e._v("#")]),e._v(" Deploying App")]),e._v(" "),t("p",[e._v("With the above setup complete, the only thing you need to do to deploy a new version of a permasite app to Arweave is push the updated code to branch "),t("code",[e._v("main")]),e._v(" on github. Everything else is fully automated.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/65.dc4b9b41.js b/assets/js/65.cd699744.js similarity index 99% rename from assets/js/65.dc4b9b41.js rename to assets/js/65.cd699744.js index 762b7a64..b6a7c148 100644 --- a/assets/js/65.dc4b9b41.js +++ b/assets/js/65.cd699744.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[65],{366:function(e,r,t){"use strict";t.r(r);var a=t(10),o=Object(a.a)({},(function(){var e=this,r=e._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"ar-io-sdk-changelog"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#ar-io-sdk-changelog"}},[e._v("#")]),e._v(" ar.io SDK Changelog")]),e._v(" "),r("h2",{attrs:{id:"overview"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),r("p",[e._v("Welcome to the documentation page for the ar.io SDK release notes. Here, you will find detailed information about each version of the ar.io SDK, including the enhancements, bug fixes, and any other changes introduced in every release. This page serves as a comprehensive resource to keep you informed about the latest developments and updates in the ar.io SDK. For those interested in exploring the source code, each release's code is readily accessible at our GitHub repository: ar.io SDK "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/blob/main/CHANGELOG.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("change logs"),r("OutboundLink")],1),e._v(". Stay updated with the continuous improvements and advancements in the ar.io SDK by referring to this page for all release-related information.")]),e._v(" "),r("h2",{attrs:{id:"_2-2-0-2024-08-30"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_2-2-0-2024-08-30"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v2.1.0...v2.2.0",target:"_blank",rel:"noopener noreferrer"}},[e._v("2.2.0"),r("OutboundLink")],1),e._v(" (2024-08-30)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("logger:")]),e._v(" permit logger as argument for typeguard util and default it ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/45df6267df3260744201aa86ced572e5da842aae",target:"_blank",rel:"noopener noreferrer"}},[e._v("45df626"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("register:")]),e._v(" update spawn ant to register at end of spawn ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4320c803bec96eedf4fe4bd5456a5eaa4ac9ae88",target:"_blank",rel:"noopener noreferrer"}},[e._v("4320c80"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" add typeguard util for aoSigner ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0d7f210ac3ab44a1c7ea296936917e5297878e48",target:"_blank",rel:"noopener noreferrer"}},[e._v("0d7f210"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signing:")]),e._v(" add aosigner to contract signer ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/3b0495a3ca4420c61cf4f72c7eb451777cbaf16d",target:"_blank",rel:"noopener noreferrer"}},[e._v("3b0495a"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" dont send messages to ao in e2e tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e7108dafb7602e29833b0120c91cff73b022d31f",target:"_blank",rel:"noopener noreferrer"}},[e._v("e7108da"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" reconfigure test structure ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1872a262b654d72c779c2607ed454c5ae8271e87",target:"_blank",rel:"noopener noreferrer"}},[e._v("1872a26"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" use test-wallet fixture in tests instead of generating anew each time ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/27a5dc25cd6bbe75736187280d3f511235dfa0b0",target:"_blank",rel:"noopener noreferrer"}},[e._v("27a5dc2"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("typeguard:")]),e._v(" return true or false in typeguard and log the error ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4b851c5bd904f66bd88efc67cdc239a1300c7ecf",target:"_blank",rel:"noopener noreferrer"}},[e._v("4b851c5"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" update types for epoch distributions ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5aedf5077a68faec8d86281a401ab2f4d6daf142",target:"_blank",rel:"noopener noreferrer"}},[e._v("5aedf50"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("util:")]),e._v(" use ANTRegistry class for registering ant on spawn instead of aoconnect ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/350112d7fb29c180231b69ede5c4c2f94a60afa3",target:"_blank",rel:"noopener noreferrer"}},[e._v("350112d"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h3",{attrs:{id:"features"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[e._v("#")]),e._v(" Features")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("ant id:")]),e._v(" update lua ant id to latest ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/968c30e9b3851c0eed1bb7e152e78835d558243b",target:"_blank",rel:"noopener noreferrer"}},[e._v("968c30e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("util:")]),e._v(" add AoAntState typeguard util ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c6f457f88f7b17af615ffacc593cc01b77230257",target:"_blank",rel:"noopener noreferrer"}},[e._v("c6f457f"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_2-1-0-2024-08-07"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_2-1-0-2024-08-07"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v2.0.2...v2.1.0",target:"_blank",rel:"noopener noreferrer"}},[e._v("2.1.0"),r("OutboundLink")],1),e._v(" (2024-08-07)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-2"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-2"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("actions:")]),e._v(" ignore engines in action ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7f6f87d442dca7970ee495f2b4286049e63cbcff",target:"_blank",rel:"noopener noreferrer"}},[e._v("7f6f87d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant lua id:")]),e._v(" update to version Flwio4Lr08g6s6uim6lEJNnVGD9ylvz0_aafvpiL8FI ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/8cbd564cffb18055c46cb3212a0657e55f02d781",target:"_blank",rel:"noopener noreferrer"}},[e._v("8cbd564"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant:")]),e._v(" remove data from ant object, none of our ant methods require data attributes ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0f267c1faab7f7c0e923eb7398e3f471c55c4c1f",target:"_blank",rel:"noopener noreferrer"}},[e._v("0f267c1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao:")]),e._v(" update AoProcess to only support string | undefined ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/584aee12cad2a246108d65c827fbddb0e3cd09f9",target:"_blank",rel:"noopener noreferrer"}},[e._v("584aee1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("arns:")]),e._v(" update event emitter to provide more events and logs while loading arns records ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/87758966e54b9563e8153feb07bba808a110aa5b",target:"_blank",rel:"noopener noreferrer"}},[e._v("8775896"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("constants:")]),e._v(" do not set env var for ant registry ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9e61cc7691882c3203da11c8f21a2135ab2c3371",target:"_blank",rel:"noopener noreferrer"}},[e._v("9e61cc7"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("deps:")]),e._v(" move arconnect to dev deps ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/34f07d25024c080f529218569cba57041e34baa2",target:"_blank",rel:"noopener noreferrer"}},[e._v("34f07d2"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("emiter:")]),e._v(" use a set to filter out duplicate ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7887af9b9e9a14a3b9002b3560f653d2c59ef9cf",target:"_blank",rel:"noopener noreferrer"}},[e._v("7887af9"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("emitter:")]),e._v(" add page size param for emitter to increase amount of records per page to 50k ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b6f215763b5d7b3e713f0dbb1babca99ddd79dfe",target:"_blank",rel:"noopener noreferrer"}},[e._v("b6f2157"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("errors:")]),e._v(" use any type on error ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f14ed5a1ccf9a1d04208f44e8d37dea2aec5fc23",target:"_blank",rel:"noopener noreferrer"}},[e._v("f14ed5a"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("events:")]),e._v(" use arns name space for events ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1d67dfe1f7a4766bbce6cf5a55438f33423f660f",target:"_blank",rel:"noopener noreferrer"}},[e._v("1d67dfe"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("evolve:")]),e._v(" call eval twice to ensure evolve txid is set ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a6261e566bdf9ba6d18bbc9088487f9b79bbd5aa",target:"_blank",rel:"noopener noreferrer"}},[e._v("a6261e5"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("evolve:")]),e._v(" dont double eval ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a2a9121cbdbfe1b16e43602cf83f86793f0e8f48",target:"_blank",rel:"noopener noreferrer"}},[e._v("a2a9121"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("evolve:")]),e._v(" fixed evolve somehow ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b06503b098fee87ef9e710c2fa4cd585416b21ed",target:"_blank",rel:"noopener noreferrer"}},[e._v("b06503b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("example:")]),e._v(" dont spawn in example ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d1d514759a1a5af90246b2d51a43ca5ec03e5c16",target:"_blank",rel:"noopener noreferrer"}},[e._v("d1d5147"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("example:")]),e._v(" remove unused arweave instance ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d0035c01093e8acd3141a933439184897a74ad4e",target:"_blank",rel:"noopener noreferrer"}},[e._v("d0035c0"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("format:")]),e._v(" fix linting issues in format ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b72dc1f4969763568a8d1fa7e36cfd1afb3a5ccb",target:"_blank",rel:"noopener noreferrer"}},[e._v("b72dc1f"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("gateway stats:")]),e._v(" update gateway stat types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a59b166fa17735889aaae44e2b91cb5964f85f63",target:"_blank",rel:"noopener noreferrer"}},[e._v("a59b166"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("io:")]),e._v(" add api that returns the total token supply ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/261c85cf44490acc8bb46bd337693d83ffba7120",target:"_blank",rel:"noopener noreferrer"}},[e._v("261c85c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("io:")]),e._v(" no longer add data to save observations ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c017b52ba940a0738367f28043ff885d45e85951",target:"_blank",rel:"noopener noreferrer"}},[e._v("c017b52"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("lint:")]),e._v(" fix lint errors and warnings ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e532f4e4aa11e926631c0beec0eadba0d25835a4",target:"_blank",rel:"noopener noreferrer"}},[e._v("e532f4e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("lua id:")]),e._v(" set new lua id in constants ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e4c3aaf8b65c02294e021c2df8dac9d25ea6ec05",target:"_blank",rel:"noopener noreferrer"}},[e._v("e4c3aaf"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("naming:")]),e._v(" name AoSigner property aoSigner ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4604524dc56333c3ed1698978b61747920c43848",target:"_blank",rel:"noopener noreferrer"}},[e._v("4604524"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("records:")]),e._v(" update arns emitter to use ant registry ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e55a67ba022fa4a7bfe5bed00de592e99f8dd822",target:"_blank",rel:"noopener noreferrer"}},[e._v("e55a67b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" describe signing function as signer vs aoSigner in case of signer type changes ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/3b23f80581ea331b89ac31756421f74799315e2c",target:"_blank",rel:"noopener noreferrer"}},[e._v("3b23f80"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" move createAoSigner to be a util ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7f7a0e6f16b1b8f2e900aca056f6f5aaa98bd4f1",target:"_blank",rel:"noopener noreferrer"}},[e._v("7f7a0e6"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" pass in signing function instead of signer class ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/cba16e3f72d3adf0b0ecf39dd93236511b77bb7c",target:"_blank",rel:"noopener noreferrer"}},[e._v("cba16e3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" use AoSigner type as return type ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/8e95eddf5723b0fdbf870688556f76a3e80bb6fa",target:"_blank",rel:"noopener noreferrer"}},[e._v("8e95edd"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("spawn:")]),e._v(" update spawn to use ant registry id in the tags ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/28dae7fe312a6948ce3a2d9fa2db57271f6c5f85",target:"_blank",rel:"noopener noreferrer"}},[e._v("28dae7f"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" check the return of ACL on ant tests more granularly ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/350bab13480598ac1f4b1307e8258df06124d0c6",target:"_blank",rel:"noopener noreferrer"}},[e._v("350bab1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update e2e tests to only read from ant registry ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a61e0bf0c8106957c6405d05ed57b38c346ed65d",target:"_blank",rel:"noopener noreferrer"}},[e._v("a61e0bf"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update web test to use ANT registry in app ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/38ca913fc9f935663b750e4f68e97879d3b70e5f",target:"_blank",rel:"noopener noreferrer"}},[e._v("38ca913"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" use const for unchanging test vars ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9f965e12c39ce9e05f8cc7972ee01eca400646ab",target:"_blank",rel:"noopener noreferrer"}},[e._v("9f965e1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("test:")]),e._v(" update browser test with data test id and render checks ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/93741cb5133d1ce949caa56675290d65c24626f8",target:"_blank",rel:"noopener noreferrer"}},[e._v("93741cb"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("test:")]),e._v(" use a known wallet adddress in tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9dac28038e1fd8e669414b8a8368c6819c753239",target:"_blank",rel:"noopener noreferrer"}},[e._v("9dac280"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("todo:")]),e._v(" remove completed todo comment ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c8685227bfa656cd286d08c8998f73c6812857cf",target:"_blank",rel:"noopener noreferrer"}},[e._v("c868522"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" add gateway weights to AoGateway ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e725198093505d4dabbf2e92bc983bd0b69d1ab3",target:"_blank",rel:"noopener noreferrer"}},[e._v("e725198"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" check info on evolve util first ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a44cca17fc8d44661326e39d189b5a9e0e43367d",target:"_blank",rel:"noopener noreferrer"}},[e._v("a44cca1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" remove deprecated types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c674876fbdbe85299e7eff75ba0a89187610d00e",target:"_blank",rel:"noopener noreferrer"}},[e._v("c674876"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" update AoGateway to include weights ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5368668ec6fcd84bf6a723a80b13cad7753a8606",target:"_blank",rel:"noopener noreferrer"}},[e._v("5368668"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" update type name to what contract returns ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/99edbad2fb4553d85c366d6c62466d984b42e7cf",target:"_blank",rel:"noopener noreferrer"}},[e._v("99edbad"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[e._v("use custom event names to avoid overlap ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5b919ac483778673527e0535a5aec8b06e6ce68e",target:"_blank",rel:"noopener noreferrer"}},[e._v("5b919ac"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("utils:")]),e._v(" revert new util ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c959c81bd51fb08999a43243ca40579c979aa971",target:"_blank",rel:"noopener noreferrer"}},[e._v("c959c81"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("utils:")]),e._v(" update util to use ant registry ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b2223d4cab716267ade9159fa5932ecfc47f06b2",target:"_blank",rel:"noopener noreferrer"}},[e._v("b2223d4"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h3",{attrs:{id:"features-2"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#features-2"}},[e._v("#")]),e._v(" Features")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("ant registry:")]),e._v(" add ant registry class ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/20566747247e4006bb932216796bf96d51dc60b9",target:"_blank",rel:"noopener noreferrer"}},[e._v("2056674"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("evolve:")]),e._v(" add evolve util ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/47bfe20a9713bfdd82a7ca03ce8576653af29cf0",target:"_blank",rel:"noopener noreferrer"}},[e._v("47bfe20"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signing:")]),e._v(" add window arweave wallet to available signing options ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7596aec43557b2a0aac3844a973b78f4fed33b65",target:"_blank",rel:"noopener noreferrer"}},[e._v("7596aec"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_2-0-2-2024-07-12"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_2-0-2-2024-07-12"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v2.0.1...v2.0.2",target:"_blank",rel:"noopener noreferrer"}},[e._v("2.0.2"),r("OutboundLink")],1),e._v(" (2024-07-12)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-3"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-3"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("types:")]),e._v(" update gateway settings type to only support "),r("code",[e._v("observerAddress")]),e._v(" ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/13e073ba6d7482028e43d5c8fbab8e769d2c9e01",target:"_blank",rel:"noopener noreferrer"}},[e._v("13e073b"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_2-0-1-2024-07-11"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_2-0-1-2024-07-11"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v2.0.0...v2.0.1",target:"_blank",rel:"noopener noreferrer"}},[e._v("2.0.1"),r("OutboundLink")],1),e._v(" (2024-07-11)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-4"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-4"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("logger:")]),e._v(" fixes the console logger to respect the log level provided by web clients ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/99d79939806ef8f26407aa3237ea8773179b91a6",target:"_blank",rel:"noopener noreferrer"}},[e._v("99d7993"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h1",{attrs:{id:"_2-0-0-2024-07-11"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_2-0-0-2024-07-11"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.2.2...v2.0.0",target:"_blank",rel:"noopener noreferrer"}},[e._v("2.0.0"),r("OutboundLink")],1),e._v(" (2024-07-11)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-5"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-5"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("arweave:")]),e._v(" use default arweave in IO ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/21d25b9e1109bc18ba4e074f314848143ed0828c",target:"_blank",rel:"noopener noreferrer"}},[e._v("21d25b9"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("deps:")]),e._v(" replace bunyan or console depending on the client environment ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9d940aac99e94e5086091a2e41ffd73fe2c36715",target:"_blank",rel:"noopener noreferrer"}},[e._v("9d940aa"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("log:")]),e._v(" allow log level configuration for clients ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9cb0981e0f48c80fc000c05aba2c4cb69b5ca43c",target:"_blank",rel:"noopener noreferrer"}},[e._v("9cb0981"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("log:")]),e._v(" replace bunyan with winston to ensure browser compatibility ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/80b38e08879c83a986542f3fd9c65379680bf9b5",target:"_blank",rel:"noopener noreferrer"}},[e._v("80b38e0"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h3",{attrs:{id:"features-3"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#features-3"}},[e._v("#")]),e._v(" Features")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("io:")]),e._v(" add paginated gateway support for larger state objects (e.g. balances, records, and gateways) ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b23efa8e433451c3ff8361c54f6e35fdd30457a0",target:"_blank",rel:"noopener noreferrer"}},[e._v("b23efa8"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("util:")]),e._v(" add utility for fetching all records ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/8df2aacf530ff24f15cc14022a81f3168b8baea0",target:"_blank",rel:"noopener noreferrer"}},[e._v("8df2aac"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("io:")]),e._v(" add leaveNetwork API ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/54222ce65b25e203b243df7a7c2317f9dc1fc7b9",target:"_blank",rel:"noopener noreferrer"}},[e._v("54222ce"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h3",{attrs:{id:"breaking-changes"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#breaking-changes"}},[e._v("#")]),e._v(" BREAKING CHANGES")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("deps:")]),e._v(" removes all smartweave implementations using warp-sdk. The result is an only AO compatible ANT and IO network contracts. Some utilities are preserved due to their usefulness.")]),e._v(" "),r("li",[r("strong",[e._v("imports:")]),e._v(" modifies "),r("code",[e._v("web")]),e._v(" named exports to provide esm and cjs exports instead of minified bundle. The web bundle was causing issues in bundled projects, and polyfills are no longer provided by default. Refer to the "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/blob/main/README.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("README"),r("OutboundLink")],1),e._v(" for specifications on how to use the SDK for a web project.")])]),e._v(" "),r("h2",{attrs:{id:"_1-2-2-2024-07-11"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-2-2-2024-07-11"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.2.0...v1.2.1",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.2.2"),r("OutboundLink")],1),e._v(" (2024-07-11)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-6"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-6"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("api")]),e._v(": ensure timestamps are always in miliseconds ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/93b162f22f27e6af4252e7551f785fbffc062e87",target:"_blank",rel:"noopener noreferrer"}},[e._v("93b162f"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-2-1-2024-07-04"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-2-1-2024-07-04"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.2.0...v1.2.1",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.2.1"),r("OutboundLink")],1),e._v(" (2024-07-04)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-7"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-7"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("io:")]),e._v(" default the IO process to use testnet ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/61bca5cb4f2ecc1928ebc8271c9acc9f25ac0412",target:"_blank",rel:"noopener noreferrer"}},[e._v("61bca5c"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-2-0-2024-07-03"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-2-0-2024-07-03"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.1.1...v1.2.0",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.2.0"),r("OutboundLink")],1),e._v(" (2024-07-03)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-8"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-8"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("ant")]),e._v(": add event emitter util for fetching ants ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ee5287b985aa6ef4b41f6e67ec0119dabcff3b3f",target:"_blank",rel:"noopener noreferrer"}},[e._v("ee5287b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant")]),e._v(": fix read api and update types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/977e0e3e46bbc6e324f545f28b6fb6d93d9e2d08",target:"_blank",rel:"noopener noreferrer"}},[e._v("977e0e3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant")]),e._v(": handle when no data is returned ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1de66101e0a4fd2b9366b95085ede218292e36f9",target:"_blank",rel:"noopener noreferrer"}},[e._v("1de6610"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ants")]),e._v(": separate out interfaces ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/60fd59321960ee61e487295800d3fc72c1a139b5",target:"_blank",rel:"noopener noreferrer"}},[e._v("60fd593"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant")]),e._v(": update apis to implement interface ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9c54db09cc896bae17943597532fa08df3f40e74",target:"_blank",rel:"noopener noreferrer"}},[e._v("9c54db0"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant")]),e._v(": update interface to expect "),r("code",[e._v("undername")]),e._v(" instead of "),r("code",[e._v("name")]),e._v(" for ant records ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/416cb3dfde20d46cca19e439fddace455db1f03e",target:"_blank",rel:"noopener noreferrer"}},[e._v("416cb3d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao ant")]),e._v(": add handler for get state ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/fd20aa761fabac4e98b9bedb546d23aa915b4309",target:"_blank",rel:"noopener noreferrer"}},[e._v("fd20aa7"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao reads")]),e._v(": safely parse json ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1ff54104526d1850b4f2dba0c119a33818d76f56",target:"_blank",rel:"noopener noreferrer"}},[e._v("1ff5410"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": add AR-IO-SDK tag to process interaction ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e5b5603ed9b6eaae3e6cc0b4f6407f91081ea272",target:"_blank",rel:"noopener noreferrer"}},[e._v("e5b5603"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": add default timestamp to getTokenCost ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/36fed1b8a0206c7dcb0c1d1fbacd533cd537b5b9",target:"_blank",rel:"noopener noreferrer"}},[e._v("36fed1b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": add getPrescribedNames for epoch api ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/747fad28b64edbed288511a895af6b930c93f762",target:"_blank",rel:"noopener noreferrer"}},[e._v("747fad2"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": add retries to read interactions ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/67d59e2cbdef917bc9a776409a8040565434aeaa",target:"_blank",rel:"noopener noreferrer"}},[e._v("67d59e2"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": fix tag for join network, update observation response ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/556f5d5d957a07944f3655f3ed1be026de51102e",target:"_blank",rel:"noopener noreferrer"}},[e._v("556f5d5"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": prune tags on joinNetwork ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/31978f9788f67a488ddd1d0804c90809a10ac90c",target:"_blank",rel:"noopener noreferrer"}},[e._v("31978f9"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao read")]),e._v(": fix interface to have ant getState api ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4e95bbdedc5cc6a448a860d48b30a7502fbbf179",target:"_blank",rel:"noopener noreferrer"}},[e._v("4e95bbd"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("aos")]),e._v(": update aos module id and lua id ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e19139e1391656e7eb4038a479e620535f3671c4",target:"_blank",rel:"noopener noreferrer"}},[e._v("e19139e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": support connection config params in AO ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/3e6a2469c73a1889d89c4a90fc0d43ec8f3d8a39",target:"_blank",rel:"noopener noreferrer"}},[e._v("3e6a246"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": support tags for all write interactions ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/67f8da987aa280e1648d4b65fa305f643ab42535",target:"_blank",rel:"noopener noreferrer"}},[e._v("67f8da9"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": update APIs for ao interface to be more descriptive ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f07ac369045a0c71db50e9864f4b513d18a671b1",target:"_blank",rel:"noopener noreferrer"}},[e._v("f07ac36"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": update epoch interfaces to support various inputs ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ddc4c1041ecbb316ff555e354b8c28782e859c3b",target:"_blank",rel:"noopener noreferrer"}},[e._v("ddc4c10"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": update send on process to use proper signer and evalute result ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4e2f65d79770fee48f5288307cfd7b50048e6d58",target:"_blank",rel:"noopener noreferrer"}},[e._v("4e2f65d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": update stake interface ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/427e8baf8c8e58dffbfb5632ddb3c5d9c51d66e8",target:"_blank",rel:"noopener noreferrer"}},[e._v("427e8ba"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": use types and connect config in ao process to wrap connect from ao ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/05b07cfbb1d974e708108c8239d8214d6c50b418",target:"_blank",rel:"noopener noreferrer"}},[e._v("05b07cf"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("buy")]),e._v(": require processId on buyRecord ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/cc5859fcc4e7ecb09f687a2ad02a59aa4763be13",target:"_blank",rel:"noopener noreferrer"}},[e._v("cc5859f"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("deps")]),e._v(": add eventemitter3 dep ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1d50cd12a3ffd37bbf23a368c590b74aaa040b93",target:"_blank",rel:"noopener noreferrer"}},[e._v("1d50cd1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("deps")]),e._v(": use p-limit-lit to avoid jest issues ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/05e0673873490180e71974b90448561cacd21662",target:"_blank",rel:"noopener noreferrer"}},[e._v("05e0673"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("emitter")]),e._v(": add a "),r("code",[e._v("end")]),e._v(" and some console logs in the example ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/bc4e6b8f3c252e3d79033e25f5de6cd8fa7f087a",target:"_blank",rel:"noopener noreferrer"}},[e._v("bc4e6b8"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("emmiter")]),e._v(": rename and move throttle to be variable powered ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f9cf40d547e353005501188aa73d4f9cd3203f7b",target:"_blank",rel:"noopener noreferrer"}},[e._v("f9cf40d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("epochs")]),e._v(": fix epoch default timestamp ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ffb9df7acafd5378073537fe1f71835663e00231",target:"_blank",rel:"noopener noreferrer"}},[e._v("ffb9df7"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("events")]),e._v(": return process ids on end of fetching ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/15e3f44f20deea1c29d8d67aa4973c39e9182072",target:"_blank",rel:"noopener noreferrer"}},[e._v("15e3f44"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("handlers")]),e._v(": update handler names ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/720b178eca08570b7beff02445d82b5c7366e220",target:"_blank",rel:"noopener noreferrer"}},[e._v("720b178"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("io")]),e._v(": add buyRecord API ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/30d5e74384d6af25805fc5d1c35f30486ea204a2",target:"_blank",rel:"noopener noreferrer"}},[e._v("30d5e74"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("io")]),e._v(": add epoch-settings api and tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/56555eac9ff627ff9d5762965477e5895e43ded5",target:"_blank",rel:"noopener noreferrer"}},[e._v("56555ea"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("io")]),e._v(": add init to provide custom process ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/8811016a9049102a0c5c3d9c82d473ccbe4e2d10",target:"_blank",rel:"noopener noreferrer"}},[e._v("8811016"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("io")]),e._v(": separate out io/ao contract interfaces ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d96fa5928a1cc45639fe3e0f687726eba059a762",target:"_blank",rel:"noopener noreferrer"}},[e._v("d96fa59"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("io")]),e._v(": update arns interactions on registry contract ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9befe2a1823f580821f5175ebc97fa24f481e1fe",target:"_blank",rel:"noopener noreferrer"}},[e._v("9befe2a"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("pLimit")]),e._v(": add pLimit for util to avoid ao throttling ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5b1356079153f4cc637596bb75b3f916d77a69e3",target:"_blank",rel:"noopener noreferrer"}},[e._v("5b13560"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[e._v("readds incorrectly removed descriptions ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c77217a9baa28f5397a81ae46e3618b4730e49c0",target:"_blank",rel:"noopener noreferrer"}},[e._v("c77217a"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[e._v("revert "),r("code",[e._v("purchasetype")]),e._v(" tag ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2dc08dfb946cd8e7002dde80458e44e739693627",target:"_blank",rel:"noopener noreferrer"}},[e._v("2dc08df"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("spawn")]),e._v(": add option state contractTxID to track where init state is from ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1745766efbaf39dab3d848febf320fc6a78a0fed",target:"_blank",rel:"noopener noreferrer"}},[e._v("1745766"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tags")]),e._v(": make remaining tags ans-116 compliant ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d034c8c694f4558aa807beeef36217868f50c8e8",target:"_blank",rel:"noopener noreferrer"}},[e._v("d034c8c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tags")]),e._v(": use updated ans-116 tag format for actions ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/261b7888c6c84d94261ea59499e65854ddf11e31",target:"_blank",rel:"noopener noreferrer"}},[e._v("261b788"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("timeout")]),e._v(": increase timeout period on arns emitter ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b5ddb5f0e79aeabeac6a5a55855436abd6cc9199",target:"_blank",rel:"noopener noreferrer"}},[e._v("b5ddb5f"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("type")]),e._v(": default to unknown return type for json ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0bddce0870c96dfbb2175a0eeb98bd86d65c1e84",target:"_blank",rel:"noopener noreferrer"}},[e._v("0bddce0"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(": add ao ant state type ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/02dbacd71f5b5aabc8eb7a539a908c7fabebe27a",target:"_blank",rel:"noopener noreferrer"}},[e._v("02dbacd"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(": update some types for arns names and contract state ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2d23241cd632ec2931521b98804e8cf536a92af7",target:"_blank",rel:"noopener noreferrer"}},[e._v("2d23241"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[e._v("updates to use IO class and process terminology ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ec45d666747a31734ae93cc8b5a4b29af1e7cd3e",target:"_blank",rel:"noopener noreferrer"}},[e._v("ec45d66"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("util")]),e._v(": initial implementation of get ant process for wallet ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/885fa31531725e396a94a53bfff200a6e3258395",target:"_blank",rel:"noopener noreferrer"}},[e._v("885fa31"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h3",{attrs:{id:"features-4"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#features-4"}},[e._v("#")]),e._v(" Features")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("ant:")]),e._v(" add balance APIs to ant interface ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ec67440b7189c95ce4c2fcc933ef63ca9c1732b6",target:"_blank",rel:"noopener noreferrer"}},[e._v("ec67440"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant:")]),e._v(" add utility for fetchint ant modules owned by wallet ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/01f7ec95d4de88b3a098a2ab59fa811c9820b279",target:"_blank",rel:"noopener noreferrer"}},[e._v("01f7ec9"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ants:")]),e._v(" support ANT apis in SDK ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b187aebc34fd5afc237d5a68aa091d4fe14d0bce",target:"_blank",rel:"noopener noreferrer"}},[e._v("b187aeb"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao utils:")]),e._v(" add spawn ant util ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d02566eac7385b5a25fb1851fa4aeb4906616328",target:"_blank",rel:"noopener noreferrer"}},[e._v("d02566e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao:")]),e._v(" experiment with initial implementation of ao contract ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/6118cea0b1d5aa027f97e81b34849bd56107a396",target:"_blank",rel:"noopener noreferrer"}},[e._v("6118cea"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("getInfo io:")]),e._v(" add getInfo method to io class ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4ef25ec37f60a5155e68047f2cffa2c49ecaa093",target:"_blank",rel:"noopener noreferrer"}},[e._v("4ef25ec"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("IO:")]),e._v(" implement io/ao classes that call process apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/aab8967c83e69fafe1258b768b1e33cb3920aeb8",target:"_blank",rel:"noopener noreferrer"}},[e._v("aab8967"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-1-1-2024-06-06"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-1-1-2024-06-06"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.1.0...v1.1.1",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.1.1"),r("OutboundLink")],1),e._v(" (2024-06-06)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-9"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-9"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("api")]),e._v(": default evaluation options on getArNSReservedNames api ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0a1f22ebe7fccd6d7f77a5255d2b639d670492fb",target:"_blank",rel:"noopener noreferrer"}},[e._v("0a1f22e"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-1-0-2024-06-03"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-1-0-2024-06-03"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.0.8...v1.1.0",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.1.0"),r("OutboundLink")],1),e._v(" (2024-06-03)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-10"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-10"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("api")]),e._v(": make evaluation options optional on the interface ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9e5a1c0572486f9c1e417453fb9c54dd102cbdb4",target:"_blank",rel:"noopener noreferrer"}},[e._v("9e5a1c0"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("api")]),e._v(": remove unused variable for epochBlockHeight ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/98c5ebc447b1b6d0249e0602ce7e4af97e424cc1",target:"_blank",rel:"noopener noreferrer"}},[e._v("98c5ebc"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("arweave")]),e._v(": default to arweave.net ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/84c9653be1fb92f8ed15da689d65ff19e5733ba4",target:"_blank",rel:"noopener noreferrer"}},[e._v("84c9653"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("axios")]),e._v(": add back axios-retry ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9aae4de1c23ca50acb613ff566e3f73c27f0ff0e",target:"_blank",rel:"noopener noreferrer"}},[e._v("9aae4de"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("errors")]),e._v(": throw AbortError on signal aborted ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/63bd39566bc4ee08504b98b82c62dd22e100bc7f",target:"_blank",rel:"noopener noreferrer"}},[e._v("63bd395"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("getContracts")]),e._v(": only implement util for now ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/6b29c2ff7773320c2b6d16677826d59bd515332c",target:"_blank",rel:"noopener noreferrer"}},[e._v("6b29c2f"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("gql query")]),e._v(": don't abstract the data protocol query ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f0b8f7718b777358d6b6946159f57551ea76c1e7",target:"_blank",rel:"noopener noreferrer"}},[e._v("f0b8f77"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("imports")]),e._v(": import type from base route warp-contracts ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/bf99a85d0d099cf20db9b70db1bf84f9908b51e5",target:"_blank",rel:"noopener noreferrer"}},[e._v("bf99a85"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("init")]),e._v(": allow signer to be undefined and if so return readable ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b6a05e205c60c6b8623fbac6795a1e96a7a19590",target:"_blank",rel:"noopener noreferrer"}},[e._v("b6a05e2"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("init")]),e._v(": fix type for init to allow undefined signer ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0a64ea9006571c93b4e9a26803b04d7da8ddcb9f",target:"_blank",rel:"noopener noreferrer"}},[e._v("0a64ea9"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("init")]),e._v(": remove unnecessary destructuring ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/81af1af7190f18726a20ebaaaa5712a4e815bb35",target:"_blank",rel:"noopener noreferrer"}},[e._v("81af1af"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("interface")]),e._v(": remove epochBlockHeight from interface ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b646f08e795635e4597d48d7c56419849c352a88",target:"_blank",rel:"noopener noreferrer"}},[e._v("b646f08"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(":remove DataItem from WriteInteractionResult ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/eadb1a1d61985caf1326c32d1205d3e8db309374",target:"_blank",rel:"noopener noreferrer"}},[e._v("eadb1a1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(": use gql node interface for dataProtocolTransaction ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/79cebd90b930829b740bed058f7cfe0da3b7799e",target:"_blank",rel:"noopener noreferrer"}},[e._v("79cebd9"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("warp")]),e._v(": ensure contract init on read interactions ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/bc3d1b84f99cf3341cea42641b58b792434ac405",target:"_blank",rel:"noopener noreferrer"}},[e._v("bc3d1b8"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h3",{attrs:{id:"features-5"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#features-5"}},[e._v("#")]),e._v(" Features")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("getContracts")]),e._v(": add get contracts on network specific providers like WarpContract ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/603d36edd130d6b0410fa7199450ec91d7b4c821",target:"_blank",rel:"noopener noreferrer"}},[e._v("603d36e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("gql util")]),e._v(": add smartweave gql utils ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5ea3aaba1a5466741faa6e3b39d5908d25d37d49",target:"_blank",rel:"noopener noreferrer"}},[e._v("5ea3aab"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("write")]),e._v(": add tags support to write interactions on warp-contract and saveObservations ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/46eb4c91ba7c56cbeefde3b4fc2a522fda5fda1d",target:"_blank",rel:"noopener noreferrer"}},[e._v("46eb4c9"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-0-8-2024-05-29"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-0-8-2024-05-29"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.0.7...v1.0.8",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.0.8"),r("OutboundLink")],1),e._v(" (2024-05-29)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-11"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-11"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("api")]),e._v(": add getPriceForInteration api to ario contract ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/3b8083c173bd35f7332c68dc094b092adedaf8e7",target:"_blank",rel:"noopener noreferrer"}},[e._v("3b8083c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("bundle")]),e._v(": minify web bundle ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9266676cc6cc26cc6829ef902329879e6f179fc4",target:"_blank",rel:"noopener noreferrer"}},[e._v("9266676"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("api")]),e._v(": use function map for method name ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/439ec1f649c2f54d6e1516ec4e7af5e8a080c2ed",target:"_blank",rel:"noopener noreferrer"}},[e._v("439ec1f"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("reserved")]),e._v(": add reserved arns name get methods ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ad203ef22402851d28643630243716465b2ce030",target:"_blank",rel:"noopener noreferrer"}},[e._v("ad203ef"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer")]),e._v(": check if method is property of signer before using ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c52783c86bfa4019bc565dd457d7f14defdd1129",target:"_blank",rel:"noopener noreferrer"}},[e._v("c52783c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer")]),e._v(": modify signer to assume the signer type based on public key being undefined ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b775c9672ad68ac987bf37ec1cf0d7c625c9c426",target:"_blank",rel:"noopener noreferrer"}},[e._v("b775c96"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("test")]),e._v(": add dockerfile for running tests in certain node environments ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/86cf2ad51d09e88c13bdd0ba0e8a3a2b23b9d395",target:"_blank",rel:"noopener noreferrer"}},[e._v("86cf2ad"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-0-7-2024-05-23"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-0-7-2024-05-23"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.0.6...v1.0.7",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.0.7"),r("OutboundLink")],1),e._v(" (2024-05-23)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-12"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-12"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("contract")]),e._v(": add extendLease and increaseUndernameSupport apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1b13b5e7e24259fbd2762848e6066822af51cecd",target:"_blank",rel:"noopener noreferrer"}},[e._v("1b13b5e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(": fix the AtLeastOne type ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ffd0869949814196817d0ffb14fe0cf2be2ad298",target:"_blank",rel:"noopener noreferrer"}},[e._v("ffd0869"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("deps")]),e._v(": force arweavve to 1.15.1 ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/244859865b986a4c48b6446fc41230039cc5fcc0",target:"_blank",rel:"noopener noreferrer"}},[e._v("2448598"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contract")]),e._v(": make params required - properties and note ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/89db674a187dffc83413ac1ac3922ca78ae3f88d",target:"_blank",rel:"noopener noreferrer"}},[e._v("89db674"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(": update tests and use overwrite type to allow mIOtoken for certain paramaters ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/badcece5ba33b3e26448988ae1aee88e706c9da5",target:"_blank",rel:"noopener noreferrer"}},[e._v("badcece"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("api")]),e._v(": change to increaseUndernameLimit ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9b72c1ed261ecae43fa4c0cd3e00ddb61e6e7ee5",target:"_blank",rel:"noopener noreferrer"}},[e._v("9b72c1e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("docs")]),e._v(": update ario apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4af08626abfe4cd16f6c4b56696e19c7803e7dc6",target:"_blank",rel:"noopener noreferrer"}},[e._v("4af0862"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests")]),e._v(": update extend test util to include a test domain ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e959b7cc3d642651c0313529ad47343e3ff2c69d",target:"_blank",rel:"noopener noreferrer"}},[e._v("e959b7c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("token")]),e._v(": add mIO and IO token classes to exports ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f47f7d5c251973058866340a6bc2baddbf973ecf",target:"_blank",rel:"noopener noreferrer"}},[e._v("f47f7d5"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(": add delegated gateway type ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c87749660d2da62e6b996a9f034ce12fb702d93b",target:"_blank",rel:"noopener noreferrer"}},[e._v("c877496"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(": export the token types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/dfc83ae74a110dd06ddab16d5f88d192e4c0c5ad",target:"_blank",rel:"noopener noreferrer"}},[e._v("dfc83ae"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(": remove visible types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/6ab1fc3284d35fdd8f70a1fa1ac5cb7965878a51",target:"_blank",rel:"noopener noreferrer"}},[e._v("6ab1fc3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(": update Gateway delegates type to use the new GatewayDelegate ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ac7e924f24ba6133b2917de8416c37bf6560cdd4",target:"_blank",rel:"noopener noreferrer"}},[e._v("ac7e924"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("warp")]),e._v(": bump warp version ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/db7344d269968a1f4a287eb2c2d503e0045fcf5e",target:"_blank",rel:"noopener noreferrer"}},[e._v("db7344d"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-0-6-2024-05-07"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-0-6-2024-05-07"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.0.5...v1.0.6",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.0.6"),r("OutboundLink")],1),e._v(" (2024-05-07)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-13"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-13"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("warp")]),e._v(": bump warp to fix AbortError issue on warp imports for web ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c9a561395da9cd0e04cc9320979c68f93ee99c0a",target:"_blank",rel:"noopener noreferrer"}},[e._v("c9a5613"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-0-5-2024-05-02"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-0-5-2024-05-02"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.0.4...v1.0.5",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.0.5"),r("OutboundLink")],1),e._v(" (2024-05-02)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-14"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-14"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("cjs:")]),e._v(" provide path alias for warp in cjs export ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7f9bf9a6c8937e855d6b56f81f367b596dfca166",target:"_blank",rel:"noopener noreferrer"}},[e._v("7f9bf9a"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("logger:")]),e._v(" replace winston with bunyan ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0488f7529e25046d902ac88b11485a55bb246854",target:"_blank",rel:"noopener noreferrer"}},[e._v("0488f75"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("util:")]),e._v(" add FQDN regex that matches ArNS contract ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e6d7396decdb4997aa121f31ae7ad87455747191",target:"_blank",rel:"noopener noreferrer"}},[e._v("e6d7396"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("utils:")]),e._v(" manally conver from b64 to b64url to avoid web polyfill issues ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/766035c1a319e2c2567cf2a47bda3a48f5294d2c",target:"_blank",rel:"noopener noreferrer"}},[e._v("766035c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("utils:")]),e._v(" use base64 for fromB64url util ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/42302ef5124aa28fc438a9b865fd901f2ed3df4d",target:"_blank",rel:"noopener noreferrer"}},[e._v("42302ef"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("warp-contract:")]),e._v(" correctly throw error in write interaction ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c2368dd5ef1c78fa52ef1eef3198a4a035411bea",target:"_blank",rel:"noopener noreferrer"}},[e._v("c2368dd"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-0-4-2024-04-30"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-0-4-2024-04-30"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.0.3...v1.0.4",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.0.4"),r("OutboundLink")],1),e._v(" (2024-04-30)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-15"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-15"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("ario:")]),e._v(" update joinNetwork to accept observerWallet param ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/6a32dd1d6291fc524a5c8ed88fc1bbe8c614a1e2",target:"_blank",rel:"noopener noreferrer"}},[e._v("6a32dd1"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-0-3-2024-04-26"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-0-3-2024-04-26"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.0.2...v1.0.3",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.0.3"),r("OutboundLink")],1),e._v(" (2024-04-26)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-16"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-16"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("signer:")]),e._v(" set owner before signing data ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0b558f53b4b38dfea00629fd733462654801693c",target:"_blank",rel:"noopener noreferrer"}},[e._v("0b558f5"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-0-2-2024-04-25"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-0-2-2024-04-25"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.0.1...v1.0.2",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.0.2"),r("OutboundLink")],1),e._v(" (2024-04-25)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-17"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-17"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("arweave:")]),e._v(" default to the arweave node import to avoid issues with browser environments ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/fc8c26e3c33b27054ad69d6a406139d73283344f",target:"_blank",rel:"noopener noreferrer"}},[e._v("fc8c26e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("cacheurl:")]),e._v(" use default cache url in warpcontract ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a676a3c952e9416f89b703519fb13b2d8671b82a",target:"_blank",rel:"noopener noreferrer"}},[e._v("a676a3c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("init:")]),e._v(" cleanup init overload methods and tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/fa328d26c7654221176dd57bda88ce56639048b6",target:"_blank",rel:"noopener noreferrer"}},[e._v("fa328d2"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("lint:")]),e._v(" address lint issue in ArIOWriteable ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4a3ee893bc1121c7ed84108fa476d5a4308e0283",target:"_blank",rel:"noopener noreferrer"}},[e._v("4a3ee89"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tsconfig:")]),e._v(" modify some tsconfig settings to get isolated configs for web/cjs/esm ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/46b7acc9bbe7cf52ddf3ed7d7e9399332b463fe5",target:"_blank",rel:"noopener noreferrer"}},[e._v("46b7acc"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("typeguards:")]),e._v(" make type guards accept unknowns ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7f285bb73bebb384a0c20aafabc55e1fca76e34b",target:"_blank",rel:"noopener noreferrer"}},[e._v("7f285bb"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" use generic types and modify the requirements for init functions ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9350f781dcadf481ebce7558cdecd6d27d43cc0c",target:"_blank",rel:"noopener noreferrer"}},[e._v("9350f78"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("utils:")]),e._v(" add writeInteraction types and update base64url logic ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4f5476b093a303ffb68a7c26dad7b413334556ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("4f5476b"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-0-1-2024-04-23"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-0-1-2024-04-23"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.0.0...v1.0.1",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.0.1"),r("OutboundLink")],1),e._v(" (2024-04-23)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-18"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-18"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("docs:")]),e._v(" improve README docs interface documentation for ArIO clients ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b0da48c77718020f79dc56fe04ca49a11f018fa6",target:"_blank",rel:"noopener noreferrer"}},[e._v("b0da48c"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-0-0-2024-04-23"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-0-0-2024-04-23"}},[e._v("#")]),e._v(" 1.0.0 (2024-04-23)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-19"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-19"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("actions:")]),e._v(" bump node setup action ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4eb49cda331cfef516639435e73dde2e90f2e05c",target:"_blank",rel:"noopener noreferrer"}},[e._v("4eb49cd"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("actions:")]),e._v(" freeze lockfile ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/dba7313f42c8cf0053f90327ad2c14ec5bd4d4d7",target:"_blank",rel:"noopener noreferrer"}},[e._v("dba7313"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contract")]),e._v("add cache config in ario constructor ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1f3c0baef2831d12d14d20e1ac16d9b0e8f0c978",target:"_blank",rel:"noopener noreferrer"}},[e._v("1f3c0ba"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant:")]),e._v(" add ant contract to exports ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a2ff57bc1b6f77dcf9f3ace1fd3b346069aec6b4",target:"_blank",rel:"noopener noreferrer"}},[e._v("a2ff57b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant:")]),e._v(" add signer to ant test ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4581b8d461e57f4769befe5f650e5fe4e94bbc09",target:"_blank",rel:"noopener noreferrer"}},[e._v("4581b8d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant:")]),e._v(" default evaluation options for ant apis that do not take an… ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/25",target:"_blank",rel:"noopener noreferrer"}},[e._v("#25"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0c8b55ddbc5019f365af43389524af5bd733d0c9",target:"_blank",rel:"noopener noreferrer"}},[e._v("0c8b55d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant:")]),e._v(" default evaluation options for ant apis that do not take another parameter ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7c590334f6f99998839fecc78505e41931c80045",target:"_blank",rel:"noopener noreferrer"}},[e._v("7c59033"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant:")]),e._v(" default evaluation options for apis that do not require them ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/72b57d5626cbcda0931fd5f0b88bf113fbb05066",target:"_blank",rel:"noopener noreferrer"}},[e._v("72b57d5"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant:")]),e._v(" fix API for getRecords ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c714aa3563580c19427d55d6938893665ecc3ea2",target:"_blank",rel:"noopener noreferrer"}},[e._v("c714aa3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("apis:")]),e._v(" remove epoch from distributions and observations ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7b2d2799d534378183122ef986fc3bd75755558e",target:"_blank",rel:"noopener noreferrer"}},[e._v("7b2d279"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("arbundle version:")]),e._v(" pin version ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/35ffab6fbb9a2209391bb5f10120fb9a9c91b0aa",target:"_blank",rel:"noopener noreferrer"}},[e._v("35ffab6"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("arbundles:")]),e._v(" update arbundles import ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f02d83f4766a92be930a7c51e23f1f63b5692224",target:"_blank",rel:"noopener noreferrer"}},[e._v("f02d83f"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ario:")]),e._v(" add cache config in ario constructor ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/11",target:"_blank",rel:"noopener noreferrer"}},[e._v("#11"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ecb279d8a5d4381ecf29e8e3b94615ab7ae127aa",target:"_blank",rel:"noopener noreferrer"}},[e._v("ecb279d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ario:")]),e._v(" formatting ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c61570ac609566d294d6c42b97ba65b91ef81d9c",target:"_blank",rel:"noopener noreferrer"}},[e._v("c61570a"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ario:")]),e._v(" make state provider nullable and default to remote arns-service provider ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/fa1cb728edc9ec072aa3c12595a3e5c93d84ca67",target:"_blank",rel:"noopener noreferrer"}},[e._v("fa1cb72"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ario:")]),e._v(" re-add contract default config ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2296cc3e152c136e2df45481340a625a80a0be3f",target:"_blank",rel:"noopener noreferrer"}},[e._v("2296cc3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ario:")]),e._v(" remove unused cache property ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7f2d02eb3da96cea024ca2355668d5354dbeb767",target:"_blank",rel:"noopener noreferrer"}},[e._v("7f2d02e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("build:")]),e._v(" add setImmediate polyfill for web only ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ad36776795348a32941d2b4e833ed00da05a476f",target:"_blank",rel:"noopener noreferrer"}},[e._v("ad36776"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("build:")]),e._v(" remove redundant exported type ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/134319b8707cd479dc91d6832bf078bdb5c5e886",target:"_blank",rel:"noopener noreferrer"}},[e._v("134319b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("cache:")]),e._v(" remove cache folder ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2ac942742017344e1d8c06883449453c88bfa155",target:"_blank",rel:"noopener noreferrer"}},[e._v("2ac9427"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("cacheURL:")]),e._v(" update ario cache url setting pattern to use custom url appropriately ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c76e67dd8ecb7014cd441e7284df389e06ea5cc0",target:"_blank",rel:"noopener noreferrer"}},[e._v("c76e67d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("cache:")]),e._v(" validate arweave id before setting it ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5ba1175b63b28e86f2b08a0de657a25546f46688",target:"_blank",rel:"noopener noreferrer"}},[e._v("5ba1175"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("casing:")]),e._v(" revert to lower case casing ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b5da0ab78a965829951dbed7f4fcc5087b813271",target:"_blank",rel:"noopener noreferrer"}},[e._v("b5da0ab"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("comments:")]),e._v(" make class logger private, remove comments ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7483246113d5b3b424f8450ea1f1c5e0d036618b",target:"_blank",rel:"noopener noreferrer"}},[e._v("7483246"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("connect:")]),e._v(" add init static function on ario class to create interaction classes ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/765f39c5816b35c41b43fdeddf765b9b50845b9a",target:"_blank",rel:"noopener noreferrer"}},[e._v("765f39c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contract configuration:")]),e._v(" return cache url as well ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b4a7bc3960be0532ec7cdedf5875128f11f60672",target:"_blank",rel:"noopener noreferrer"}},[e._v("b4a7bc3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contract functions:")]),e._v(" correct contract function names ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ad9bc5625b582d5714624c491904e68380f10ae3",target:"_blank",rel:"noopener noreferrer"}},[e._v("ad9bc56"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contracts:")]),e._v(" add configuration view method and update types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4fae4a2688f96388d5b53d8fe292ff7942af0c57",target:"_blank",rel:"noopener noreferrer"}},[e._v("4fae4a2"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contracts:")]),e._v(" remove write method and type from remote contract ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/740d8b88a5486f90cd61d024f8fdd4e6b9a370a0",target:"_blank",rel:"noopener noreferrer"}},[e._v("740d8b8"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contracttxid:")]),e._v(" make contractTxID require in remote state cache instance ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/dc82d217c66ad8deff4ea6c3a9d7304f6e65b4d9",target:"_blank",rel:"noopener noreferrer"}},[e._v("dc82d21"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contracttxid:")]),e._v(" make contractTxID required in remote state cache instance ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/10",target:"_blank",rel:"noopener noreferrer"}},[e._v("#10"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/bf651bb11006eaf5eea586ff1feb0bb2644db504",target:"_blank",rel:"noopener noreferrer"}},[e._v("bf651bb"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ctrl flow:")]),e._v(" remove else from control flow ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4b3c4c2058767b05199ac75c44c4684a66149bb9",target:"_blank",rel:"noopener noreferrer"}},[e._v("4b3c4c2"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("deps:")]),e._v(" pin arweave ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d39391c19dc7d1396b735cd87920a2dc224f94e4",target:"_blank",rel:"noopener noreferrer"}},[e._v("d39391c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("deps:")]),e._v(" remove axios-retry, will implement later ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0218e95fc2c2b1682010cf1841e3a2c717756c1d",target:"_blank",rel:"noopener noreferrer"}},[e._v("0218e95"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("deps:")]),e._v(" remove extra crypto-browserify ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9b4289809eacba3cd870adddb2bd73def576d50a",target:"_blank",rel:"noopener noreferrer"}},[e._v("9b42898"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("deps:")]),e._v(" remove warp-contracts-deploy from deps ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9d4f9faa860789ced003dc3b6d36c4db99962b8e",target:"_blank",rel:"noopener noreferrer"}},[e._v("9d4f9fa"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("docs:")]),e._v(" remove docs folder ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/47e84037357fd69f9af18b1e9b84286257b49331",target:"_blank",rel:"noopener noreferrer"}},[e._v("47e8403"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("drywrite:")]),e._v(" throw on bad drywrite and continue if successful ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5052c0a4deb06ac938d898d990e425dcc8ac6443",target:"_blank",rel:"noopener noreferrer"}},[e._v("5052c0a"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("eslintignore:")]),e._v(" remove old file names ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/415c1632fc1d363894d17d4a335c7a0bbf78f3d8",target:"_blank",rel:"noopener noreferrer"}},[e._v("415c163"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("eslint:")]),e._v(" remove eslint comments and use this signer ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/32530eb777367b71bfba16bd97dcf6d6a75de791",target:"_blank",rel:"noopener noreferrer"}},[e._v("32530eb"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("esm:")]),e._v(" add polyfills for crypto ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/dd8fbfe5b373ba95ec406c1642e81ef520cdeddb",target:"_blank",rel:"noopener noreferrer"}},[e._v("dd8fbfe"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("esm:")]),e._v(" add polyfills for crypto ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/27",target:"_blank",rel:"noopener noreferrer"}},[e._v("#27"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/553822cab7ec8652efbc9545ef3c20c0312c38f0",target:"_blank",rel:"noopener noreferrer"}},[e._v("553822c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("example web:")]),e._v(" update ario instatiation ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/77c68429af5e5a50f4ed2e8bd2bf7fdc67b8a2a6",target:"_blank",rel:"noopener noreferrer"}},[e._v("77c6842"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("example:")]),e._v(" escape quotes in packagejson for example package json ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/fb47de0336b33405d81992cfce8e9993d2531f8b",target:"_blank",rel:"noopener noreferrer"}},[e._v("fb47de0"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("example:")]),e._v(" simplify example and remove unused method on remote cache ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/81637f89c2eab304d7ccf11d1eac9503aa3d7592",target:"_blank",rel:"noopener noreferrer"}},[e._v("81637f8"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("examples:")]),e._v(" update comments and fix package.json ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/db7140b815be1ea6fe1b270827fc4afb61707546",target:"_blank",rel:"noopener noreferrer"}},[e._v("db7140b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("examples:")]),e._v(" update examples to use devnet ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/cc037ac5a3df2e76375679b8b14723c3b5d51fe2",target:"_blank",rel:"noopener noreferrer"}},[e._v("cc037ac"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("examples:")]),e._v(" update examples with records methods, and balance methods ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a2d2a02befd64cff500932fe609b29d79ddf096c",target:"_blank",rel:"noopener noreferrer"}},[e._v("a2d2a02"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("exports:")]),e._v(" add arweavesigner and arconnectsigner to exports, clean up docs ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c7860ed40d19ac43c091b6afd52db0402537e7ee",target:"_blank",rel:"noopener noreferrer"}},[e._v("c7860ed"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("exports:")]),e._v(" update exports in indices ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f79443732909fbc4c81d78957ca306bfb538caa3",target:"_blank",rel:"noopener noreferrer"}},[e._v("f794437"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("exports:")]),e._v(" update package exports to have index in src folder ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2cce9e31efb2fd0bf8734d930deda301838da8d9",target:"_blank",rel:"noopener noreferrer"}},[e._v("2cce9e3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("files:")]),e._v(" clean git cache of duplicate casing ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e9eaa2d93122bad5008010c13710b5fa8bcd7533",target:"_blank",rel:"noopener noreferrer"}},[e._v("e9eaa2d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("filters:")]),e._v(" punt filters ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1c23cb3cf2ce8adc594fd2ba699e5ac32f4ef7b6",target:"_blank",rel:"noopener noreferrer"}},[e._v("1c23cb3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("fixture:")]),e._v(" add type to arns state fixture ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5bcac3211d78e08ead3e14da6e06aa41e9a65598",target:"_blank",rel:"noopener noreferrer"}},[e._v("5bcac32"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("formating:")]),e._v(" format ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/3f30f772a7571b9958f8a202128abd483da372b5",target:"_blank",rel:"noopener noreferrer"}},[e._v("3f30f77"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("gar write:")]),e._v(" fix types and flow on gar write ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f5e77741107b82df24c293a1cde37a4a907e1f4c",target:"_blank",rel:"noopener noreferrer"}},[e._v("f5e7774"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("gateway:")]),e._v(" update gateway settings to support autostake ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/82c68408fb562146053b9180dacc53fb490743ea",target:"_blank",rel:"noopener noreferrer"}},[e._v("82c6840"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("generics:")]),e._v(" use named generic ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4b647f076b6cd3f4676f0bf7dbf6a5c020214e63",target:"_blank",rel:"noopener noreferrer"}},[e._v("4b647f0"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("gitignore:")]),e._v(" remove cache from gitignore ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2867abcdba2fc4a4cece01c6ed3346065a54e2eb",target:"_blank",rel:"noopener noreferrer"}},[e._v("2867abc"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("git:")]),e._v(" test fix with file casing issue ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c3611ee8fe9ef75ef2d91aa8bade99fee221c69a",target:"_blank",rel:"noopener noreferrer"}},[e._v("c3611ee"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("headers:")]),e._v(" use source-version for header ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2b26d888e176ed745fbc06fbe427993046d8cb18",target:"_blank",rel:"noopener noreferrer"}},[e._v("2b26d88"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("http:")]),e._v(" add headers sdk headers to http config ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/94810edb03272daccfbf05fb5625ba4aa3ee06f4",target:"_blank",rel:"noopener noreferrer"}},[e._v("94810ed"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("husky:")]),e._v(" add commit hooks ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/885ce68c3b734ac95e1293078ce835333bc45d9f",target:"_blank",rel:"noopener noreferrer"}},[e._v("885ce68"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("imports:")]),e._v(" update to use indexed imports from warp ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/124256835e0137fb1332e0e7a670ccfaad8ef228",target:"_blank",rel:"noopener noreferrer"}},[e._v("1242568"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("indentation:")]),e._v(" fix indentation in examples ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a266731e14b480d04e3be1fa558de368f366682d",target:"_blank",rel:"noopener noreferrer"}},[e._v("a266731"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("interface:")]),e._v(" removed filters and added base records types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/849834db2c88ffc362c54f9844f936a1c8ab23dc",target:"_blank",rel:"noopener noreferrer"}},[e._v("849834d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("interface:")]),e._v(" rename interface to ContractCache ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2a0a76546326d2a47f5cef1dde3c105f4deaad50",target:"_blank",rel:"noopener noreferrer"}},[e._v("2a0a765"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("jest:")]),e._v(" remove extra config ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/014fbde09f4c533c957d6372345616c13df2a29d",target:"_blank",rel:"noopener noreferrer"}},[e._v("014fbde"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("lint:")]),e._v(" disable no-any warning certain types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/de5f10874e6bf2deaca89d35ac11e1a11a64ad59",target:"_blank",rel:"noopener noreferrer"}},[e._v("de5f108"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("lint:")]),e._v(" formatting ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/21224e2f47605d1959853c99ddb1c8a3df6a0d7d",target:"_blank",rel:"noopener noreferrer"}},[e._v("21224e2"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("logger, errors, http:")]),e._v(" Updated to axios and axios-retry, added winston logger, more extensive custom error objects ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b944f4db494531a346ab025e28a8a6cd46f5d546",target:"_blank",rel:"noopener noreferrer"}},[e._v("b944f4d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("logger:")]),e._v(" remove unused logger property ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9501d1d3571980fb4e157c022e0ea0f8e60f9a0a",target:"_blank",rel:"noopener noreferrer"}},[e._v("9501d1d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("logs:")]),e._v(" removing debug logs ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f025171586e2f440ef92550ddf37c5254db86a44",target:"_blank",rel:"noopener noreferrer"}},[e._v("f025171"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("mixin:")]),e._v(" filter private methods in mixin util ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/beb8610807038a7fc51baaa266db1435781c6e8c",target:"_blank",rel:"noopener noreferrer"}},[e._v("beb8610"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("naming:")]),e._v(" change epoch to epochStartHeight ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/908971c273aaac20ab320e867ec1e790706a11f3",target:"_blank",rel:"noopener noreferrer"}},[e._v("908971c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("naming:")]),e._v(" rename getRecord[s] to getArNSRecord[s] ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/bd3d4bc25a7528ba9f093a96cf0ed33439160d27",target:"_blank",rel:"noopener noreferrer"}},[e._v("bd3d4bc"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("overloads:")]),e._v(" only accept warp contract as a contract config for ariowritable ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e3c97e9eaddc98e704a2192bcae6dfdee42f7ae6",target:"_blank",rel:"noopener noreferrer"}},[e._v("e3c97e9"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("polyfills:")]),e._v(" rollback polyfill on logger ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0cdb2f0a1e23c111b57f788f51780f98f186ec7d",target:"_blank",rel:"noopener noreferrer"}},[e._v("0cdb2f0"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("postinstall:")]),e._v(" remove husky postinstall script ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c74a13591c75271352135f8c30055623cf536ed2",target:"_blank",rel:"noopener noreferrer"}},[e._v("c74a135"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("readme:")]),e._v(" add grammar and example recs ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ecc07f7f5c89fd8fbe66d2b79db44a62285057d4",target:"_blank",rel:"noopener noreferrer"}},[e._v("ecc07f7"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("readme:")]),e._v(" condense quick start ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b35e5bd94e950255a15c1bf0ffa1bf1aa47a3395",target:"_blank",rel:"noopener noreferrer"}},[e._v("b35e5bd"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("readme:")]),e._v(" refactor api list to header tags ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/817d99b05d45caf435fdfe26065a70407f0bce56",target:"_blank",rel:"noopener noreferrer"}},[e._v("817d99b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("readme:")]),e._v(" update ant header ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/77235ce077ef4a12dfa6b403968b6ab148ebf196",target:"_blank",rel:"noopener noreferrer"}},[e._v("77235ce"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("readme:")]),e._v(" update ANT usage description ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/70c852087f75a17c494cc12719d1dc9f96da39f2",target:"_blank",rel:"noopener noreferrer"}},[e._v("70c8520"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("readme:")]),e._v(" update joinNetwork docs ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9fcf440d2ed2f71005f1e9bd3b0a7691aae90a63",target:"_blank",rel:"noopener noreferrer"}},[e._v("9fcf440"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("readme:")]),e._v(" update quick start ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a60d96a821b5e77a68b7682c5e74e5dc01ca2f28",target:"_blank",rel:"noopener noreferrer"}},[e._v("a60d96a"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("readme:")]),e._v(" update readme with default provider example ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/68a5a1697ae0c4c6797ef355f887408d72030cf8",target:"_blank",rel:"noopener noreferrer"}},[e._v("68a5a16"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("readme:")]),e._v(" update readme with examples ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d9ee23eb99d9d845098324dba77497284942f35c",target:"_blank",rel:"noopener noreferrer"}},[e._v("d9ee23e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("record records:")]),e._v(" update key to use result instead of record ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/90314dbdb91806222a7e822951a89aaeea5596ed",target:"_blank",rel:"noopener noreferrer"}},[e._v("90314db"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("records:")]),e._v(" remove contractTxId filter remove lodash shrink readme ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/50669e1e203d038dfcf3a0e30d7637122d4b4777",target:"_blank",rel:"noopener noreferrer"}},[e._v("50669e1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("records:")]),e._v(" use state endpoint to fetch records ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2f02c53d990dffe526de96e762ddbcbf1b3a8770",target:"_blank",rel:"noopener noreferrer"}},[e._v("2f02c53"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("recs:")]),e._v(" modify the interfaces for contracts and implement with warp and remote service ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/13",target:"_blank",rel:"noopener noreferrer"}},[e._v("#13"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/56ebb08616e4002a8037747dcd5e9e070dae6a0d",target:"_blank",rel:"noopener noreferrer"}},[e._v("56ebb08"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("release:")]),e._v(" remove release assets entirely ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9d5a1b3b693134062754892674428936df122c9b",target:"_blank",rel:"noopener noreferrer"}},[e._v("9d5a1b3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("release:")]),e._v(" update github release config to publish packages to github ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5534d9d6c9b86b1642668705dc0cb6c301f03d9e",target:"_blank",rel:"noopener noreferrer"}},[e._v("5534d9d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("remote:")]),e._v(" getState not properly setting evalTo in http requests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/55745c1881af9ea93a0545e1b04eaff210257802",target:"_blank",rel:"noopener noreferrer"}},[e._v("55745c1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("safety:")]),e._v(" update type safety checks ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/32eebbc21a4592384dd6fed3247f0e00292b6471",target:"_blank",rel:"noopener noreferrer"}},[e._v("32eebbc"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("setimmediate:")]),e._v(" make set immediate a build dependency as it is required by the node winston ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9292eaab29c3c955d1c981d6d22fa6e11da55500",target:"_blank",rel:"noopener noreferrer"}},[e._v("9292eaa"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" check that contract is connected before trying to write ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d352e9c7ac1038caa238df21d1165345c64d61de",target:"_blank",rel:"noopener noreferrer"}},[e._v("d352e9c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" check that contract is connected before trying to write ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/29",target:"_blank",rel:"noopener noreferrer"}},[e._v("#29"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/536a116c1cfecd1bfbe1ffc9d5fe87ab4006a81c",target:"_blank",rel:"noopener noreferrer"}},[e._v("536a116"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" fix signer in WarpContracts - update tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ea9448f3440c58811891fa37db2ceb7948b8d200",target:"_blank",rel:"noopener noreferrer"}},[e._v("ea9448f"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" fix signer in WarpContracts - update tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/32",target:"_blank",rel:"noopener noreferrer"}},[e._v("#32"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/16d69d8a996d0692b28c956d7ec7f38245ff2f6b",target:"_blank",rel:"noopener noreferrer"}},[e._v("16d69d8"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" remove jwk use, ignore web example for now ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/bc7e577e0f7f42a91ae4bbca853addf7f178a1f8",target:"_blank",rel:"noopener noreferrer"}},[e._v("bc7e577"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" remove signer, will do in other pr ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d02276dd9fa166d254eb76a45e2c6025f632c0ba",target:"_blank",rel:"noopener noreferrer"}},[e._v("d02276d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" remove use of JWK, simplify constructor ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/22",target:"_blank",rel:"noopener noreferrer"}},[e._v("#22"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d2ef5732d1ef268d9fb1420c96f520b0fcb4bedd",target:"_blank",rel:"noopener noreferrer"}},[e._v("d2ef573"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" update ANT to have signer ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c7f8eeec4c2141548d202f76934304a310b177b7",target:"_blank",rel:"noopener noreferrer"}},[e._v("c7f8eee"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("structure:")]),e._v(" update cache provider folder to be named caches ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/844c1aab722316db14167f22a397858a2c9c6bbf",target:"_blank",rel:"noopener noreferrer"}},[e._v("844c1aa"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("structure:")]),e._v(" use snake case for file and folder names ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/37f27d3b6a526a37a88ccbf7480f4bc6dc06153f",target:"_blank",rel:"noopener noreferrer"}},[e._v("37f27d3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("test warp-contract:")]),e._v(" use beforeAll to read env vars ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/95cc0194ffd9b04a0e389557ad39e53cfa87c443",target:"_blank",rel:"noopener noreferrer"}},[e._v("95cc019"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" add test cases as a const ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/845818528fc5364971738fa549173f6f019065c0",target:"_blank",rel:"noopener noreferrer"}},[e._v("8458185"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" add test for custom arIO client config ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0e6142bedaffbf86e79840d830499d4e1aacbced",target:"_blank",rel:"noopener noreferrer"}},[e._v("0e6142b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" change control flow pattern to .catch instead of trycatch ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/883de51f85f32807a62f189b00ac485ecfdcfd69",target:"_blank",rel:"noopener noreferrer"}},[e._v("883de51"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" dont make blockHeight or sortKey undefined but rather evalTo ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f76a201eb53069f611b17bfef01506143fdec080",target:"_blank",rel:"noopener noreferrer"}},[e._v("f76a201"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" instantiate new ant to connect in tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/98694156a55a5dfba2a96cb09b4f734c33ed0c64",target:"_blank",rel:"noopener noreferrer"}},[e._v("9869415"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" remove dryWrite from writeInteraction, update tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/bc1becc1597b11c80d56b21d9a7137e170b69399",target:"_blank",rel:"noopener noreferrer"}},[e._v("bc1becc"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" remove fixture and use live service for tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/30d3e8cddc1f85f19467af19d191558575351e63",target:"_blank",rel:"noopener noreferrer"}},[e._v("30d3e8c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" test 404 response ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/590dea6c6285bd8c786c02dcdbdc85fba7364fc6",target:"_blank",rel:"noopener noreferrer"}},[e._v("590dea6"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update ario test ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4208bd023c9f1026a49a5bea3a06beb51a3494b7",target:"_blank",rel:"noopener noreferrer"}},[e._v("4208bd0"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update client instantiation test to check read vs write clients ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/059653c38ed78aa305a796bcf8a18a119c83d63c",target:"_blank",rel:"noopener noreferrer"}},[e._v("059653c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update docker compose params ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a71befd8b06e18181f52ca78babe878196f3673f",target:"_blank",rel:"noopener noreferrer"}},[e._v("a71befd"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update gateways test ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1fcb3e6c52c47d5c2e9b7df32eff944ec511fec6",target:"_blank",rel:"noopener noreferrer"}},[e._v("1fcb3e6"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update stubs in tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e4bbc6e691fec0f60c0ff84c4ead9620dcc28739",target:"_blank",rel:"noopener noreferrer"}},[e._v("e4bbc6e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update test to match jest syntax ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/553bdbb2aaff0a26a0aeaa34c9ec614379d30dca",target:"_blank",rel:"noopener noreferrer"}},[e._v("553bdbb"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update tests for named prop expectation ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4ea04a735ec8c0a0c0cc8859d7bfa42bd6f9110e",target:"_blank",rel:"noopener noreferrer"}},[e._v("4ea04a7"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update tests to use younger contract, add evalParams config ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ae890c85f5fca785f88c60a751fb617b2389de61",target:"_blank",rel:"noopener noreferrer"}},[e._v("ae890c8"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update tests with constants and update types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1bdcfebae93123aa46f500ebbd9693d3e1e36ef6",target:"_blank",rel:"noopener noreferrer"}},[e._v("1bdcfeb"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update tests with new name ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2cd1b5ce18ed63c2b787d70e7e502aade26315eb",target:"_blank",rel:"noopener noreferrer"}},[e._v("2cd1b5c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update with new names on methods ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/619c193d210536a2e4ee1308805ce348298b42c8",target:"_blank",rel:"noopener noreferrer"}},[e._v("619c193"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" use angela for testing ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/10f30fe0770cb2cfef4f0a2ce18a4c5e4fe5ce77",target:"_blank",rel:"noopener noreferrer"}},[e._v("10f30fe"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" use http not https in tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/fddba1e34c9a195cb6a5cdcf3ec6f3dcbd41524c",target:"_blank",rel:"noopener noreferrer"}},[e._v("fddba1e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" use process vars as priority url ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/faab4f3ee7624828cb25a32b6ecfb655cd5c1fc5",target:"_blank",rel:"noopener noreferrer"}},[e._v("faab4f3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("test:")]),e._v(" update test to use ArweaveTransactionID class ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f6c4f8ba23a921eba281596b29dff3fece82b322",target:"_blank",rel:"noopener noreferrer"}},[e._v("f6c4f8b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tsconfig, names:")]),e._v(" reverted tsconfig to nodenext resolution, changed naming convention on provider, removed extraeneous error classes, rolled back axios-retry to match our tsconfig settings ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d412d44dc9fd71fe6a81deb37e99b8c24f6b4661",target:"_blank",rel:"noopener noreferrer"}},[e._v("d412d44"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tyeps:")]),e._v(" set types to objects rather than top level params for easier readability ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/edfd77bb01f38c21f2e96aacaea07705372fe664",target:"_blank",rel:"noopener noreferrer"}},[e._v("edfd77b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("type:")]),e._v(" rename all type implementations ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/595904509e152188eeadb07fbf57495b941a45bf",target:"_blank",rel:"noopener noreferrer"}},[e._v("5959045"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types and tests:")]),e._v(" update evalTo to allow undefined sortKey and block and test that ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a59f05c8669750b59b01ee140bcd84d91b9cfaf8",target:"_blank",rel:"noopener noreferrer"}},[e._v("a59f05c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" add @ to records ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/53601c1d08f7bf3e522f25b58e514b0c809ad195",target:"_blank",rel:"noopener noreferrer"}},[e._v("53601c1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" make props nullable on certain read apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f8ff552ed6de9516476e74e6aad92e72a8d3adb3",target:"_blank",rel:"noopener noreferrer"}},[e._v("f8ff552"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" remove any type ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5c8024261b5e13ee4f4d697b545a710b7cf136d1",target:"_blank",rel:"noopener noreferrer"}},[e._v("5c80242"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" remove any types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d8d910b9f2d0b95232ccf3c52e74f57b086df435",target:"_blank",rel:"noopener noreferrer"}},[e._v("d8d910b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" remove ArweaveTransactionID type for now ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/3adf53bd54041bc5dbc6956586bfebcfe66bd71c",target:"_blank",rel:"noopener noreferrer"}},[e._v("3adf53b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" remove unnecesssary empty defaults ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7d14edb55c7db6a949d717fe19ffe1ae87916a9d",target:"_blank",rel:"noopener noreferrer"}},[e._v("7d14edb"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" rename signer to ContractSigner ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/87d6c90b625b8bb97d68ea89d63d7a97ea894051",target:"_blank",rel:"noopener noreferrer"}},[e._v("87d6c90"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" require atleast one param to update gateway settings ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/857ebdc1b0dd39d5b12943f9b15dd0ddb9b5785e",target:"_blank",rel:"noopener noreferrer"}},[e._v("857ebdc"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" update interaction type to only use read for now ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2c02e90076bc0fe8580bef041cd7c07e65db43d9",target:"_blank",rel:"noopener noreferrer"}},[e._v("2c02e90"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" update tests, readme, and types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e9985ddada117561f8e666d133b3d573e0beef3e",target:"_blank",rel:"noopener noreferrer"}},[e._v("e9985dd"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" use partial write type ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/fa6a638ae9d69b234b264c3e510c09709fc56fd8",target:"_blank",rel:"noopener noreferrer"}},[e._v("fa6a638"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" use string instead of any ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/014a26210b2482b3aa5150b4fd37925760f39dd8",target:"_blank",rel:"noopener noreferrer"}},[e._v("014a262"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("validate id:")]),e._v(" make validator a private method ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/dce4a948e38ae0f6af3658dcb066861c766f5ed9",target:"_blank",rel:"noopener noreferrer"}},[e._v("dce4a94"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("validity util:")]),e._v(" isBlockheight check more strict ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2b28675fabb97be0cadfbc8a47241b0bcc5bd9fd",target:"_blank",rel:"noopener noreferrer"}},[e._v("2b28675"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("warp contract:")]),e._v(" added test for getting state after connecting with warp ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/060ee2c4a8bc21c345eb6ab006c3da41b29ff7d5",target:"_blank",rel:"noopener noreferrer"}},[e._v("060ee2c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("warp-contract:")]),e._v(" provide logger - update isTransaction flow ctrl - use typed props ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5f6e0a17662e43d4b2d560fcd505a07e006a308b",target:"_blank",rel:"noopener noreferrer"}},[e._v("5f6e0a1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("warp-contracts:")]),e._v(" bump warp to 1.4.38 - fixed warp exports ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/af4a20b0df97867327bdfea12f4eb1956d531352",target:"_blank",rel:"noopener noreferrer"}},[e._v("af4a20b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("winston:")]),e._v(" move the winston polyfill - this will prevent any esm based web projects from getting polyfill issues ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c8b7998db824506c1e213557e859604d903aab9c",target:"_blank",rel:"noopener noreferrer"}},[e._v("c8b7998"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("write:")]),e._v(" add dry run - sync state - abortSignal - update interface ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/970bdefaff2eea93e3c0783dccafd6276a80ea03",target:"_blank",rel:"noopener noreferrer"}},[e._v("970bdef"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("write:")]),e._v(" update utils - change error flow - update arweave constructor props ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0a81c920e82c03beba7dad41c189c00e128ced10",target:"_blank",rel:"noopener noreferrer"}},[e._v("0a81c92"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("write:")]),e._v(" update write methods on warp ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9c0540b1f98af68ada417e1e052d282a1c93fb07",target:"_blank",rel:"noopener noreferrer"}},[e._v("9c0540b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("yarn:")]),e._v(" update lockfile ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/fd5e0ee013a40568e88a06ff4ac1e630559a68c0",target:"_blank",rel:"noopener noreferrer"}},[e._v("fd5e0ee"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h3",{attrs:{id:"features-6"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#features-6"}},[e._v("#")]),e._v(" Features")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("ant:")]),e._v(" add ANT read interface ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c941c96cd201983270cc9e04c0fcaa5b4dc3b798",target:"_blank",rel:"noopener noreferrer"}},[e._v("c941c96"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant:")]),e._v(" create ant contract class for interacting with ant contracts ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/6eb7ef5ed7f0ec3e64e0c18e97a708d7c528ff21",target:"_blank",rel:"noopener noreferrer"}},[e._v("6eb7ef5"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ants:")]),e._v(" add readable-writable framework to the ant client and implement write methods ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/3019f53953d362629a34c6282012b58de1171b23",target:"_blank",rel:"noopener noreferrer"}},[e._v("3019f53"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ario contract:")]),e._v(" add distributions and observation apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/21e38d1229e640a1cec685f491b1b07b84ee6a56",target:"_blank",rel:"noopener noreferrer"}},[e._v("21e38d1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("arioContract:")]),e._v(" update ArIO interface and ArIOContract interface ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5d87e2e9b707e30caaf960585e3300efbab420bb",target:"_blank",rel:"noopener noreferrer"}},[e._v("5d87e2e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("auctions:")]),e._v(" add auctions apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/faf08c51f3b499e158e96cc2a0b97a06a20c6f8c",target:"_blank",rel:"noopener noreferrer"}},[e._v("faf08c5"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contract:")]),e._v(" add distribution, observations apis, update readme and examples ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0208317c211d659afbbc55d06345a0c33cd076eb",target:"_blank",rel:"noopener noreferrer"}},[e._v("0208317"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contract:")]),e._v(" create new contract classes that impelement both warp and remote cache for ant contract and ar-io contracts ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/855da2d1ce53ade61025e9a2513ac706e362e0b1",target:"_blank",rel:"noopener noreferrer"}},[e._v("855da2d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("first issue:")]),e._v(" setup examples, readme, and initial gateways provider ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5a9e2320219b8b61dec1cf8d0ecb74562b9ebed0",target:"_blank",rel:"noopener noreferrer"}},[e._v("5a9e232"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("gar methods:")]),e._v(" add gar write methods to the ario client ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e01b08beccb64112ae4ec333e9a5a2ea872b816f",target:"_blank",rel:"noopener noreferrer"}},[e._v("e01b08b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("inital providers:")]),e._v(" scaffold initial providers ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4949514a334eda107c87c77bef87ec839144c99f",target:"_blank",rel:"noopener noreferrer"}},[e._v("4949514"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("io transfer:")]),e._v(" add transfer api to ario writable client ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0d37623bdf0a460242ac8d2b6f819f686fb2cbce",target:"_blank",rel:"noopener noreferrer"}},[e._v("0d37623"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("observerations:")]),e._v(" add "),r("code",[e._v("saveObservations")]),e._v(" write interaction ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/8dd977c55091b038c6b4a1b30fbeed5bc816f433",target:"_blank",rel:"noopener noreferrer"}},[e._v("8dd977c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("observers:")]),e._v(" add API for fetching prescribed observers ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a18e1306b185143b3b44416da168bf0610418d9c",target:"_blank",rel:"noopener noreferrer"}},[e._v("a18e130"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("observers:")]),e._v(" add API for fetching prescribed observers ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/17",target:"_blank",rel:"noopener noreferrer"}},[e._v("#17"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/17ce6de4aea61e5f97c999cdc96011dd911f7ad6",target:"_blank",rel:"noopener noreferrer"}},[e._v("17ce6de"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("PE-5742:")]),e._v(" add records api to arns remote cache ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/8",target:"_blank",rel:"noopener noreferrer"}},[e._v("#8"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c46cd3968efe31f9dac3c6368b073b97adfaeb2a",target:"_blank",rel:"noopener noreferrer"}},[e._v("c46cd39"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("PE-5751:")]),e._v(" add blockheight and sortkey eval filters ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/12",target:"_blank",rel:"noopener noreferrer"}},[e._v("#12"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/832a1ad20f06407f21d87ad38111f1bae794efbc",target:"_blank",rel:"noopener noreferrer"}},[e._v("832a1ad"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("PE-5758:")]),e._v(" add signer to ario class ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/20",target:"_blank",rel:"noopener noreferrer"}},[e._v("#20"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1b820774104d90f2bcbec9a18c8fbca891616f7b",target:"_blank",rel:"noopener noreferrer"}},[e._v("1b82077"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("PE-5759:")]),e._v(" observations and distributions apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/16",target:"_blank",rel:"noopener noreferrer"}},[e._v("#16"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/dded3619784561b416297855724fc5924a1cd1d0",target:"_blank",rel:"noopener noreferrer"}},[e._v("dded361"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("PE-5773:")]),e._v(" add auctions read apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/18",target:"_blank",rel:"noopener noreferrer"}},[e._v("#18"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e0c6fca49788b361478aca85d3dae3ca96f6aa97",target:"_blank",rel:"noopener noreferrer"}},[e._v("e0c6fca"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("PE-5800:")]),e._v(" add epoch apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/48ee4ba04e162c09e0d75c0194119fa9c76649d4",target:"_blank",rel:"noopener noreferrer"}},[e._v("48ee4ba"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("PE-5800:")]),e._v(" epoch apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/15",target:"_blank",rel:"noopener noreferrer"}},[e._v("#15"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/70563b18f07a31d001cc4610297182860536c2df",target:"_blank",rel:"noopener noreferrer"}},[e._v("70563b1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("PE-5825:")]),e._v(" ANT read interface ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/19",target:"_blank",rel:"noopener noreferrer"}},[e._v("#19"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/6a0c47754689071d292eaebfa7b3af6c8e851fa4",target:"_blank",rel:"noopener noreferrer"}},[e._v("6a0c477"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("records:")]),e._v(" add records api to arns remote cache ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1b7f54fb04d8fe390345eb47a3402744e2293709",target:"_blank",rel:"noopener noreferrer"}},[e._v("1b7f54f"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" add arweave signer to ario class ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7e08097e9abccf4a57673209751b2cd2fc25b746",target:"_blank",rel:"noopener noreferrer"}},[e._v("7e08097"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("write:")]),e._v(" add write interface and base implementation on warp-contract ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/6dfc969a23dd965fe169edeacf117aed8e59d642",target:"_blank",rel:"noopener noreferrer"}},[e._v("6dfc969"),r("OutboundLink")],1),e._v(")")])])])}),[],!1,null,null,null);r.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[65],{365:function(e,r,t){"use strict";t.r(r);var a=t(10),o=Object(a.a)({},(function(){var e=this,r=e._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"ar-io-sdk-changelog"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#ar-io-sdk-changelog"}},[e._v("#")]),e._v(" ar.io SDK Changelog")]),e._v(" "),r("h2",{attrs:{id:"overview"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),r("p",[e._v("Welcome to the documentation page for the ar.io SDK release notes. Here, you will find detailed information about each version of the ar.io SDK, including the enhancements, bug fixes, and any other changes introduced in every release. This page serves as a comprehensive resource to keep you informed about the latest developments and updates in the ar.io SDK. For those interested in exploring the source code, each release's code is readily accessible at our GitHub repository: ar.io SDK "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/blob/main/CHANGELOG.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("change logs"),r("OutboundLink")],1),e._v(". Stay updated with the continuous improvements and advancements in the ar.io SDK by referring to this page for all release-related information.")]),e._v(" "),r("h2",{attrs:{id:"_2-2-0-2024-08-30"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_2-2-0-2024-08-30"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v2.1.0...v2.2.0",target:"_blank",rel:"noopener noreferrer"}},[e._v("2.2.0"),r("OutboundLink")],1),e._v(" (2024-08-30)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("logger:")]),e._v(" permit logger as argument for typeguard util and default it ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/45df6267df3260744201aa86ced572e5da842aae",target:"_blank",rel:"noopener noreferrer"}},[e._v("45df626"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("register:")]),e._v(" update spawn ant to register at end of spawn ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4320c803bec96eedf4fe4bd5456a5eaa4ac9ae88",target:"_blank",rel:"noopener noreferrer"}},[e._v("4320c80"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" add typeguard util for aoSigner ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0d7f210ac3ab44a1c7ea296936917e5297878e48",target:"_blank",rel:"noopener noreferrer"}},[e._v("0d7f210"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signing:")]),e._v(" add aosigner to contract signer ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/3b0495a3ca4420c61cf4f72c7eb451777cbaf16d",target:"_blank",rel:"noopener noreferrer"}},[e._v("3b0495a"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" dont send messages to ao in e2e tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e7108dafb7602e29833b0120c91cff73b022d31f",target:"_blank",rel:"noopener noreferrer"}},[e._v("e7108da"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" reconfigure test structure ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1872a262b654d72c779c2607ed454c5ae8271e87",target:"_blank",rel:"noopener noreferrer"}},[e._v("1872a26"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" use test-wallet fixture in tests instead of generating anew each time ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/27a5dc25cd6bbe75736187280d3f511235dfa0b0",target:"_blank",rel:"noopener noreferrer"}},[e._v("27a5dc2"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("typeguard:")]),e._v(" return true or false in typeguard and log the error ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4b851c5bd904f66bd88efc67cdc239a1300c7ecf",target:"_blank",rel:"noopener noreferrer"}},[e._v("4b851c5"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" update types for epoch distributions ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5aedf5077a68faec8d86281a401ab2f4d6daf142",target:"_blank",rel:"noopener noreferrer"}},[e._v("5aedf50"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("util:")]),e._v(" use ANTRegistry class for registering ant on spawn instead of aoconnect ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/350112d7fb29c180231b69ede5c4c2f94a60afa3",target:"_blank",rel:"noopener noreferrer"}},[e._v("350112d"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h3",{attrs:{id:"features"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[e._v("#")]),e._v(" Features")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("ant id:")]),e._v(" update lua ant id to latest ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/968c30e9b3851c0eed1bb7e152e78835d558243b",target:"_blank",rel:"noopener noreferrer"}},[e._v("968c30e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("util:")]),e._v(" add AoAntState typeguard util ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c6f457f88f7b17af615ffacc593cc01b77230257",target:"_blank",rel:"noopener noreferrer"}},[e._v("c6f457f"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_2-1-0-2024-08-07"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_2-1-0-2024-08-07"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v2.0.2...v2.1.0",target:"_blank",rel:"noopener noreferrer"}},[e._v("2.1.0"),r("OutboundLink")],1),e._v(" (2024-08-07)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-2"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-2"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("actions:")]),e._v(" ignore engines in action ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7f6f87d442dca7970ee495f2b4286049e63cbcff",target:"_blank",rel:"noopener noreferrer"}},[e._v("7f6f87d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant lua id:")]),e._v(" update to version Flwio4Lr08g6s6uim6lEJNnVGD9ylvz0_aafvpiL8FI ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/8cbd564cffb18055c46cb3212a0657e55f02d781",target:"_blank",rel:"noopener noreferrer"}},[e._v("8cbd564"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant:")]),e._v(" remove data from ant object, none of our ant methods require data attributes ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0f267c1faab7f7c0e923eb7398e3f471c55c4c1f",target:"_blank",rel:"noopener noreferrer"}},[e._v("0f267c1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao:")]),e._v(" update AoProcess to only support string | undefined ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/584aee12cad2a246108d65c827fbddb0e3cd09f9",target:"_blank",rel:"noopener noreferrer"}},[e._v("584aee1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("arns:")]),e._v(" update event emitter to provide more events and logs while loading arns records ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/87758966e54b9563e8153feb07bba808a110aa5b",target:"_blank",rel:"noopener noreferrer"}},[e._v("8775896"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("constants:")]),e._v(" do not set env var for ant registry ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9e61cc7691882c3203da11c8f21a2135ab2c3371",target:"_blank",rel:"noopener noreferrer"}},[e._v("9e61cc7"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("deps:")]),e._v(" move arconnect to dev deps ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/34f07d25024c080f529218569cba57041e34baa2",target:"_blank",rel:"noopener noreferrer"}},[e._v("34f07d2"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("emiter:")]),e._v(" use a set to filter out duplicate ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7887af9b9e9a14a3b9002b3560f653d2c59ef9cf",target:"_blank",rel:"noopener noreferrer"}},[e._v("7887af9"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("emitter:")]),e._v(" add page size param for emitter to increase amount of records per page to 50k ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b6f215763b5d7b3e713f0dbb1babca99ddd79dfe",target:"_blank",rel:"noopener noreferrer"}},[e._v("b6f2157"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("errors:")]),e._v(" use any type on error ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f14ed5a1ccf9a1d04208f44e8d37dea2aec5fc23",target:"_blank",rel:"noopener noreferrer"}},[e._v("f14ed5a"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("events:")]),e._v(" use arns name space for events ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1d67dfe1f7a4766bbce6cf5a55438f33423f660f",target:"_blank",rel:"noopener noreferrer"}},[e._v("1d67dfe"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("evolve:")]),e._v(" call eval twice to ensure evolve txid is set ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a6261e566bdf9ba6d18bbc9088487f9b79bbd5aa",target:"_blank",rel:"noopener noreferrer"}},[e._v("a6261e5"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("evolve:")]),e._v(" dont double eval ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a2a9121cbdbfe1b16e43602cf83f86793f0e8f48",target:"_blank",rel:"noopener noreferrer"}},[e._v("a2a9121"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("evolve:")]),e._v(" fixed evolve somehow ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b06503b098fee87ef9e710c2fa4cd585416b21ed",target:"_blank",rel:"noopener noreferrer"}},[e._v("b06503b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("example:")]),e._v(" dont spawn in example ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d1d514759a1a5af90246b2d51a43ca5ec03e5c16",target:"_blank",rel:"noopener noreferrer"}},[e._v("d1d5147"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("example:")]),e._v(" remove unused arweave instance ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d0035c01093e8acd3141a933439184897a74ad4e",target:"_blank",rel:"noopener noreferrer"}},[e._v("d0035c0"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("format:")]),e._v(" fix linting issues in format ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b72dc1f4969763568a8d1fa7e36cfd1afb3a5ccb",target:"_blank",rel:"noopener noreferrer"}},[e._v("b72dc1f"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("gateway stats:")]),e._v(" update gateway stat types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a59b166fa17735889aaae44e2b91cb5964f85f63",target:"_blank",rel:"noopener noreferrer"}},[e._v("a59b166"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("io:")]),e._v(" add api that returns the total token supply ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/261c85cf44490acc8bb46bd337693d83ffba7120",target:"_blank",rel:"noopener noreferrer"}},[e._v("261c85c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("io:")]),e._v(" no longer add data to save observations ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c017b52ba940a0738367f28043ff885d45e85951",target:"_blank",rel:"noopener noreferrer"}},[e._v("c017b52"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("lint:")]),e._v(" fix lint errors and warnings ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e532f4e4aa11e926631c0beec0eadba0d25835a4",target:"_blank",rel:"noopener noreferrer"}},[e._v("e532f4e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("lua id:")]),e._v(" set new lua id in constants ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e4c3aaf8b65c02294e021c2df8dac9d25ea6ec05",target:"_blank",rel:"noopener noreferrer"}},[e._v("e4c3aaf"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("naming:")]),e._v(" name AoSigner property aoSigner ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4604524dc56333c3ed1698978b61747920c43848",target:"_blank",rel:"noopener noreferrer"}},[e._v("4604524"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("records:")]),e._v(" update arns emitter to use ant registry ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e55a67ba022fa4a7bfe5bed00de592e99f8dd822",target:"_blank",rel:"noopener noreferrer"}},[e._v("e55a67b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" describe signing function as signer vs aoSigner in case of signer type changes ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/3b23f80581ea331b89ac31756421f74799315e2c",target:"_blank",rel:"noopener noreferrer"}},[e._v("3b23f80"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" move createAoSigner to be a util ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7f7a0e6f16b1b8f2e900aca056f6f5aaa98bd4f1",target:"_blank",rel:"noopener noreferrer"}},[e._v("7f7a0e6"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" pass in signing function instead of signer class ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/cba16e3f72d3adf0b0ecf39dd93236511b77bb7c",target:"_blank",rel:"noopener noreferrer"}},[e._v("cba16e3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" use AoSigner type as return type ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/8e95eddf5723b0fdbf870688556f76a3e80bb6fa",target:"_blank",rel:"noopener noreferrer"}},[e._v("8e95edd"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("spawn:")]),e._v(" update spawn to use ant registry id in the tags ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/28dae7fe312a6948ce3a2d9fa2db57271f6c5f85",target:"_blank",rel:"noopener noreferrer"}},[e._v("28dae7f"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" check the return of ACL on ant tests more granularly ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/350bab13480598ac1f4b1307e8258df06124d0c6",target:"_blank",rel:"noopener noreferrer"}},[e._v("350bab1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update e2e tests to only read from ant registry ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a61e0bf0c8106957c6405d05ed57b38c346ed65d",target:"_blank",rel:"noopener noreferrer"}},[e._v("a61e0bf"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update web test to use ANT registry in app ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/38ca913fc9f935663b750e4f68e97879d3b70e5f",target:"_blank",rel:"noopener noreferrer"}},[e._v("38ca913"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" use const for unchanging test vars ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9f965e12c39ce9e05f8cc7972ee01eca400646ab",target:"_blank",rel:"noopener noreferrer"}},[e._v("9f965e1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("test:")]),e._v(" update browser test with data test id and render checks ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/93741cb5133d1ce949caa56675290d65c24626f8",target:"_blank",rel:"noopener noreferrer"}},[e._v("93741cb"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("test:")]),e._v(" use a known wallet adddress in tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9dac28038e1fd8e669414b8a8368c6819c753239",target:"_blank",rel:"noopener noreferrer"}},[e._v("9dac280"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("todo:")]),e._v(" remove completed todo comment ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c8685227bfa656cd286d08c8998f73c6812857cf",target:"_blank",rel:"noopener noreferrer"}},[e._v("c868522"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" add gateway weights to AoGateway ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e725198093505d4dabbf2e92bc983bd0b69d1ab3",target:"_blank",rel:"noopener noreferrer"}},[e._v("e725198"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" check info on evolve util first ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a44cca17fc8d44661326e39d189b5a9e0e43367d",target:"_blank",rel:"noopener noreferrer"}},[e._v("a44cca1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" remove deprecated types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c674876fbdbe85299e7eff75ba0a89187610d00e",target:"_blank",rel:"noopener noreferrer"}},[e._v("c674876"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" update AoGateway to include weights ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5368668ec6fcd84bf6a723a80b13cad7753a8606",target:"_blank",rel:"noopener noreferrer"}},[e._v("5368668"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" update type name to what contract returns ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/99edbad2fb4553d85c366d6c62466d984b42e7cf",target:"_blank",rel:"noopener noreferrer"}},[e._v("99edbad"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[e._v("use custom event names to avoid overlap ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5b919ac483778673527e0535a5aec8b06e6ce68e",target:"_blank",rel:"noopener noreferrer"}},[e._v("5b919ac"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("utils:")]),e._v(" revert new util ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c959c81bd51fb08999a43243ca40579c979aa971",target:"_blank",rel:"noopener noreferrer"}},[e._v("c959c81"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("utils:")]),e._v(" update util to use ant registry ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b2223d4cab716267ade9159fa5932ecfc47f06b2",target:"_blank",rel:"noopener noreferrer"}},[e._v("b2223d4"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h3",{attrs:{id:"features-2"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#features-2"}},[e._v("#")]),e._v(" Features")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("ant registry:")]),e._v(" add ant registry class ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/20566747247e4006bb932216796bf96d51dc60b9",target:"_blank",rel:"noopener noreferrer"}},[e._v("2056674"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("evolve:")]),e._v(" add evolve util ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/47bfe20a9713bfdd82a7ca03ce8576653af29cf0",target:"_blank",rel:"noopener noreferrer"}},[e._v("47bfe20"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signing:")]),e._v(" add window arweave wallet to available signing options ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7596aec43557b2a0aac3844a973b78f4fed33b65",target:"_blank",rel:"noopener noreferrer"}},[e._v("7596aec"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_2-0-2-2024-07-12"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_2-0-2-2024-07-12"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v2.0.1...v2.0.2",target:"_blank",rel:"noopener noreferrer"}},[e._v("2.0.2"),r("OutboundLink")],1),e._v(" (2024-07-12)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-3"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-3"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("types:")]),e._v(" update gateway settings type to only support "),r("code",[e._v("observerAddress")]),e._v(" ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/13e073ba6d7482028e43d5c8fbab8e769d2c9e01",target:"_blank",rel:"noopener noreferrer"}},[e._v("13e073b"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_2-0-1-2024-07-11"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_2-0-1-2024-07-11"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v2.0.0...v2.0.1",target:"_blank",rel:"noopener noreferrer"}},[e._v("2.0.1"),r("OutboundLink")],1),e._v(" (2024-07-11)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-4"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-4"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("logger:")]),e._v(" fixes the console logger to respect the log level provided by web clients ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/99d79939806ef8f26407aa3237ea8773179b91a6",target:"_blank",rel:"noopener noreferrer"}},[e._v("99d7993"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h1",{attrs:{id:"_2-0-0-2024-07-11"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_2-0-0-2024-07-11"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.2.2...v2.0.0",target:"_blank",rel:"noopener noreferrer"}},[e._v("2.0.0"),r("OutboundLink")],1),e._v(" (2024-07-11)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-5"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-5"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("arweave:")]),e._v(" use default arweave in IO ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/21d25b9e1109bc18ba4e074f314848143ed0828c",target:"_blank",rel:"noopener noreferrer"}},[e._v("21d25b9"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("deps:")]),e._v(" replace bunyan or console depending on the client environment ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9d940aac99e94e5086091a2e41ffd73fe2c36715",target:"_blank",rel:"noopener noreferrer"}},[e._v("9d940aa"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("log:")]),e._v(" allow log level configuration for clients ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9cb0981e0f48c80fc000c05aba2c4cb69b5ca43c",target:"_blank",rel:"noopener noreferrer"}},[e._v("9cb0981"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("log:")]),e._v(" replace bunyan with winston to ensure browser compatibility ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/80b38e08879c83a986542f3fd9c65379680bf9b5",target:"_blank",rel:"noopener noreferrer"}},[e._v("80b38e0"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h3",{attrs:{id:"features-3"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#features-3"}},[e._v("#")]),e._v(" Features")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("io:")]),e._v(" add paginated gateway support for larger state objects (e.g. balances, records, and gateways) ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b23efa8e433451c3ff8361c54f6e35fdd30457a0",target:"_blank",rel:"noopener noreferrer"}},[e._v("b23efa8"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("util:")]),e._v(" add utility for fetching all records ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/8df2aacf530ff24f15cc14022a81f3168b8baea0",target:"_blank",rel:"noopener noreferrer"}},[e._v("8df2aac"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("io:")]),e._v(" add leaveNetwork API ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/54222ce65b25e203b243df7a7c2317f9dc1fc7b9",target:"_blank",rel:"noopener noreferrer"}},[e._v("54222ce"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h3",{attrs:{id:"breaking-changes"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#breaking-changes"}},[e._v("#")]),e._v(" BREAKING CHANGES")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("deps:")]),e._v(" removes all smartweave implementations using warp-sdk. The result is an only AO compatible ANT and IO network contracts. Some utilities are preserved due to their usefulness.")]),e._v(" "),r("li",[r("strong",[e._v("imports:")]),e._v(" modifies "),r("code",[e._v("web")]),e._v(" named exports to provide esm and cjs exports instead of minified bundle. The web bundle was causing issues in bundled projects, and polyfills are no longer provided by default. Refer to the "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/blob/main/README.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("README"),r("OutboundLink")],1),e._v(" for specifications on how to use the SDK for a web project.")])]),e._v(" "),r("h2",{attrs:{id:"_1-2-2-2024-07-11"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-2-2-2024-07-11"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.2.0...v1.2.1",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.2.2"),r("OutboundLink")],1),e._v(" (2024-07-11)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-6"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-6"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("api")]),e._v(": ensure timestamps are always in miliseconds ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/93b162f22f27e6af4252e7551f785fbffc062e87",target:"_blank",rel:"noopener noreferrer"}},[e._v("93b162f"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-2-1-2024-07-04"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-2-1-2024-07-04"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.2.0...v1.2.1",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.2.1"),r("OutboundLink")],1),e._v(" (2024-07-04)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-7"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-7"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("io:")]),e._v(" default the IO process to use testnet ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/61bca5cb4f2ecc1928ebc8271c9acc9f25ac0412",target:"_blank",rel:"noopener noreferrer"}},[e._v("61bca5c"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-2-0-2024-07-03"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-2-0-2024-07-03"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.1.1...v1.2.0",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.2.0"),r("OutboundLink")],1),e._v(" (2024-07-03)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-8"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-8"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("ant")]),e._v(": add event emitter util for fetching ants ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ee5287b985aa6ef4b41f6e67ec0119dabcff3b3f",target:"_blank",rel:"noopener noreferrer"}},[e._v("ee5287b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant")]),e._v(": fix read api and update types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/977e0e3e46bbc6e324f545f28b6fb6d93d9e2d08",target:"_blank",rel:"noopener noreferrer"}},[e._v("977e0e3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant")]),e._v(": handle when no data is returned ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1de66101e0a4fd2b9366b95085ede218292e36f9",target:"_blank",rel:"noopener noreferrer"}},[e._v("1de6610"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ants")]),e._v(": separate out interfaces ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/60fd59321960ee61e487295800d3fc72c1a139b5",target:"_blank",rel:"noopener noreferrer"}},[e._v("60fd593"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant")]),e._v(": update apis to implement interface ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9c54db09cc896bae17943597532fa08df3f40e74",target:"_blank",rel:"noopener noreferrer"}},[e._v("9c54db0"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant")]),e._v(": update interface to expect "),r("code",[e._v("undername")]),e._v(" instead of "),r("code",[e._v("name")]),e._v(" for ant records ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/416cb3dfde20d46cca19e439fddace455db1f03e",target:"_blank",rel:"noopener noreferrer"}},[e._v("416cb3d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao ant")]),e._v(": add handler for get state ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/fd20aa761fabac4e98b9bedb546d23aa915b4309",target:"_blank",rel:"noopener noreferrer"}},[e._v("fd20aa7"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao reads")]),e._v(": safely parse json ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1ff54104526d1850b4f2dba0c119a33818d76f56",target:"_blank",rel:"noopener noreferrer"}},[e._v("1ff5410"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": add AR-IO-SDK tag to process interaction ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e5b5603ed9b6eaae3e6cc0b4f6407f91081ea272",target:"_blank",rel:"noopener noreferrer"}},[e._v("e5b5603"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": add default timestamp to getTokenCost ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/36fed1b8a0206c7dcb0c1d1fbacd533cd537b5b9",target:"_blank",rel:"noopener noreferrer"}},[e._v("36fed1b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": add getPrescribedNames for epoch api ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/747fad28b64edbed288511a895af6b930c93f762",target:"_blank",rel:"noopener noreferrer"}},[e._v("747fad2"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": add retries to read interactions ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/67d59e2cbdef917bc9a776409a8040565434aeaa",target:"_blank",rel:"noopener noreferrer"}},[e._v("67d59e2"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": fix tag for join network, update observation response ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/556f5d5d957a07944f3655f3ed1be026de51102e",target:"_blank",rel:"noopener noreferrer"}},[e._v("556f5d5"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": prune tags on joinNetwork ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/31978f9788f67a488ddd1d0804c90809a10ac90c",target:"_blank",rel:"noopener noreferrer"}},[e._v("31978f9"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao read")]),e._v(": fix interface to have ant getState api ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4e95bbdedc5cc6a448a860d48b30a7502fbbf179",target:"_blank",rel:"noopener noreferrer"}},[e._v("4e95bbd"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("aos")]),e._v(": update aos module id and lua id ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e19139e1391656e7eb4038a479e620535f3671c4",target:"_blank",rel:"noopener noreferrer"}},[e._v("e19139e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": support connection config params in AO ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/3e6a2469c73a1889d89c4a90fc0d43ec8f3d8a39",target:"_blank",rel:"noopener noreferrer"}},[e._v("3e6a246"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": support tags for all write interactions ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/67f8da987aa280e1648d4b65fa305f643ab42535",target:"_blank",rel:"noopener noreferrer"}},[e._v("67f8da9"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": update APIs for ao interface to be more descriptive ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f07ac369045a0c71db50e9864f4b513d18a671b1",target:"_blank",rel:"noopener noreferrer"}},[e._v("f07ac36"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": update epoch interfaces to support various inputs ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ddc4c1041ecbb316ff555e354b8c28782e859c3b",target:"_blank",rel:"noopener noreferrer"}},[e._v("ddc4c10"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": update send on process to use proper signer and evalute result ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4e2f65d79770fee48f5288307cfd7b50048e6d58",target:"_blank",rel:"noopener noreferrer"}},[e._v("4e2f65d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": update stake interface ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/427e8baf8c8e58dffbfb5632ddb3c5d9c51d66e8",target:"_blank",rel:"noopener noreferrer"}},[e._v("427e8ba"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao")]),e._v(": use types and connect config in ao process to wrap connect from ao ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/05b07cfbb1d974e708108c8239d8214d6c50b418",target:"_blank",rel:"noopener noreferrer"}},[e._v("05b07cf"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("buy")]),e._v(": require processId on buyRecord ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/cc5859fcc4e7ecb09f687a2ad02a59aa4763be13",target:"_blank",rel:"noopener noreferrer"}},[e._v("cc5859f"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("deps")]),e._v(": add eventemitter3 dep ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1d50cd12a3ffd37bbf23a368c590b74aaa040b93",target:"_blank",rel:"noopener noreferrer"}},[e._v("1d50cd1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("deps")]),e._v(": use p-limit-lit to avoid jest issues ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/05e0673873490180e71974b90448561cacd21662",target:"_blank",rel:"noopener noreferrer"}},[e._v("05e0673"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("emitter")]),e._v(": add a "),r("code",[e._v("end")]),e._v(" and some console logs in the example ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/bc4e6b8f3c252e3d79033e25f5de6cd8fa7f087a",target:"_blank",rel:"noopener noreferrer"}},[e._v("bc4e6b8"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("emmiter")]),e._v(": rename and move throttle to be variable powered ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f9cf40d547e353005501188aa73d4f9cd3203f7b",target:"_blank",rel:"noopener noreferrer"}},[e._v("f9cf40d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("epochs")]),e._v(": fix epoch default timestamp ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ffb9df7acafd5378073537fe1f71835663e00231",target:"_blank",rel:"noopener noreferrer"}},[e._v("ffb9df7"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("events")]),e._v(": return process ids on end of fetching ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/15e3f44f20deea1c29d8d67aa4973c39e9182072",target:"_blank",rel:"noopener noreferrer"}},[e._v("15e3f44"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("handlers")]),e._v(": update handler names ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/720b178eca08570b7beff02445d82b5c7366e220",target:"_blank",rel:"noopener noreferrer"}},[e._v("720b178"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("io")]),e._v(": add buyRecord API ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/30d5e74384d6af25805fc5d1c35f30486ea204a2",target:"_blank",rel:"noopener noreferrer"}},[e._v("30d5e74"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("io")]),e._v(": add epoch-settings api and tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/56555eac9ff627ff9d5762965477e5895e43ded5",target:"_blank",rel:"noopener noreferrer"}},[e._v("56555ea"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("io")]),e._v(": add init to provide custom process ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/8811016a9049102a0c5c3d9c82d473ccbe4e2d10",target:"_blank",rel:"noopener noreferrer"}},[e._v("8811016"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("io")]),e._v(": separate out io/ao contract interfaces ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d96fa5928a1cc45639fe3e0f687726eba059a762",target:"_blank",rel:"noopener noreferrer"}},[e._v("d96fa59"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("io")]),e._v(": update arns interactions on registry contract ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9befe2a1823f580821f5175ebc97fa24f481e1fe",target:"_blank",rel:"noopener noreferrer"}},[e._v("9befe2a"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("pLimit")]),e._v(": add pLimit for util to avoid ao throttling ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5b1356079153f4cc637596bb75b3f916d77a69e3",target:"_blank",rel:"noopener noreferrer"}},[e._v("5b13560"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[e._v("readds incorrectly removed descriptions ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c77217a9baa28f5397a81ae46e3618b4730e49c0",target:"_blank",rel:"noopener noreferrer"}},[e._v("c77217a"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[e._v("revert "),r("code",[e._v("purchasetype")]),e._v(" tag ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2dc08dfb946cd8e7002dde80458e44e739693627",target:"_blank",rel:"noopener noreferrer"}},[e._v("2dc08df"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("spawn")]),e._v(": add option state contractTxID to track where init state is from ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1745766efbaf39dab3d848febf320fc6a78a0fed",target:"_blank",rel:"noopener noreferrer"}},[e._v("1745766"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tags")]),e._v(": make remaining tags ans-116 compliant ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d034c8c694f4558aa807beeef36217868f50c8e8",target:"_blank",rel:"noopener noreferrer"}},[e._v("d034c8c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tags")]),e._v(": use updated ans-116 tag format for actions ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/261b7888c6c84d94261ea59499e65854ddf11e31",target:"_blank",rel:"noopener noreferrer"}},[e._v("261b788"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("timeout")]),e._v(": increase timeout period on arns emitter ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b5ddb5f0e79aeabeac6a5a55855436abd6cc9199",target:"_blank",rel:"noopener noreferrer"}},[e._v("b5ddb5f"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("type")]),e._v(": default to unknown return type for json ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0bddce0870c96dfbb2175a0eeb98bd86d65c1e84",target:"_blank",rel:"noopener noreferrer"}},[e._v("0bddce0"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(": add ao ant state type ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/02dbacd71f5b5aabc8eb7a539a908c7fabebe27a",target:"_blank",rel:"noopener noreferrer"}},[e._v("02dbacd"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(": update some types for arns names and contract state ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2d23241cd632ec2931521b98804e8cf536a92af7",target:"_blank",rel:"noopener noreferrer"}},[e._v("2d23241"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[e._v("updates to use IO class and process terminology ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ec45d666747a31734ae93cc8b5a4b29af1e7cd3e",target:"_blank",rel:"noopener noreferrer"}},[e._v("ec45d66"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("util")]),e._v(": initial implementation of get ant process for wallet ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/885fa31531725e396a94a53bfff200a6e3258395",target:"_blank",rel:"noopener noreferrer"}},[e._v("885fa31"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h3",{attrs:{id:"features-4"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#features-4"}},[e._v("#")]),e._v(" Features")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("ant:")]),e._v(" add balance APIs to ant interface ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ec67440b7189c95ce4c2fcc933ef63ca9c1732b6",target:"_blank",rel:"noopener noreferrer"}},[e._v("ec67440"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant:")]),e._v(" add utility for fetchint ant modules owned by wallet ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/01f7ec95d4de88b3a098a2ab59fa811c9820b279",target:"_blank",rel:"noopener noreferrer"}},[e._v("01f7ec9"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ants:")]),e._v(" support ANT apis in SDK ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b187aebc34fd5afc237d5a68aa091d4fe14d0bce",target:"_blank",rel:"noopener noreferrer"}},[e._v("b187aeb"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao utils:")]),e._v(" add spawn ant util ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d02566eac7385b5a25fb1851fa4aeb4906616328",target:"_blank",rel:"noopener noreferrer"}},[e._v("d02566e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ao:")]),e._v(" experiment with initial implementation of ao contract ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/6118cea0b1d5aa027f97e81b34849bd56107a396",target:"_blank",rel:"noopener noreferrer"}},[e._v("6118cea"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("getInfo io:")]),e._v(" add getInfo method to io class ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4ef25ec37f60a5155e68047f2cffa2c49ecaa093",target:"_blank",rel:"noopener noreferrer"}},[e._v("4ef25ec"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("IO:")]),e._v(" implement io/ao classes that call process apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/aab8967c83e69fafe1258b768b1e33cb3920aeb8",target:"_blank",rel:"noopener noreferrer"}},[e._v("aab8967"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-1-1-2024-06-06"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-1-1-2024-06-06"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.1.0...v1.1.1",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.1.1"),r("OutboundLink")],1),e._v(" (2024-06-06)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-9"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-9"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("api")]),e._v(": default evaluation options on getArNSReservedNames api ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0a1f22ebe7fccd6d7f77a5255d2b639d670492fb",target:"_blank",rel:"noopener noreferrer"}},[e._v("0a1f22e"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-1-0-2024-06-03"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-1-0-2024-06-03"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.0.8...v1.1.0",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.1.0"),r("OutboundLink")],1),e._v(" (2024-06-03)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-10"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-10"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("api")]),e._v(": make evaluation options optional on the interface ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9e5a1c0572486f9c1e417453fb9c54dd102cbdb4",target:"_blank",rel:"noopener noreferrer"}},[e._v("9e5a1c0"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("api")]),e._v(": remove unused variable for epochBlockHeight ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/98c5ebc447b1b6d0249e0602ce7e4af97e424cc1",target:"_blank",rel:"noopener noreferrer"}},[e._v("98c5ebc"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("arweave")]),e._v(": default to arweave.net ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/84c9653be1fb92f8ed15da689d65ff19e5733ba4",target:"_blank",rel:"noopener noreferrer"}},[e._v("84c9653"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("axios")]),e._v(": add back axios-retry ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9aae4de1c23ca50acb613ff566e3f73c27f0ff0e",target:"_blank",rel:"noopener noreferrer"}},[e._v("9aae4de"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("errors")]),e._v(": throw AbortError on signal aborted ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/63bd39566bc4ee08504b98b82c62dd22e100bc7f",target:"_blank",rel:"noopener noreferrer"}},[e._v("63bd395"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("getContracts")]),e._v(": only implement util for now ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/6b29c2ff7773320c2b6d16677826d59bd515332c",target:"_blank",rel:"noopener noreferrer"}},[e._v("6b29c2f"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("gql query")]),e._v(": don't abstract the data protocol query ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f0b8f7718b777358d6b6946159f57551ea76c1e7",target:"_blank",rel:"noopener noreferrer"}},[e._v("f0b8f77"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("imports")]),e._v(": import type from base route warp-contracts ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/bf99a85d0d099cf20db9b70db1bf84f9908b51e5",target:"_blank",rel:"noopener noreferrer"}},[e._v("bf99a85"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("init")]),e._v(": allow signer to be undefined and if so return readable ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b6a05e205c60c6b8623fbac6795a1e96a7a19590",target:"_blank",rel:"noopener noreferrer"}},[e._v("b6a05e2"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("init")]),e._v(": fix type for init to allow undefined signer ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0a64ea9006571c93b4e9a26803b04d7da8ddcb9f",target:"_blank",rel:"noopener noreferrer"}},[e._v("0a64ea9"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("init")]),e._v(": remove unnecessary destructuring ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/81af1af7190f18726a20ebaaaa5712a4e815bb35",target:"_blank",rel:"noopener noreferrer"}},[e._v("81af1af"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("interface")]),e._v(": remove epochBlockHeight from interface ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b646f08e795635e4597d48d7c56419849c352a88",target:"_blank",rel:"noopener noreferrer"}},[e._v("b646f08"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(":remove DataItem from WriteInteractionResult ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/eadb1a1d61985caf1326c32d1205d3e8db309374",target:"_blank",rel:"noopener noreferrer"}},[e._v("eadb1a1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(": use gql node interface for dataProtocolTransaction ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/79cebd90b930829b740bed058f7cfe0da3b7799e",target:"_blank",rel:"noopener noreferrer"}},[e._v("79cebd9"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("warp")]),e._v(": ensure contract init on read interactions ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/bc3d1b84f99cf3341cea42641b58b792434ac405",target:"_blank",rel:"noopener noreferrer"}},[e._v("bc3d1b8"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h3",{attrs:{id:"features-5"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#features-5"}},[e._v("#")]),e._v(" Features")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("getContracts")]),e._v(": add get contracts on network specific providers like WarpContract ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/603d36edd130d6b0410fa7199450ec91d7b4c821",target:"_blank",rel:"noopener noreferrer"}},[e._v("603d36e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("gql util")]),e._v(": add smartweave gql utils ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5ea3aaba1a5466741faa6e3b39d5908d25d37d49",target:"_blank",rel:"noopener noreferrer"}},[e._v("5ea3aab"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("write")]),e._v(": add tags support to write interactions on warp-contract and saveObservations ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/46eb4c91ba7c56cbeefde3b4fc2a522fda5fda1d",target:"_blank",rel:"noopener noreferrer"}},[e._v("46eb4c9"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-0-8-2024-05-29"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-0-8-2024-05-29"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.0.7...v1.0.8",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.0.8"),r("OutboundLink")],1),e._v(" (2024-05-29)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-11"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-11"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("api")]),e._v(": add getPriceForInteration api to ario contract ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/3b8083c173bd35f7332c68dc094b092adedaf8e7",target:"_blank",rel:"noopener noreferrer"}},[e._v("3b8083c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("bundle")]),e._v(": minify web bundle ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9266676cc6cc26cc6829ef902329879e6f179fc4",target:"_blank",rel:"noopener noreferrer"}},[e._v("9266676"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("api")]),e._v(": use function map for method name ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/439ec1f649c2f54d6e1516ec4e7af5e8a080c2ed",target:"_blank",rel:"noopener noreferrer"}},[e._v("439ec1f"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("reserved")]),e._v(": add reserved arns name get methods ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ad203ef22402851d28643630243716465b2ce030",target:"_blank",rel:"noopener noreferrer"}},[e._v("ad203ef"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer")]),e._v(": check if method is property of signer before using ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c52783c86bfa4019bc565dd457d7f14defdd1129",target:"_blank",rel:"noopener noreferrer"}},[e._v("c52783c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer")]),e._v(": modify signer to assume the signer type based on public key being undefined ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b775c9672ad68ac987bf37ec1cf0d7c625c9c426",target:"_blank",rel:"noopener noreferrer"}},[e._v("b775c96"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("test")]),e._v(": add dockerfile for running tests in certain node environments ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/86cf2ad51d09e88c13bdd0ba0e8a3a2b23b9d395",target:"_blank",rel:"noopener noreferrer"}},[e._v("86cf2ad"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-0-7-2024-05-23"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-0-7-2024-05-23"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.0.6...v1.0.7",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.0.7"),r("OutboundLink")],1),e._v(" (2024-05-23)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-12"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-12"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("contract")]),e._v(": add extendLease and increaseUndernameSupport apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1b13b5e7e24259fbd2762848e6066822af51cecd",target:"_blank",rel:"noopener noreferrer"}},[e._v("1b13b5e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(": fix the AtLeastOne type ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ffd0869949814196817d0ffb14fe0cf2be2ad298",target:"_blank",rel:"noopener noreferrer"}},[e._v("ffd0869"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("deps")]),e._v(": force arweavve to 1.15.1 ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/244859865b986a4c48b6446fc41230039cc5fcc0",target:"_blank",rel:"noopener noreferrer"}},[e._v("2448598"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contract")]),e._v(": make params required - properties and note ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/89db674a187dffc83413ac1ac3922ca78ae3f88d",target:"_blank",rel:"noopener noreferrer"}},[e._v("89db674"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(": update tests and use overwrite type to allow mIOtoken for certain paramaters ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/badcece5ba33b3e26448988ae1aee88e706c9da5",target:"_blank",rel:"noopener noreferrer"}},[e._v("badcece"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("api")]),e._v(": change to increaseUndernameLimit ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9b72c1ed261ecae43fa4c0cd3e00ddb61e6e7ee5",target:"_blank",rel:"noopener noreferrer"}},[e._v("9b72c1e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("docs")]),e._v(": update ario apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4af08626abfe4cd16f6c4b56696e19c7803e7dc6",target:"_blank",rel:"noopener noreferrer"}},[e._v("4af0862"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests")]),e._v(": update extend test util to include a test domain ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e959b7cc3d642651c0313529ad47343e3ff2c69d",target:"_blank",rel:"noopener noreferrer"}},[e._v("e959b7c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("token")]),e._v(": add mIO and IO token classes to exports ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f47f7d5c251973058866340a6bc2baddbf973ecf",target:"_blank",rel:"noopener noreferrer"}},[e._v("f47f7d5"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(": add delegated gateway type ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c87749660d2da62e6b996a9f034ce12fb702d93b",target:"_blank",rel:"noopener noreferrer"}},[e._v("c877496"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(": export the token types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/dfc83ae74a110dd06ddab16d5f88d192e4c0c5ad",target:"_blank",rel:"noopener noreferrer"}},[e._v("dfc83ae"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(": remove visible types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/6ab1fc3284d35fdd8f70a1fa1ac5cb7965878a51",target:"_blank",rel:"noopener noreferrer"}},[e._v("6ab1fc3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types")]),e._v(": update Gateway delegates type to use the new GatewayDelegate ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ac7e924f24ba6133b2917de8416c37bf6560cdd4",target:"_blank",rel:"noopener noreferrer"}},[e._v("ac7e924"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("warp")]),e._v(": bump warp version ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/db7344d269968a1f4a287eb2c2d503e0045fcf5e",target:"_blank",rel:"noopener noreferrer"}},[e._v("db7344d"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-0-6-2024-05-07"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-0-6-2024-05-07"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.0.5...v1.0.6",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.0.6"),r("OutboundLink")],1),e._v(" (2024-05-07)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-13"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-13"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("warp")]),e._v(": bump warp to fix AbortError issue on warp imports for web ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c9a561395da9cd0e04cc9320979c68f93ee99c0a",target:"_blank",rel:"noopener noreferrer"}},[e._v("c9a5613"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-0-5-2024-05-02"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-0-5-2024-05-02"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.0.4...v1.0.5",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.0.5"),r("OutboundLink")],1),e._v(" (2024-05-02)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-14"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-14"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("cjs:")]),e._v(" provide path alias for warp in cjs export ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7f9bf9a6c8937e855d6b56f81f367b596dfca166",target:"_blank",rel:"noopener noreferrer"}},[e._v("7f9bf9a"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("logger:")]),e._v(" replace winston with bunyan ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0488f7529e25046d902ac88b11485a55bb246854",target:"_blank",rel:"noopener noreferrer"}},[e._v("0488f75"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("util:")]),e._v(" add FQDN regex that matches ArNS contract ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e6d7396decdb4997aa121f31ae7ad87455747191",target:"_blank",rel:"noopener noreferrer"}},[e._v("e6d7396"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("utils:")]),e._v(" manally conver from b64 to b64url to avoid web polyfill issues ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/766035c1a319e2c2567cf2a47bda3a48f5294d2c",target:"_blank",rel:"noopener noreferrer"}},[e._v("766035c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("utils:")]),e._v(" use base64 for fromB64url util ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/42302ef5124aa28fc438a9b865fd901f2ed3df4d",target:"_blank",rel:"noopener noreferrer"}},[e._v("42302ef"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("warp-contract:")]),e._v(" correctly throw error in write interaction ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c2368dd5ef1c78fa52ef1eef3198a4a035411bea",target:"_blank",rel:"noopener noreferrer"}},[e._v("c2368dd"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-0-4-2024-04-30"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-0-4-2024-04-30"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.0.3...v1.0.4",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.0.4"),r("OutboundLink")],1),e._v(" (2024-04-30)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-15"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-15"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("ario:")]),e._v(" update joinNetwork to accept observerWallet param ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/6a32dd1d6291fc524a5c8ed88fc1bbe8c614a1e2",target:"_blank",rel:"noopener noreferrer"}},[e._v("6a32dd1"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-0-3-2024-04-26"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-0-3-2024-04-26"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.0.2...v1.0.3",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.0.3"),r("OutboundLink")],1),e._v(" (2024-04-26)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-16"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-16"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("signer:")]),e._v(" set owner before signing data ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0b558f53b4b38dfea00629fd733462654801693c",target:"_blank",rel:"noopener noreferrer"}},[e._v("0b558f5"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-0-2-2024-04-25"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-0-2-2024-04-25"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.0.1...v1.0.2",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.0.2"),r("OutboundLink")],1),e._v(" (2024-04-25)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-17"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-17"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("arweave:")]),e._v(" default to the arweave node import to avoid issues with browser environments ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/fc8c26e3c33b27054ad69d6a406139d73283344f",target:"_blank",rel:"noopener noreferrer"}},[e._v("fc8c26e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("cacheurl:")]),e._v(" use default cache url in warpcontract ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a676a3c952e9416f89b703519fb13b2d8671b82a",target:"_blank",rel:"noopener noreferrer"}},[e._v("a676a3c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("init:")]),e._v(" cleanup init overload methods and tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/fa328d26c7654221176dd57bda88ce56639048b6",target:"_blank",rel:"noopener noreferrer"}},[e._v("fa328d2"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("lint:")]),e._v(" address lint issue in ArIOWriteable ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4a3ee893bc1121c7ed84108fa476d5a4308e0283",target:"_blank",rel:"noopener noreferrer"}},[e._v("4a3ee89"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tsconfig:")]),e._v(" modify some tsconfig settings to get isolated configs for web/cjs/esm ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/46b7acc9bbe7cf52ddf3ed7d7e9399332b463fe5",target:"_blank",rel:"noopener noreferrer"}},[e._v("46b7acc"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("typeguards:")]),e._v(" make type guards accept unknowns ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7f285bb73bebb384a0c20aafabc55e1fca76e34b",target:"_blank",rel:"noopener noreferrer"}},[e._v("7f285bb"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" use generic types and modify the requirements for init functions ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9350f781dcadf481ebce7558cdecd6d27d43cc0c",target:"_blank",rel:"noopener noreferrer"}},[e._v("9350f78"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("utils:")]),e._v(" add writeInteraction types and update base64url logic ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4f5476b093a303ffb68a7c26dad7b413334556ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("4f5476b"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-0-1-2024-04-23"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-0-1-2024-04-23"}},[e._v("#")]),e._v(" "),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/compare/v1.0.0...v1.0.1",target:"_blank",rel:"noopener noreferrer"}},[e._v("1.0.1"),r("OutboundLink")],1),e._v(" (2024-04-23)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-18"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-18"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("docs:")]),e._v(" improve README docs interface documentation for ArIO clients ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b0da48c77718020f79dc56fe04ca49a11f018fa6",target:"_blank",rel:"noopener noreferrer"}},[e._v("b0da48c"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h2",{attrs:{id:"_1-0-0-2024-04-23"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_1-0-0-2024-04-23"}},[e._v("#")]),e._v(" 1.0.0 (2024-04-23)")]),e._v(" "),r("h3",{attrs:{id:"bug-fixes-19"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-19"}},[e._v("#")]),e._v(" Bug Fixes")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("actions:")]),e._v(" bump node setup action ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4eb49cda331cfef516639435e73dde2e90f2e05c",target:"_blank",rel:"noopener noreferrer"}},[e._v("4eb49cd"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("actions:")]),e._v(" freeze lockfile ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/dba7313f42c8cf0053f90327ad2c14ec5bd4d4d7",target:"_blank",rel:"noopener noreferrer"}},[e._v("dba7313"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contract")]),e._v("add cache config in ario constructor ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1f3c0baef2831d12d14d20e1ac16d9b0e8f0c978",target:"_blank",rel:"noopener noreferrer"}},[e._v("1f3c0ba"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant:")]),e._v(" add ant contract to exports ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a2ff57bc1b6f77dcf9f3ace1fd3b346069aec6b4",target:"_blank",rel:"noopener noreferrer"}},[e._v("a2ff57b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant:")]),e._v(" add signer to ant test ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4581b8d461e57f4769befe5f650e5fe4e94bbc09",target:"_blank",rel:"noopener noreferrer"}},[e._v("4581b8d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant:")]),e._v(" default evaluation options for ant apis that do not take an… ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/25",target:"_blank",rel:"noopener noreferrer"}},[e._v("#25"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0c8b55ddbc5019f365af43389524af5bd733d0c9",target:"_blank",rel:"noopener noreferrer"}},[e._v("0c8b55d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant:")]),e._v(" default evaluation options for ant apis that do not take another parameter ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7c590334f6f99998839fecc78505e41931c80045",target:"_blank",rel:"noopener noreferrer"}},[e._v("7c59033"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant:")]),e._v(" default evaluation options for apis that do not require them ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/72b57d5626cbcda0931fd5f0b88bf113fbb05066",target:"_blank",rel:"noopener noreferrer"}},[e._v("72b57d5"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant:")]),e._v(" fix API for getRecords ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c714aa3563580c19427d55d6938893665ecc3ea2",target:"_blank",rel:"noopener noreferrer"}},[e._v("c714aa3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("apis:")]),e._v(" remove epoch from distributions and observations ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7b2d2799d534378183122ef986fc3bd75755558e",target:"_blank",rel:"noopener noreferrer"}},[e._v("7b2d279"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("arbundle version:")]),e._v(" pin version ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/35ffab6fbb9a2209391bb5f10120fb9a9c91b0aa",target:"_blank",rel:"noopener noreferrer"}},[e._v("35ffab6"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("arbundles:")]),e._v(" update arbundles import ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f02d83f4766a92be930a7c51e23f1f63b5692224",target:"_blank",rel:"noopener noreferrer"}},[e._v("f02d83f"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ario:")]),e._v(" add cache config in ario constructor ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/11",target:"_blank",rel:"noopener noreferrer"}},[e._v("#11"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ecb279d8a5d4381ecf29e8e3b94615ab7ae127aa",target:"_blank",rel:"noopener noreferrer"}},[e._v("ecb279d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ario:")]),e._v(" formatting ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c61570ac609566d294d6c42b97ba65b91ef81d9c",target:"_blank",rel:"noopener noreferrer"}},[e._v("c61570a"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ario:")]),e._v(" make state provider nullable and default to remote arns-service provider ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/fa1cb728edc9ec072aa3c12595a3e5c93d84ca67",target:"_blank",rel:"noopener noreferrer"}},[e._v("fa1cb72"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ario:")]),e._v(" re-add contract default config ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2296cc3e152c136e2df45481340a625a80a0be3f",target:"_blank",rel:"noopener noreferrer"}},[e._v("2296cc3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ario:")]),e._v(" remove unused cache property ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7f2d02eb3da96cea024ca2355668d5354dbeb767",target:"_blank",rel:"noopener noreferrer"}},[e._v("7f2d02e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("build:")]),e._v(" add setImmediate polyfill for web only ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ad36776795348a32941d2b4e833ed00da05a476f",target:"_blank",rel:"noopener noreferrer"}},[e._v("ad36776"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("build:")]),e._v(" remove redundant exported type ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/134319b8707cd479dc91d6832bf078bdb5c5e886",target:"_blank",rel:"noopener noreferrer"}},[e._v("134319b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("cache:")]),e._v(" remove cache folder ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2ac942742017344e1d8c06883449453c88bfa155",target:"_blank",rel:"noopener noreferrer"}},[e._v("2ac9427"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("cacheURL:")]),e._v(" update ario cache url setting pattern to use custom url appropriately ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c76e67dd8ecb7014cd441e7284df389e06ea5cc0",target:"_blank",rel:"noopener noreferrer"}},[e._v("c76e67d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("cache:")]),e._v(" validate arweave id before setting it ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5ba1175b63b28e86f2b08a0de657a25546f46688",target:"_blank",rel:"noopener noreferrer"}},[e._v("5ba1175"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("casing:")]),e._v(" revert to lower case casing ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b5da0ab78a965829951dbed7f4fcc5087b813271",target:"_blank",rel:"noopener noreferrer"}},[e._v("b5da0ab"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("comments:")]),e._v(" make class logger private, remove comments ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7483246113d5b3b424f8450ea1f1c5e0d036618b",target:"_blank",rel:"noopener noreferrer"}},[e._v("7483246"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("connect:")]),e._v(" add init static function on ario class to create interaction classes ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/765f39c5816b35c41b43fdeddf765b9b50845b9a",target:"_blank",rel:"noopener noreferrer"}},[e._v("765f39c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contract configuration:")]),e._v(" return cache url as well ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b4a7bc3960be0532ec7cdedf5875128f11f60672",target:"_blank",rel:"noopener noreferrer"}},[e._v("b4a7bc3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contract functions:")]),e._v(" correct contract function names ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ad9bc5625b582d5714624c491904e68380f10ae3",target:"_blank",rel:"noopener noreferrer"}},[e._v("ad9bc56"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contracts:")]),e._v(" add configuration view method and update types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4fae4a2688f96388d5b53d8fe292ff7942af0c57",target:"_blank",rel:"noopener noreferrer"}},[e._v("4fae4a2"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contracts:")]),e._v(" remove write method and type from remote contract ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/740d8b88a5486f90cd61d024f8fdd4e6b9a370a0",target:"_blank",rel:"noopener noreferrer"}},[e._v("740d8b8"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contracttxid:")]),e._v(" make contractTxID require in remote state cache instance ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/dc82d217c66ad8deff4ea6c3a9d7304f6e65b4d9",target:"_blank",rel:"noopener noreferrer"}},[e._v("dc82d21"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contracttxid:")]),e._v(" make contractTxID required in remote state cache instance ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/10",target:"_blank",rel:"noopener noreferrer"}},[e._v("#10"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/bf651bb11006eaf5eea586ff1feb0bb2644db504",target:"_blank",rel:"noopener noreferrer"}},[e._v("bf651bb"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ctrl flow:")]),e._v(" remove else from control flow ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4b3c4c2058767b05199ac75c44c4684a66149bb9",target:"_blank",rel:"noopener noreferrer"}},[e._v("4b3c4c2"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("deps:")]),e._v(" pin arweave ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d39391c19dc7d1396b735cd87920a2dc224f94e4",target:"_blank",rel:"noopener noreferrer"}},[e._v("d39391c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("deps:")]),e._v(" remove axios-retry, will implement later ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0218e95fc2c2b1682010cf1841e3a2c717756c1d",target:"_blank",rel:"noopener noreferrer"}},[e._v("0218e95"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("deps:")]),e._v(" remove extra crypto-browserify ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9b4289809eacba3cd870adddb2bd73def576d50a",target:"_blank",rel:"noopener noreferrer"}},[e._v("9b42898"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("deps:")]),e._v(" remove warp-contracts-deploy from deps ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9d4f9faa860789ced003dc3b6d36c4db99962b8e",target:"_blank",rel:"noopener noreferrer"}},[e._v("9d4f9fa"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("docs:")]),e._v(" remove docs folder ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/47e84037357fd69f9af18b1e9b84286257b49331",target:"_blank",rel:"noopener noreferrer"}},[e._v("47e8403"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("drywrite:")]),e._v(" throw on bad drywrite and continue if successful ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5052c0a4deb06ac938d898d990e425dcc8ac6443",target:"_blank",rel:"noopener noreferrer"}},[e._v("5052c0a"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("eslintignore:")]),e._v(" remove old file names ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/415c1632fc1d363894d17d4a335c7a0bbf78f3d8",target:"_blank",rel:"noopener noreferrer"}},[e._v("415c163"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("eslint:")]),e._v(" remove eslint comments and use this signer ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/32530eb777367b71bfba16bd97dcf6d6a75de791",target:"_blank",rel:"noopener noreferrer"}},[e._v("32530eb"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("esm:")]),e._v(" add polyfills for crypto ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/dd8fbfe5b373ba95ec406c1642e81ef520cdeddb",target:"_blank",rel:"noopener noreferrer"}},[e._v("dd8fbfe"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("esm:")]),e._v(" add polyfills for crypto ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/27",target:"_blank",rel:"noopener noreferrer"}},[e._v("#27"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/553822cab7ec8652efbc9545ef3c20c0312c38f0",target:"_blank",rel:"noopener noreferrer"}},[e._v("553822c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("example web:")]),e._v(" update ario instatiation ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/77c68429af5e5a50f4ed2e8bd2bf7fdc67b8a2a6",target:"_blank",rel:"noopener noreferrer"}},[e._v("77c6842"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("example:")]),e._v(" escape quotes in packagejson for example package json ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/fb47de0336b33405d81992cfce8e9993d2531f8b",target:"_blank",rel:"noopener noreferrer"}},[e._v("fb47de0"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("example:")]),e._v(" simplify example and remove unused method on remote cache ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/81637f89c2eab304d7ccf11d1eac9503aa3d7592",target:"_blank",rel:"noopener noreferrer"}},[e._v("81637f8"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("examples:")]),e._v(" update comments and fix package.json ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/db7140b815be1ea6fe1b270827fc4afb61707546",target:"_blank",rel:"noopener noreferrer"}},[e._v("db7140b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("examples:")]),e._v(" update examples to use devnet ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/cc037ac5a3df2e76375679b8b14723c3b5d51fe2",target:"_blank",rel:"noopener noreferrer"}},[e._v("cc037ac"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("examples:")]),e._v(" update examples with records methods, and balance methods ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a2d2a02befd64cff500932fe609b29d79ddf096c",target:"_blank",rel:"noopener noreferrer"}},[e._v("a2d2a02"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("exports:")]),e._v(" add arweavesigner and arconnectsigner to exports, clean up docs ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c7860ed40d19ac43c091b6afd52db0402537e7ee",target:"_blank",rel:"noopener noreferrer"}},[e._v("c7860ed"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("exports:")]),e._v(" update exports in indices ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f79443732909fbc4c81d78957ca306bfb538caa3",target:"_blank",rel:"noopener noreferrer"}},[e._v("f794437"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("exports:")]),e._v(" update package exports to have index in src folder ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2cce9e31efb2fd0bf8734d930deda301838da8d9",target:"_blank",rel:"noopener noreferrer"}},[e._v("2cce9e3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("files:")]),e._v(" clean git cache of duplicate casing ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e9eaa2d93122bad5008010c13710b5fa8bcd7533",target:"_blank",rel:"noopener noreferrer"}},[e._v("e9eaa2d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("filters:")]),e._v(" punt filters ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1c23cb3cf2ce8adc594fd2ba699e5ac32f4ef7b6",target:"_blank",rel:"noopener noreferrer"}},[e._v("1c23cb3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("fixture:")]),e._v(" add type to arns state fixture ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5bcac3211d78e08ead3e14da6e06aa41e9a65598",target:"_blank",rel:"noopener noreferrer"}},[e._v("5bcac32"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("formating:")]),e._v(" format ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/3f30f772a7571b9958f8a202128abd483da372b5",target:"_blank",rel:"noopener noreferrer"}},[e._v("3f30f77"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("gar write:")]),e._v(" fix types and flow on gar write ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f5e77741107b82df24c293a1cde37a4a907e1f4c",target:"_blank",rel:"noopener noreferrer"}},[e._v("f5e7774"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("gateway:")]),e._v(" update gateway settings to support autostake ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/82c68408fb562146053b9180dacc53fb490743ea",target:"_blank",rel:"noopener noreferrer"}},[e._v("82c6840"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("generics:")]),e._v(" use named generic ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4b647f076b6cd3f4676f0bf7dbf6a5c020214e63",target:"_blank",rel:"noopener noreferrer"}},[e._v("4b647f0"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("gitignore:")]),e._v(" remove cache from gitignore ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2867abcdba2fc4a4cece01c6ed3346065a54e2eb",target:"_blank",rel:"noopener noreferrer"}},[e._v("2867abc"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("git:")]),e._v(" test fix with file casing issue ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c3611ee8fe9ef75ef2d91aa8bade99fee221c69a",target:"_blank",rel:"noopener noreferrer"}},[e._v("c3611ee"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("headers:")]),e._v(" use source-version for header ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2b26d888e176ed745fbc06fbe427993046d8cb18",target:"_blank",rel:"noopener noreferrer"}},[e._v("2b26d88"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("http:")]),e._v(" add headers sdk headers to http config ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/94810edb03272daccfbf05fb5625ba4aa3ee06f4",target:"_blank",rel:"noopener noreferrer"}},[e._v("94810ed"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("husky:")]),e._v(" add commit hooks ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/885ce68c3b734ac95e1293078ce835333bc45d9f",target:"_blank",rel:"noopener noreferrer"}},[e._v("885ce68"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("imports:")]),e._v(" update to use indexed imports from warp ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/124256835e0137fb1332e0e7a670ccfaad8ef228",target:"_blank",rel:"noopener noreferrer"}},[e._v("1242568"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("indentation:")]),e._v(" fix indentation in examples ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a266731e14b480d04e3be1fa558de368f366682d",target:"_blank",rel:"noopener noreferrer"}},[e._v("a266731"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("interface:")]),e._v(" removed filters and added base records types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/849834db2c88ffc362c54f9844f936a1c8ab23dc",target:"_blank",rel:"noopener noreferrer"}},[e._v("849834d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("interface:")]),e._v(" rename interface to ContractCache ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2a0a76546326d2a47f5cef1dde3c105f4deaad50",target:"_blank",rel:"noopener noreferrer"}},[e._v("2a0a765"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("jest:")]),e._v(" remove extra config ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/014fbde09f4c533c957d6372345616c13df2a29d",target:"_blank",rel:"noopener noreferrer"}},[e._v("014fbde"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("lint:")]),e._v(" disable no-any warning certain types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/de5f10874e6bf2deaca89d35ac11e1a11a64ad59",target:"_blank",rel:"noopener noreferrer"}},[e._v("de5f108"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("lint:")]),e._v(" formatting ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/21224e2f47605d1959853c99ddb1c8a3df6a0d7d",target:"_blank",rel:"noopener noreferrer"}},[e._v("21224e2"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("logger, errors, http:")]),e._v(" Updated to axios and axios-retry, added winston logger, more extensive custom error objects ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b944f4db494531a346ab025e28a8a6cd46f5d546",target:"_blank",rel:"noopener noreferrer"}},[e._v("b944f4d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("logger:")]),e._v(" remove unused logger property ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9501d1d3571980fb4e157c022e0ea0f8e60f9a0a",target:"_blank",rel:"noopener noreferrer"}},[e._v("9501d1d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("logs:")]),e._v(" removing debug logs ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f025171586e2f440ef92550ddf37c5254db86a44",target:"_blank",rel:"noopener noreferrer"}},[e._v("f025171"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("mixin:")]),e._v(" filter private methods in mixin util ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/beb8610807038a7fc51baaa266db1435781c6e8c",target:"_blank",rel:"noopener noreferrer"}},[e._v("beb8610"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("naming:")]),e._v(" change epoch to epochStartHeight ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/908971c273aaac20ab320e867ec1e790706a11f3",target:"_blank",rel:"noopener noreferrer"}},[e._v("908971c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("naming:")]),e._v(" rename getRecord[s] to getArNSRecord[s] ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/bd3d4bc25a7528ba9f093a96cf0ed33439160d27",target:"_blank",rel:"noopener noreferrer"}},[e._v("bd3d4bc"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("overloads:")]),e._v(" only accept warp contract as a contract config for ariowritable ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e3c97e9eaddc98e704a2192bcae6dfdee42f7ae6",target:"_blank",rel:"noopener noreferrer"}},[e._v("e3c97e9"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("polyfills:")]),e._v(" rollback polyfill on logger ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0cdb2f0a1e23c111b57f788f51780f98f186ec7d",target:"_blank",rel:"noopener noreferrer"}},[e._v("0cdb2f0"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("postinstall:")]),e._v(" remove husky postinstall script ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c74a13591c75271352135f8c30055623cf536ed2",target:"_blank",rel:"noopener noreferrer"}},[e._v("c74a135"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("readme:")]),e._v(" add grammar and example recs ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ecc07f7f5c89fd8fbe66d2b79db44a62285057d4",target:"_blank",rel:"noopener noreferrer"}},[e._v("ecc07f7"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("readme:")]),e._v(" condense quick start ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/b35e5bd94e950255a15c1bf0ffa1bf1aa47a3395",target:"_blank",rel:"noopener noreferrer"}},[e._v("b35e5bd"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("readme:")]),e._v(" refactor api list to header tags ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/817d99b05d45caf435fdfe26065a70407f0bce56",target:"_blank",rel:"noopener noreferrer"}},[e._v("817d99b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("readme:")]),e._v(" update ant header ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/77235ce077ef4a12dfa6b403968b6ab148ebf196",target:"_blank",rel:"noopener noreferrer"}},[e._v("77235ce"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("readme:")]),e._v(" update ANT usage description ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/70c852087f75a17c494cc12719d1dc9f96da39f2",target:"_blank",rel:"noopener noreferrer"}},[e._v("70c8520"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("readme:")]),e._v(" update joinNetwork docs ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9fcf440d2ed2f71005f1e9bd3b0a7691aae90a63",target:"_blank",rel:"noopener noreferrer"}},[e._v("9fcf440"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("readme:")]),e._v(" update quick start ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a60d96a821b5e77a68b7682c5e74e5dc01ca2f28",target:"_blank",rel:"noopener noreferrer"}},[e._v("a60d96a"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("readme:")]),e._v(" update readme with default provider example ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/68a5a1697ae0c4c6797ef355f887408d72030cf8",target:"_blank",rel:"noopener noreferrer"}},[e._v("68a5a16"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("readme:")]),e._v(" update readme with examples ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d9ee23eb99d9d845098324dba77497284942f35c",target:"_blank",rel:"noopener noreferrer"}},[e._v("d9ee23e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("record records:")]),e._v(" update key to use result instead of record ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/90314dbdb91806222a7e822951a89aaeea5596ed",target:"_blank",rel:"noopener noreferrer"}},[e._v("90314db"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("records:")]),e._v(" remove contractTxId filter remove lodash shrink readme ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/50669e1e203d038dfcf3a0e30d7637122d4b4777",target:"_blank",rel:"noopener noreferrer"}},[e._v("50669e1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("records:")]),e._v(" use state endpoint to fetch records ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2f02c53d990dffe526de96e762ddbcbf1b3a8770",target:"_blank",rel:"noopener noreferrer"}},[e._v("2f02c53"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("recs:")]),e._v(" modify the interfaces for contracts and implement with warp and remote service ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/13",target:"_blank",rel:"noopener noreferrer"}},[e._v("#13"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/56ebb08616e4002a8037747dcd5e9e070dae6a0d",target:"_blank",rel:"noopener noreferrer"}},[e._v("56ebb08"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("release:")]),e._v(" remove release assets entirely ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9d5a1b3b693134062754892674428936df122c9b",target:"_blank",rel:"noopener noreferrer"}},[e._v("9d5a1b3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("release:")]),e._v(" update github release config to publish packages to github ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5534d9d6c9b86b1642668705dc0cb6c301f03d9e",target:"_blank",rel:"noopener noreferrer"}},[e._v("5534d9d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("remote:")]),e._v(" getState not properly setting evalTo in http requests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/55745c1881af9ea93a0545e1b04eaff210257802",target:"_blank",rel:"noopener noreferrer"}},[e._v("55745c1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("safety:")]),e._v(" update type safety checks ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/32eebbc21a4592384dd6fed3247f0e00292b6471",target:"_blank",rel:"noopener noreferrer"}},[e._v("32eebbc"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("setimmediate:")]),e._v(" make set immediate a build dependency as it is required by the node winston ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9292eaab29c3c955d1c981d6d22fa6e11da55500",target:"_blank",rel:"noopener noreferrer"}},[e._v("9292eaa"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" check that contract is connected before trying to write ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d352e9c7ac1038caa238df21d1165345c64d61de",target:"_blank",rel:"noopener noreferrer"}},[e._v("d352e9c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" check that contract is connected before trying to write ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/29",target:"_blank",rel:"noopener noreferrer"}},[e._v("#29"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/536a116c1cfecd1bfbe1ffc9d5fe87ab4006a81c",target:"_blank",rel:"noopener noreferrer"}},[e._v("536a116"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" fix signer in WarpContracts - update tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ea9448f3440c58811891fa37db2ceb7948b8d200",target:"_blank",rel:"noopener noreferrer"}},[e._v("ea9448f"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" fix signer in WarpContracts - update tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/32",target:"_blank",rel:"noopener noreferrer"}},[e._v("#32"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/16d69d8a996d0692b28c956d7ec7f38245ff2f6b",target:"_blank",rel:"noopener noreferrer"}},[e._v("16d69d8"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" remove jwk use, ignore web example for now ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/bc7e577e0f7f42a91ae4bbca853addf7f178a1f8",target:"_blank",rel:"noopener noreferrer"}},[e._v("bc7e577"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" remove signer, will do in other pr ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d02276dd9fa166d254eb76a45e2c6025f632c0ba",target:"_blank",rel:"noopener noreferrer"}},[e._v("d02276d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" remove use of JWK, simplify constructor ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/22",target:"_blank",rel:"noopener noreferrer"}},[e._v("#22"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d2ef5732d1ef268d9fb1420c96f520b0fcb4bedd",target:"_blank",rel:"noopener noreferrer"}},[e._v("d2ef573"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" update ANT to have signer ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c7f8eeec4c2141548d202f76934304a310b177b7",target:"_blank",rel:"noopener noreferrer"}},[e._v("c7f8eee"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("structure:")]),e._v(" update cache provider folder to be named caches ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/844c1aab722316db14167f22a397858a2c9c6bbf",target:"_blank",rel:"noopener noreferrer"}},[e._v("844c1aa"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("structure:")]),e._v(" use snake case for file and folder names ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/37f27d3b6a526a37a88ccbf7480f4bc6dc06153f",target:"_blank",rel:"noopener noreferrer"}},[e._v("37f27d3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("test warp-contract:")]),e._v(" use beforeAll to read env vars ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/95cc0194ffd9b04a0e389557ad39e53cfa87c443",target:"_blank",rel:"noopener noreferrer"}},[e._v("95cc019"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" add test cases as a const ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/845818528fc5364971738fa549173f6f019065c0",target:"_blank",rel:"noopener noreferrer"}},[e._v("8458185"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" add test for custom arIO client config ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0e6142bedaffbf86e79840d830499d4e1aacbced",target:"_blank",rel:"noopener noreferrer"}},[e._v("0e6142b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" change control flow pattern to .catch instead of trycatch ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/883de51f85f32807a62f189b00ac485ecfdcfd69",target:"_blank",rel:"noopener noreferrer"}},[e._v("883de51"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" dont make blockHeight or sortKey undefined but rather evalTo ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f76a201eb53069f611b17bfef01506143fdec080",target:"_blank",rel:"noopener noreferrer"}},[e._v("f76a201"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" instantiate new ant to connect in tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/98694156a55a5dfba2a96cb09b4f734c33ed0c64",target:"_blank",rel:"noopener noreferrer"}},[e._v("9869415"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" remove dryWrite from writeInteraction, update tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/bc1becc1597b11c80d56b21d9a7137e170b69399",target:"_blank",rel:"noopener noreferrer"}},[e._v("bc1becc"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" remove fixture and use live service for tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/30d3e8cddc1f85f19467af19d191558575351e63",target:"_blank",rel:"noopener noreferrer"}},[e._v("30d3e8c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" test 404 response ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/590dea6c6285bd8c786c02dcdbdc85fba7364fc6",target:"_blank",rel:"noopener noreferrer"}},[e._v("590dea6"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update ario test ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4208bd023c9f1026a49a5bea3a06beb51a3494b7",target:"_blank",rel:"noopener noreferrer"}},[e._v("4208bd0"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update client instantiation test to check read vs write clients ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/059653c38ed78aa305a796bcf8a18a119c83d63c",target:"_blank",rel:"noopener noreferrer"}},[e._v("059653c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update docker compose params ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a71befd8b06e18181f52ca78babe878196f3673f",target:"_blank",rel:"noopener noreferrer"}},[e._v("a71befd"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update gateways test ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1fcb3e6c52c47d5c2e9b7df32eff944ec511fec6",target:"_blank",rel:"noopener noreferrer"}},[e._v("1fcb3e6"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update stubs in tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e4bbc6e691fec0f60c0ff84c4ead9620dcc28739",target:"_blank",rel:"noopener noreferrer"}},[e._v("e4bbc6e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update test to match jest syntax ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/553bdbb2aaff0a26a0aeaa34c9ec614379d30dca",target:"_blank",rel:"noopener noreferrer"}},[e._v("553bdbb"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update tests for named prop expectation ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4ea04a735ec8c0a0c0cc8859d7bfa42bd6f9110e",target:"_blank",rel:"noopener noreferrer"}},[e._v("4ea04a7"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update tests to use younger contract, add evalParams config ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/ae890c85f5fca785f88c60a751fb617b2389de61",target:"_blank",rel:"noopener noreferrer"}},[e._v("ae890c8"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update tests with constants and update types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1bdcfebae93123aa46f500ebbd9693d3e1e36ef6",target:"_blank",rel:"noopener noreferrer"}},[e._v("1bdcfeb"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update tests with new name ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2cd1b5ce18ed63c2b787d70e7e502aade26315eb",target:"_blank",rel:"noopener noreferrer"}},[e._v("2cd1b5c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" update with new names on methods ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/619c193d210536a2e4ee1308805ce348298b42c8",target:"_blank",rel:"noopener noreferrer"}},[e._v("619c193"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" use angela for testing ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/10f30fe0770cb2cfef4f0a2ce18a4c5e4fe5ce77",target:"_blank",rel:"noopener noreferrer"}},[e._v("10f30fe"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" use http not https in tests ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/fddba1e34c9a195cb6a5cdcf3ec6f3dcbd41524c",target:"_blank",rel:"noopener noreferrer"}},[e._v("fddba1e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tests:")]),e._v(" use process vars as priority url ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/faab4f3ee7624828cb25a32b6ecfb655cd5c1fc5",target:"_blank",rel:"noopener noreferrer"}},[e._v("faab4f3"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("test:")]),e._v(" update test to use ArweaveTransactionID class ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f6c4f8ba23a921eba281596b29dff3fece82b322",target:"_blank",rel:"noopener noreferrer"}},[e._v("f6c4f8b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tsconfig, names:")]),e._v(" reverted tsconfig to nodenext resolution, changed naming convention on provider, removed extraeneous error classes, rolled back axios-retry to match our tsconfig settings ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d412d44dc9fd71fe6a81deb37e99b8c24f6b4661",target:"_blank",rel:"noopener noreferrer"}},[e._v("d412d44"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("tyeps:")]),e._v(" set types to objects rather than top level params for easier readability ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/edfd77bb01f38c21f2e96aacaea07705372fe664",target:"_blank",rel:"noopener noreferrer"}},[e._v("edfd77b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("type:")]),e._v(" rename all type implementations ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/595904509e152188eeadb07fbf57495b941a45bf",target:"_blank",rel:"noopener noreferrer"}},[e._v("5959045"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types and tests:")]),e._v(" update evalTo to allow undefined sortKey and block and test that ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a59f05c8669750b59b01ee140bcd84d91b9cfaf8",target:"_blank",rel:"noopener noreferrer"}},[e._v("a59f05c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" add @ to records ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/53601c1d08f7bf3e522f25b58e514b0c809ad195",target:"_blank",rel:"noopener noreferrer"}},[e._v("53601c1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" make props nullable on certain read apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/f8ff552ed6de9516476e74e6aad92e72a8d3adb3",target:"_blank",rel:"noopener noreferrer"}},[e._v("f8ff552"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" remove any type ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5c8024261b5e13ee4f4d697b545a710b7cf136d1",target:"_blank",rel:"noopener noreferrer"}},[e._v("5c80242"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" remove any types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/d8d910b9f2d0b95232ccf3c52e74f57b086df435",target:"_blank",rel:"noopener noreferrer"}},[e._v("d8d910b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" remove ArweaveTransactionID type for now ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/3adf53bd54041bc5dbc6956586bfebcfe66bd71c",target:"_blank",rel:"noopener noreferrer"}},[e._v("3adf53b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" remove unnecesssary empty defaults ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7d14edb55c7db6a949d717fe19ffe1ae87916a9d",target:"_blank",rel:"noopener noreferrer"}},[e._v("7d14edb"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" rename signer to ContractSigner ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/87d6c90b625b8bb97d68ea89d63d7a97ea894051",target:"_blank",rel:"noopener noreferrer"}},[e._v("87d6c90"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" require atleast one param to update gateway settings ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/857ebdc1b0dd39d5b12943f9b15dd0ddb9b5785e",target:"_blank",rel:"noopener noreferrer"}},[e._v("857ebdc"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" update interaction type to only use read for now ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2c02e90076bc0fe8580bef041cd7c07e65db43d9",target:"_blank",rel:"noopener noreferrer"}},[e._v("2c02e90"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" update tests, readme, and types ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e9985ddada117561f8e666d133b3d573e0beef3e",target:"_blank",rel:"noopener noreferrer"}},[e._v("e9985dd"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" use partial write type ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/fa6a638ae9d69b234b264c3e510c09709fc56fd8",target:"_blank",rel:"noopener noreferrer"}},[e._v("fa6a638"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("types:")]),e._v(" use string instead of any ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/014a26210b2482b3aa5150b4fd37925760f39dd8",target:"_blank",rel:"noopener noreferrer"}},[e._v("014a262"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("validate id:")]),e._v(" make validator a private method ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/dce4a948e38ae0f6af3658dcb066861c766f5ed9",target:"_blank",rel:"noopener noreferrer"}},[e._v("dce4a94"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("validity util:")]),e._v(" isBlockheight check more strict ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/2b28675fabb97be0cadfbc8a47241b0bcc5bd9fd",target:"_blank",rel:"noopener noreferrer"}},[e._v("2b28675"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("warp contract:")]),e._v(" added test for getting state after connecting with warp ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/060ee2c4a8bc21c345eb6ab006c3da41b29ff7d5",target:"_blank",rel:"noopener noreferrer"}},[e._v("060ee2c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("warp-contract:")]),e._v(" provide logger - update isTransaction flow ctrl - use typed props ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5f6e0a17662e43d4b2d560fcd505a07e006a308b",target:"_blank",rel:"noopener noreferrer"}},[e._v("5f6e0a1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("warp-contracts:")]),e._v(" bump warp to 1.4.38 - fixed warp exports ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/af4a20b0df97867327bdfea12f4eb1956d531352",target:"_blank",rel:"noopener noreferrer"}},[e._v("af4a20b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("winston:")]),e._v(" move the winston polyfill - this will prevent any esm based web projects from getting polyfill issues ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c8b7998db824506c1e213557e859604d903aab9c",target:"_blank",rel:"noopener noreferrer"}},[e._v("c8b7998"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("write:")]),e._v(" add dry run - sync state - abortSignal - update interface ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/970bdefaff2eea93e3c0783dccafd6276a80ea03",target:"_blank",rel:"noopener noreferrer"}},[e._v("970bdef"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("write:")]),e._v(" update utils - change error flow - update arweave constructor props ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0a81c920e82c03beba7dad41c189c00e128ced10",target:"_blank",rel:"noopener noreferrer"}},[e._v("0a81c92"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("write:")]),e._v(" update write methods on warp ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/9c0540b1f98af68ada417e1e052d282a1c93fb07",target:"_blank",rel:"noopener noreferrer"}},[e._v("9c0540b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("yarn:")]),e._v(" update lockfile ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/fd5e0ee013a40568e88a06ff4ac1e630559a68c0",target:"_blank",rel:"noopener noreferrer"}},[e._v("fd5e0ee"),r("OutboundLink")],1),e._v(")")])]),e._v(" "),r("h3",{attrs:{id:"features-6"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#features-6"}},[e._v("#")]),e._v(" Features")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("ant:")]),e._v(" add ANT read interface ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c941c96cd201983270cc9e04c0fcaa5b4dc3b798",target:"_blank",rel:"noopener noreferrer"}},[e._v("c941c96"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ant:")]),e._v(" create ant contract class for interacting with ant contracts ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/6eb7ef5ed7f0ec3e64e0c18e97a708d7c528ff21",target:"_blank",rel:"noopener noreferrer"}},[e._v("6eb7ef5"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ants:")]),e._v(" add readable-writable framework to the ant client and implement write methods ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/3019f53953d362629a34c6282012b58de1171b23",target:"_blank",rel:"noopener noreferrer"}},[e._v("3019f53"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("ario contract:")]),e._v(" add distributions and observation apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/21e38d1229e640a1cec685f491b1b07b84ee6a56",target:"_blank",rel:"noopener noreferrer"}},[e._v("21e38d1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("arioContract:")]),e._v(" update ArIO interface and ArIOContract interface ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5d87e2e9b707e30caaf960585e3300efbab420bb",target:"_blank",rel:"noopener noreferrer"}},[e._v("5d87e2e"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("auctions:")]),e._v(" add auctions apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/faf08c51f3b499e158e96cc2a0b97a06a20c6f8c",target:"_blank",rel:"noopener noreferrer"}},[e._v("faf08c5"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contract:")]),e._v(" add distribution, observations apis, update readme and examples ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0208317c211d659afbbc55d06345a0c33cd076eb",target:"_blank",rel:"noopener noreferrer"}},[e._v("0208317"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("contract:")]),e._v(" create new contract classes that impelement both warp and remote cache for ant contract and ar-io contracts ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/855da2d1ce53ade61025e9a2513ac706e362e0b1",target:"_blank",rel:"noopener noreferrer"}},[e._v("855da2d"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("first issue:")]),e._v(" setup examples, readme, and initial gateways provider ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/5a9e2320219b8b61dec1cf8d0ecb74562b9ebed0",target:"_blank",rel:"noopener noreferrer"}},[e._v("5a9e232"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("gar methods:")]),e._v(" add gar write methods to the ario client ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e01b08beccb64112ae4ec333e9a5a2ea872b816f",target:"_blank",rel:"noopener noreferrer"}},[e._v("e01b08b"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("inital providers:")]),e._v(" scaffold initial providers ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/4949514a334eda107c87c77bef87ec839144c99f",target:"_blank",rel:"noopener noreferrer"}},[e._v("4949514"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("io transfer:")]),e._v(" add transfer api to ario writable client ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/0d37623bdf0a460242ac8d2b6f819f686fb2cbce",target:"_blank",rel:"noopener noreferrer"}},[e._v("0d37623"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("observerations:")]),e._v(" add "),r("code",[e._v("saveObservations")]),e._v(" write interaction ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/8dd977c55091b038c6b4a1b30fbeed5bc816f433",target:"_blank",rel:"noopener noreferrer"}},[e._v("8dd977c"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("observers:")]),e._v(" add API for fetching prescribed observers ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/a18e1306b185143b3b44416da168bf0610418d9c",target:"_blank",rel:"noopener noreferrer"}},[e._v("a18e130"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("observers:")]),e._v(" add API for fetching prescribed observers ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/17",target:"_blank",rel:"noopener noreferrer"}},[e._v("#17"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/17ce6de4aea61e5f97c999cdc96011dd911f7ad6",target:"_blank",rel:"noopener noreferrer"}},[e._v("17ce6de"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("PE-5742:")]),e._v(" add records api to arns remote cache ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/8",target:"_blank",rel:"noopener noreferrer"}},[e._v("#8"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/c46cd3968efe31f9dac3c6368b073b97adfaeb2a",target:"_blank",rel:"noopener noreferrer"}},[e._v("c46cd39"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("PE-5751:")]),e._v(" add blockheight and sortkey eval filters ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/12",target:"_blank",rel:"noopener noreferrer"}},[e._v("#12"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/832a1ad20f06407f21d87ad38111f1bae794efbc",target:"_blank",rel:"noopener noreferrer"}},[e._v("832a1ad"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("PE-5758:")]),e._v(" add signer to ario class ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/20",target:"_blank",rel:"noopener noreferrer"}},[e._v("#20"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1b820774104d90f2bcbec9a18c8fbca891616f7b",target:"_blank",rel:"noopener noreferrer"}},[e._v("1b82077"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("PE-5759:")]),e._v(" observations and distributions apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/16",target:"_blank",rel:"noopener noreferrer"}},[e._v("#16"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/dded3619784561b416297855724fc5924a1cd1d0",target:"_blank",rel:"noopener noreferrer"}},[e._v("dded361"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("PE-5773:")]),e._v(" add auctions read apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/18",target:"_blank",rel:"noopener noreferrer"}},[e._v("#18"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/e0c6fca49788b361478aca85d3dae3ca96f6aa97",target:"_blank",rel:"noopener noreferrer"}},[e._v("e0c6fca"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("PE-5800:")]),e._v(" add epoch apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/48ee4ba04e162c09e0d75c0194119fa9c76649d4",target:"_blank",rel:"noopener noreferrer"}},[e._v("48ee4ba"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("PE-5800:")]),e._v(" epoch apis ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/15",target:"_blank",rel:"noopener noreferrer"}},[e._v("#15"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/70563b18f07a31d001cc4610297182860536c2df",target:"_blank",rel:"noopener noreferrer"}},[e._v("70563b1"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("PE-5825:")]),e._v(" ANT read interface ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/issues/19",target:"_blank",rel:"noopener noreferrer"}},[e._v("#19"),r("OutboundLink")],1),e._v(") ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/6a0c47754689071d292eaebfa7b3af6c8e851fa4",target:"_blank",rel:"noopener noreferrer"}},[e._v("6a0c477"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("records:")]),e._v(" add records api to arns remote cache ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/1b7f54fb04d8fe390345eb47a3402744e2293709",target:"_blank",rel:"noopener noreferrer"}},[e._v("1b7f54f"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("signer:")]),e._v(" add arweave signer to ario class ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/7e08097e9abccf4a57673209751b2cd2fc25b746",target:"_blank",rel:"noopener noreferrer"}},[e._v("7e08097"),r("OutboundLink")],1),e._v(")")]),e._v(" "),r("li",[r("strong",[e._v("write:")]),e._v(" add write interface and base implementation on warp-contract ("),r("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/commit/6dfc969a23dd965fe169edeacf117aed8e59d642",target:"_blank",rel:"noopener noreferrer"}},[e._v("6dfc969"),r("OutboundLink")],1),e._v(")")])])])}),[],!1,null,null,null);r.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/66.4a3051de.js b/assets/js/66.ad256917.js similarity index 99% rename from assets/js/66.4a3051de.js rename to assets/js/66.ad256917.js index 148f489d..6823937f 100644 --- a/assets/js/66.4a3051de.js +++ b/assets/js/66.ad256917.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[66],{365:function(t,s,a){"use strict";a.r(s);var n=a(10),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"ar-io-sdk"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ar-io-sdk"}},[t._v("#")]),t._v(" ar-io sdk")]),t._v(" "),s("p",[t._v("The ar.io SDK provides functionality for interacting with the ar.io ecosystem of services (e.g. gateways and observers) and protocols (e.g. ArNS). It is available for both NodeJS and Web environments.")]),t._v(" "),s("h2",{attrs:{id:"prerequisites"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[t._v("#")]),t._v(" Prerequisites")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("node>=v18.0.0")])]),t._v(" "),s("li",[s("code",[t._v("npm")]),t._v(" or "),s("code",[t._v("yarn")])])]),t._v(" "),s("h2",{attrs:{id:"installation"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[t._v("#")]),t._v(" Installation")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" @ar.io/sdk\n")])])]),s("p",[t._v("or")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" @ar.io/sdk\n")])])]),s("h2",{attrs:{id:"quick-start"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#quick-start"}},[t._v("#")]),t._v(" Quick Start")]),t._v(" "),s("p",[t._v("Loading the gateway list in NodeJS.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@ar.io/sdk'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" gateways "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getGateways")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("gateways"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"end"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerWallet"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"operatorStake"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("250000000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// value in mIO")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"settings"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"fqdn"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ar-io.dev"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"label"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"AR.IO Test"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"note"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Test Gateway operated by PDS for the AR.IO ecosystem."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("443")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"properties"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"raJgvbFU-YAnku-WsupIdbTsqqGLQiYpGzoqk9SCVgY"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"protocol"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"start"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1256694")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stats"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"failedConsecutiveEpochs"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"passedEpochCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"submittedEpochCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalEpochParticipationCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalEpochsPrescribedCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"status"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"joined"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"vaults"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"weights"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stakeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("25")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"tenureWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.9031327160493827")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gatewayRewardRatioWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.96875")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerRewardRatioWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.96875")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"compositeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("21.189222170982834")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"normalizedCompositeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.27485583057217183")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h2",{attrs:{id:"usage"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[t._v("#")]),t._v(" Usage")]),t._v(" "),s("p",[t._v("The SDK is provided in both CommonJS and ESM formats and is compatible with bundlers such as Webpack, Rollup, and ESbuild. Utilize the appropriately named exports provided by this SDK's "),s("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/blob/main/package.json",target:"_blank",rel:"noopener noreferrer"}},[t._v("package.json"),s("OutboundLink")],1),t._v(" based on your project's configuration. Refer to the "),s("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/tree/main/examples",target:"_blank",rel:"noopener noreferrer"}},[t._v("examples"),s("OutboundLink")],1),t._v(" directory to see how to use the SDK in various environments.")]),t._v(" "),s("h3",{attrs:{id:"web"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#web"}},[t._v("#")]),t._v(" Web")]),t._v(" "),s("h4",{attrs:{id:"bundlers-webpack-rollup-esbuild-etc"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bundlers-webpack-rollup-esbuild-etc"}},[t._v("#")]),t._v(" Bundlers (Webpack, Rollup, ESbuild, etc.)")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@ar.io/sdk/web'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// set up client")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// fetch gateways")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" gateways "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getGateways")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[s("strong",[t._v("Note")]),t._v(": polyfills are only provided when using the named "),s("code",[t._v("@ar.io/sdk/web")]),t._v(" export (which requires "),s("code",[t._v("moduleResolution: nodenext")]),t._v(" in "),s("code",[t._v("tsconfig.json")]),t._v("). If you are using the default export within a Typescript project (e.g. "),s("code",[t._v("moduleResolution: node")]),t._v("), you will need to provide your own polyfills - specifically "),s("code",[t._v("crypto")]),t._v(", "),s("code",[t._v("fs")]),t._v(" and "),s("code",[t._v("buffer")]),t._v(". Refer to "),s("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/blob/main/examples/webpack",target:"_blank",rel:"noopener noreferrer"}},[t._v("examples/webpack"),s("OutboundLink")],1),t._v(" and "),s("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/blob/main/examples/vite",target:"_blank",rel:"noopener noreferrer"}},[t._v("examples/vite"),s("OutboundLink")],1),t._v(" for references in how to properly provide those polyfills. For other project configurations, refer to your bundler's documentation for more information on how to provide the necessary polyfills.")]),t._v(" "),s("h4",{attrs:{id:"browser"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#browser"}},[t._v("#")]),t._v(" Browser")]),t._v(" "),s("div",{staticClass:"language-html extra-class"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token script"}},[s("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://unpkg.com/@ar.io/sdk'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// set up client")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// fetch gateways")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" gateways "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getGateways")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),s("h4",{attrs:{id:"node"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#node"}},[t._v("#")]),t._v(" Node")]),t._v(" "),s("h5",{attrs:{id:"esm-nodenext"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#esm-nodenext"}},[t._v("#")]),t._v(" ESM (NodeNext)")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@ar.io/sdk/node'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// set up client")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// fetch gateways")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" gateways "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getGateways")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h5",{attrs:{id:"cjs"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#cjs"}},[t._v("#")]),t._v(" CJS")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@ar.io/sdk'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// set up client")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// fetch gateways")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" gateways "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getGateways")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h2",{attrs:{id:"typescript"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#typescript"}},[t._v("#")]),t._v(" Typescript")]),t._v(" "),s("p",[t._v("The SDK provides TypeScript types. When you import the SDK in a TypeScript project types are exported from "),s("code",[t._v("./lib/types/[node/web]/index.d.ts")]),t._v(" and should be automatically recognized by package managers, offering benefits such as type-checking and autocompletion.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Typescript version 5.3 or higher is recommended.")]),t._v(" "),s("h2",{attrs:{id:"iotoken-miotoken"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#iotoken-miotoken"}},[t._v("#")]),t._v(" IOToken & mIOToken")]),t._v(" "),s("p",[t._v("The ArIO contract stores all values as mIO (milli-IO) to avoid floating-point arithmetic issues. The SDK provides an "),s("code",[t._v("IOToken")]),t._v(" and "),s("code",[t._v("mIOToken")]),t._v(" classes to handle the conversion between IO and mIO, along with rounding logic for precision.")]),t._v(" "),s("p",[s("strong",[t._v("All contract interactions expect values in mIO. If numbers are provided as inputs, they are assumed to be in raw mIO values.")])]),t._v(" "),s("h3",{attrs:{id:"converting-io-to-mio"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#converting-io-to-mio"}},[t._v("#")]),t._v(" Converting IO to mIO")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" IOToken"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" mIOToken "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@ar.io/sdk'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ioValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" mIOValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ioValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toMIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mIOValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 1000000 (mIO)")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" mIOValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1_000_000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ioValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("mIOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mIOValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ioValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 1 (IO)")]),t._v("\n")])])]),s("h2",{attrs:{id:"io-process"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#io-process"}},[t._v("#")]),t._v(" IO Process")]),t._v(" "),s("h3",{attrs:{id:"apis"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#apis"}},[t._v("#")]),t._v(" APIs")]),t._v(" "),s("h4",{attrs:{id:"init-signer"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#init-signer"}},[t._v("#")]),t._v(" "),s("code",[t._v("init({ signer })")])]),t._v(" "),s("p",[t._v("Factory function to that creates a read-only or writeable client. By providing a "),s("code",[t._v("signer")]),t._v(" additional write APIs that require signing, like "),s("code",[t._v("joinNetwork")]),t._v(" and "),s("code",[t._v("delegateStake")]),t._v(" are available. By default, a read-only client is returned and no write APIs are available.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// read-only client")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// read-write client for browser environments")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArConnectSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("window"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("arweaveWallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Arweave"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// read-write client for node environments")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JWK")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"getinfo"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getinfo"}},[t._v("#")]),t._v(" "),s("code",[t._v("getInfo()")])]),t._v(" "),s("p",[t._v("Retrieves the information of the IO process.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" info "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInfo")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Testnet IO"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"ticker"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"tIO"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"owner"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"denomination"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"IO"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getbalance-address"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getbalance-address"}},[t._v("#")]),t._v(" "),s("code",[t._v("getBalance({ address })")])]),t._v(" "),s("p",[t._v("Retrieves the balance of the specified wallet address.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// the balance will be returned in mIO as a value")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" balance "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getBalance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n address"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'INSERT_WALLET_ADDRESS'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("then")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("balance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("mIOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("balance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("valueOf")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// value in IO")]),t._v("\n1_000_000\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getbalances-cursor-limit-sortby-sortorder"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getbalances-cursor-limit-sortby-sortorder"}},[t._v("#")]),t._v(" "),s("code",[t._v("getBalances({ cursor, limit, sortBy, sortOrder })")])]),t._v(" "),s("p",[t._v("Retrieves the balances of the IO process in "),s("code",[t._v("mIO")]),t._v(", paginated and sorted by the specified criteria. The "),s("code",[t._v("cursor")]),t._v(" used for pagination is the last wallet address from the previous request.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" balances "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getBalances")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n cursor"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'-4xgjroXENKYhTWqrBo57HQwvDL51mMdfsdsxJy6Y2Z_sA'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n limit"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n sortBy"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'balance'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n sortOrder"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'desc'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"items"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"address"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"-4xgjroXENKYhTWqrBo57HQwvDL51mMvSxJy6Y2Z_sA"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"balance"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1000000")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"hasMore"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"nextCursor"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"-7vXsQZQDk8TMDlpiSLy3CnLi5PDPlAaN2DaynORpck"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalItems"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1789")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"sortBy"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"balance"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"sortOrder"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"desc"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getgateway-address"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getgateway-address"}},[t._v("#")]),t._v(" "),s("code",[t._v("getGateway({ address })")])]),t._v(" "),s("p",[t._v("Retrieves a gateway's info by its staking wallet address.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" gateway "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getGateway")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n address"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'INSERT_GATEWAY_ADDRESS'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"end"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerWallet"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"operatorStake"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("250000000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// value in mIO")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"settings"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"fqdn"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ar-io.dev"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"label"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"AR.IO Test"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"note"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Test Gateway operated by PDS for the AR.IO ecosystem."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("443")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"properties"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"raJgvbFU-YAnku-WsupIdbTsqqGLQiYpGzoqk9SCVgY"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"protocol"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"start"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1256694")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stats"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"failedConsecutiveEpochs"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"passedEpochCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"submittedEpochCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalEpochParticipationCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalEpochsPrescribedCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"status"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"joined"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"vaults"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getgateways-cursor-limit-sortby-sortorder"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getgateways-cursor-limit-sortby-sortorder"}},[t._v("#")]),t._v(" "),s("code",[t._v("getGateways({ cursor, limit, sortBy, sortOrder })")])]),t._v(" "),s("p",[t._v("Retrieves registered gateways of the IO process, using pagination and sorting by the specified criteria. The "),s("code",[t._v("cursor")]),t._v(" used for pagination is the last gateway address from the previous request.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" gateways "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getGateways")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n limit"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n sortOrder"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'desc'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n sortBy"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'operatorStake'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("Available "),s("code",[t._v("sortBy")]),t._v(" options are any of the keys on the gateway object, e.g. "),s("code",[t._v("operatorStake")]),t._v(", "),s("code",[t._v("start")]),t._v(", "),s("code",[t._v("status")]),t._v(", "),s("code",[t._v("settings.fqdn")]),t._v(", "),s("code",[t._v("settings.label")]),t._v(", "),s("code",[t._v("settings.note")]),t._v(", "),s("code",[t._v("settings.port")]),t._v(", "),s("code",[t._v("settings.protocol")]),t._v(", "),s("code",[t._v("stats")]),t._v("."),s("code",[t._v("failedConsecutiveEpochs")]),t._v(", "),s("code",[t._v("stats.passedConsecutiveEpochs")]),t._v(", etc.")]),t._v(" "),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"items"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gatewayAddress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerAddress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"operatorStake"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("250000000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"settings"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"fqdn"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ar-io.dev"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"label"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"AR.IO Test"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"note"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Test Gateway operated by PDS for the AR.IO ecosystem."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("443")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"properties"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"raJgvbFU-YAnku-WsupIdbTsqqGLQiYpGzoqk9SCVgY"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"protocol"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720620813")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stats"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"failedConsecutiveEpochs"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"passedEpochCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"submittedEpochCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalEpochParticipationCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalEpochsPrescribedCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"status"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"joined"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"vaults"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"hasMore"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"nextCursor"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"-4xgjroXENKYhTWqrBo57HQwvDL51mMdfsdsxJy6Y2Z_sA"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalItems"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("316")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"sortBy"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"operatorStake"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"sortOrder"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"desc"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getarnsrecord-name"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getarnsrecord-name"}},[t._v("#")]),t._v(" "),s("code",[t._v("getArNSRecord({ name })")])]),t._v(" "),s("p",[t._v("Retrieves the record info of the specified ArNS name.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" record "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getArNSRecord")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ardrive'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"processId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"endTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1711122739")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1694101828")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"lease"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"undernames"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getarnsrecords-cursor-limit-sortby-sortorder"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getarnsrecords-cursor-limit-sortby-sortorder"}},[t._v("#")]),t._v(" "),s("code",[t._v("getArNSRecords({ cursor, limit, sortBy, sortOrder })")])]),t._v(" "),s("p",[t._v("Retrieves all registered ArNS records of the IO process, paginated and sorted by the specified criteria. The "),s("code",[t._v("cursor")]),t._v(" used for pagination is the last ArNS name from the previous request.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// get the 5 newest names")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" records "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getArNSRecords")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n limit"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n sortBy"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'startTimestamp'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n sortOrder"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'desc'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("Available "),s("code",[t._v("sortBy")]),t._v(" options are any of the keys on the record object, e.g. "),s("code",[t._v("name")]),t._v(", "),s("code",[t._v("processId")]),t._v(", "),s("code",[t._v("endTimestamp")]),t._v(", "),s("code",[t._v("startTimestamp")]),t._v(", "),s("code",[t._v("type")]),t._v(", "),s("code",[t._v("undernames")]),t._v(".")]),t._v(" "),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"items"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ao"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"processId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"eNey-H9RB9uCdoJUvPULb35qhZVXZcEXv8xds4aHhkQ"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"purchasePrice"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("75541282285")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720621424")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"permabuy"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"undernames"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ardrive"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"processId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"endTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720819969")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720620813")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"lease"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"undernames"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"arweave"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"processId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"endTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720819969")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720620800")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"lease"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"undernames"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ar-io"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"processId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"endTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720819969")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720619000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"lease"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"undernames"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fwd"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"processId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"endTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720819969")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720220811")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"lease"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"undernames"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"hasMore"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"nextCursor"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fwdresearch"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalItems"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("21740")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"sortBy"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"sortOrder"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"desc"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getobservations-epochindex"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getobservations-epochindex"}},[t._v("#")]),t._v(" "),s("code",[t._v("getObservations({ epochIndex })")])]),t._v(" "),s("p",[t._v("Returns the epoch-indexed observation list.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" observations "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getObservations")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"0"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"failureSummaries"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"-Tk2DDk8k4zkwtppp_XFKKI5oUgh6IEHygAoN7mD-w8"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Ie2wEEUDKoU26c7IuckHNn3vMFdNQnMvfPBrFzAb3NA"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Ie2wEEUDKoU26c7IuckHNn3vMFdNQnMvfPBrFzAb3NA"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"reports"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"B6UUjKWjjEWDBvDSMXWNmymfwvgR9EN27z5FTkEVlX4"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Ie2wEEUDKoU26c7IuckHNn3vMFdNQnMvfPBrFzAb3NA"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"7tKsiQ2fxv0D8ZVN_QEv29fZ8hwFIgHoEDrpeEG0DIs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"osZP4D9cqeDvbVFBaEfjIxwc1QLIvRxUBRAxDIX9je8"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"aatgznEvC_UPcxp1v0uw_RqydhIfKm4wtt1KCpONBB0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"qZ90I67XG68BYIAFVNfm9PUdM7v1XtFTn7u-EOZFAtk"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Bd8SmFK9-ktJRmwIungS8ur6JM-JtpxrvMtjt5JkB1M"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getdistributions-epochindex"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getdistributions-epochindex"}},[t._v("#")]),t._v(" "),s("code",[t._v("getDistributions({ epochIndex })")])]),t._v(" "),s("p",[t._v("Returns the current rewards distribution information.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" distributions "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getDistributions")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"epochEndHeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1382379")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"epochPeriod"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("43")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"epochStartHeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1381660")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"epochZeroStartHeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1350700")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"nextDistributionHeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1382394")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getepoch-epochindex"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getepoch-epochindex"}},[t._v("#")]),t._v(" "),s("code",[t._v("getEpoch({ epochIndex })")])]),t._v(" "),s("p",[t._v("Returns the epoch data for the specified block height.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" epoch "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getEpoch")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" epochIndex"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"epochIndex"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1694101828")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"endTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1711122739")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startHeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1350700")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"distributionTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1711122739")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observations"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"failureSummaries"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"-Tk2DDk8k4zkwtppp_XFKKI5oUgh6IEHygAoN7mD-w8"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Ie2wEEUDKoU26c7IuckHNn3vMFdNQnMvfPBrFzAb3NA"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"reports"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"B6UUjKWjjEWDBvDSMXWNmymfwvgR9EN27z5FTkEVlX4"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"prescribedNames"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ardrive"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ar-io"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"arweave"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fwd"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ao"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"prescribedObservers"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gatewayAddress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2Fk8lCmDegPg6jjprl57-UCpKmNgYiKwyhkU4vMNDnE"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerAddress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2Fk8lCmDegPg6jjprl57-UCpKmNgYiKwyhkU4vMNDnE"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stake"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10000000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// value in mIO")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"start"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1292450")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stakeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"tenureWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.4494598765432099")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gatewayRewardRatioWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerRewardRatioWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"compositeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.4494598765432099")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"normalizedCompositeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.002057032496835938")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"distributions"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"distributedTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1711122739")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalEligibleRewards"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"rewards"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100000000")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getcurrentepoch"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getcurrentepoch"}},[t._v("#")]),t._v(" "),s("code",[t._v("getCurrentEpoch()")])]),t._v(" "),s("p",[t._v("Returns the current epoch data.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" epoch "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getCurrentEpoch")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"epochIndex"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1694101828")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"endTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1711122739")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startHeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1350700")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"distributionTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1711122739")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observations"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"failureSummaries"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"-Tk2DDk8k4zkwtppp_XFKKI5oUgh6IEHygAoN7mD-w8"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Ie2wEEUDKoU26c7IuckHNn3vMFdNQnMvfPBrFzAb3NA"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"reports"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"B6UUjKWjjEWDBvDSMXWNmymfwvgR9EN27z5FTkEVlX4"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"prescribedNames"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ardrive"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ar-io"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"arweave"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fwd"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ao"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"prescribedObservers"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gatewayAddress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2Fk8lCmDegPg6jjprl57-UCpKmNgYiKwyhkU4vMNDnE"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerAddress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2Fk8lCmDegPg6jjprl57-UCpKmNgYiKwyhkU4vMNDnE"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stake"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10000000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// value in mIO")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"start"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1292450")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stakeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"tenureWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.4494598765432099")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gatewayRewardRatioWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerRewardRatioWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"compositeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.4494598765432099")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"normalizedCompositeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.002057032496835938")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"distributions"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"distributedTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1711122739")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalEligibleRewards"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"rewards"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100000000")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getprescribedobservers-epochindex"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getprescribedobservers-epochindex"}},[t._v("#")]),t._v(" "),s("code",[t._v("getPrescribedObservers({ epochIndex })")])]),t._v(" "),s("p",[t._v("Retrieves the prescribed observers of the IO process. To fetch prescribed observers for a previous epoch set the "),s("code",[t._v("epochIndex")]),t._v(" to the desired epoch.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" observers "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getPrescribedObservers")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" epochIndex"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gatewayAddress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"BpQlyhREz4lNGS-y3rSS1WxADfxPpAuing9Lgfdrj2U"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerAddress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2Fk8lCmDegPg6jjprl57-UCpKmNgYiKwyhkU4vMNDnE"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stake"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10000000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// value in mIO")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"start"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1296976")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stakeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"tenureWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.41453703703703704")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gatewayRewardRatioWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerRewardRatioWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"compositeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.41453703703703704")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"normalizedCompositeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.0018972019546783507")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"gettokencost-intent-args"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#gettokencost-intent-args"}},[t._v("#")]),t._v(" "),s("code",[t._v("getTokenCost({ intent, ...args })")])]),t._v(" "),s("p",[t._v("Calculates the price in mIO to perform the interaction in question, e.g. a "),s("code",[t._v("Buy-record")]),t._v(" interaction, where args are the specific params for that interaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" price "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getTokenCost")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n intent"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Buy-Record'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ar-io'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n type"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'permabuy'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("then")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("p"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("mIOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("p"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Price is returned as mio, convert to IO and log it out")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" price"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" price"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("valueOf")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"price"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1642.62")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"joinnetwork-params"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#joinnetwork-params"}},[t._v("#")]),t._v(" "),s("code",[t._v("joinNetwork( params )")])]),t._v(" "),s("p",[t._v("Joins a gateway to the ar.io network via its associated wallet.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("joinNetwork")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n qty"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10_000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toMIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// minimum operator stake allowed")]),t._v("\n autoStake"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// auto-stake operator rewards to the gateway")]),t._v("\n allowDelegatedStaking"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// allows delegated staking")]),t._v("\n minDelegatedStake"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toMIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// minimum delegated stake allowed")]),t._v("\n delegateRewardShareRatio"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// percentage of rewards to share with delegates (e.g. 10%)")]),t._v("\n label"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'john smith'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// min 1, max 64 characters")]),t._v("\n note"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'The example gateway'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// max 256 characters")]),t._v("\n properties"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'FH1aVetOoulPGqgYukj0VE0wIhDy90WiQoV3U2PeY44'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Arweave transaction ID containing additional properties of the Gateway")]),t._v("\n observerWallet"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'0VE0wIhDy90WiQoV3U2PeY44FH1aVetOoulPGqgYukj'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// wallet address of the observer, must match OBSERVER_WALLET on the observer")]),t._v("\n fqdn"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'example.com'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// fully qualified domain name - note: you must own the domain and set the OBSERVER_WALLET on your gateway to match `observerWallet`")]),t._v("\n port"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("443")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// port number")]),t._v("\n protocol"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// only 'https' is supported")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"leavenetwork"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#leavenetwork"}},[t._v("#")]),t._v(" "),s("code",[t._v("leaveNetwork()")])]),t._v(" "),s("p",[t._v("Sets the gateway as "),s("code",[t._v("leaving")]),t._v(" on the ar.io network. Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction. The gateway's operator and delegated stakes are vaulted and will be returned after the leave periods. The gateway will be removed from the network after the leave period.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("leaveNetwork")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"updategatewaysettings-gatewaysettings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#updategatewaysettings-gatewaysettings"}},[t._v("#")]),t._v(" "),s("code",[t._v("updateGatewaySettings( gatewaySettings )")])]),t._v(" "),s("p",[t._v("Writes new gateway settings to the caller's gateway configuration.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("updateGatewaySettings")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// any other settings you want to update")]),t._v("\n minDelegatedStake"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toMIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// t4Xr0_J4Iurt7caNST02cMotaz2FIbWQ4Kbj616RHl3")]),t._v("\n")])])]),s("h4",{attrs:{id:"increasedelegatestake-target-qty"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#increasedelegatestake-target-qty"}},[t._v("#")]),t._v(" "),s("code",[t._v("increaseDelegateStake({ target, qty })")])]),t._v(" "),s("p",[t._v("Increases the caller's stake on the target gateway.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("increaseDelegateStake")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n target"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'t4Xr0_J4Iurt7caNST02cMotaz2FIbWQ4Kbj616RHl3'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n qty"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toMIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"decreasedelegatestake-target-qty"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#decreasedelegatestake-target-qty"}},[t._v("#")]),t._v(" "),s("code",[t._v("decreaseDelegateStake({ target, qty })")])]),t._v(" "),s("p",[t._v("Decrease the caller's stake on the target gateway.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("decreaseDelegateStake")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n target"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'t4Xr0_J4Iurt7caNST02cMotaz2FIbWQ4Kbj616RHl3'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n qty"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toMIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"increaseoperatorstake-qty"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#increaseoperatorstake-qty"}},[t._v("#")]),t._v(" "),s("code",[t._v("increaseOperatorStake({ qty })")])]),t._v(" "),s("p",[t._v("Increases the caller's operator stake. Must be executed with a wallet registered as a gateway operator.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("increaseOperatorStake")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n qty"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toMIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"decreaseoperatorstake-qty"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#decreaseoperatorstake-qty"}},[t._v("#")]),t._v(" "),s("code",[t._v("decreaseOperatorStake({ qty })")])]),t._v(" "),s("p",[t._v("Decreases the caller's operator stake. Must be executed with a wallet registered as a gateway operator.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("decreaseOperatorStake")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n qty"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toMIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"saveobservations-reporttxid-failedgateways"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#saveobservations-reporttxid-failedgateways"}},[t._v("#")]),t._v(" "),s("code",[t._v("saveObservations({ reportTxId, failedGateways })")])]),t._v(" "),s("p",[t._v("Saves the observations of the current epoch.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("saveObservations")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n reportTxId"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'fDrr0_J4Iurt7caNST02cMotaz2FIbWQ4Kcj616RHl3'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n failedGateways"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'t4Xr0_J4Iurt7caNST02cMotaz2FIbWQ4Kbj616RHl3'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"transfer-target-qty-denomination"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#transfer-target-qty-denomination"}},[t._v("#")]),t._v(" "),s("code",[t._v("transfer({ target, qty, denomination })")])]),t._v(" "),s("p",[t._v("Transfers "),s("code",[t._v("IO")]),t._v(" or "),s("code",[t._v("mIO")]),t._v(" depending on the "),s("code",[t._v("denomination")]),t._v(" selected, defaulting as "),s("code",[t._v("IO")]),t._v(", to the designated "),s("code",[t._v("target")]),t._v(" recipient address.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("transfer")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n target"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'-5dV7nk7waR8v4STuwPnTck1zFVkQqJh5K9q9Zik4Y5'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n qty"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toMIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n denomination"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IO'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"increaseundernamelimit-name-qty"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#increaseundernamelimit-name-qty"}},[t._v("#")]),t._v(" "),s("code",[t._v("increaseUndernameLimit({ name, qty })")])]),t._v(" "),s("p",[t._v("Increases the undername support of a domain up to a maximum of 10k. Domains, by default, support up to 10 undernames.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("increaseUndernameLimit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ar-io'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n qty"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("420")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"extendlease-name-years"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#extendlease-name-years"}},[t._v("#")]),t._v(" "),s("code",[t._v("extendLease({ name, years })")])]),t._v(" "),s("p",[t._v("Extends the lease of a registered ArNS domain, with an extension of 1-5 years depending on grace period status. Permanently registered domains cannot be extended.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("extendLease")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ar-io'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n years"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h3",{attrs:{id:"configuration"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[t._v("#")]),t._v(" Configuration")]),t._v(" "),s("p",[t._v("The IO client class exposes APIs relevenat to the ar.io process. It can be configured to use any AO Process ID that adheres to the "),s("a",{attrs:{href:"https://github.com/ar-io/ar-io-network-process?tab=readme-ov-file#contract-spec",target:"_blank",rel:"noopener noreferrer"}},[t._v("IO Network Spec"),s("OutboundLink")],1),t._v(". By default, it will use the current "),s("a",{attrs:{href:"https://www.ao.link/#/entity/agYcCFJtrMG6cqMuZfskIkFTGvUPddICmtQSBIoPdiA",target:"_blank",rel:"noopener noreferrer"}},[t._v("IO testnet process"),s("OutboundLink")],1),t._v(". Refer to "),s("a",{attrs:{href:"https://github.com/permaweb/ao/tree/main/connect",target:"_blank",rel:"noopener noreferrer"}},[t._v("AO Connect"),s("OutboundLink")],1),t._v(" for more information on how to configure an IO process to use specific AO infrastructure.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// provide a custom ao infrastructure and process id")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n process"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AoProcess")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n processId"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IO_PROCESS_ID'")]),t._v("\n ao"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("connect")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("MU_URL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://mu-testnet.xyz'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CU_URL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://cu-testnet.xyz'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("GRAPHQL_URL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://arweave.net/graphql'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("GATEWAY_URL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://arweave.net'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h2",{attrs:{id:"arweave-name-tokens-ant-s"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#arweave-name-tokens-ant-s"}},[t._v("#")]),t._v(" Arweave Name Tokens (ANT's)")]),t._v(" "),s("p",[t._v("The ANT client class exposes APIs relevant to compliant Arweave Name Token processes. It can be configured to use any process ID that adheres to the ANT process spec. You must provide either a custom process data provider or a processId to the ANT class constructor to use.")]),t._v(" "),s("h3",{attrs:{id:"apis-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#apis-2"}},[t._v("#")]),t._v(" APIs")]),t._v(" "),s("h4",{attrs:{id:"init-signer-processid"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#init-signer-processid"}},[t._v("#")]),t._v(" "),s("code",[t._v("init({signer, processId })")])]),t._v(" "),s("p",[t._v("Factory function to that creates a read-only or writeable client. By providing a "),s("code",[t._v("signer")]),t._v(" additional write APIs that require signing, like "),s("code",[t._v("setRecord")]),t._v(" and "),s("code",[t._v("transfer")]),t._v(" are available. By default, a read-only client is returned and no write APIs are available.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// in a browser environment with ArConnect")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ant "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("ANT")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArConnectSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("window"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("arweaveWallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Arweave"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n processId"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM'")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// in a node environment")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ant "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("ANT")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JWK")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n processId"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM'")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"getinfo-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getinfo-2"}},[t._v("#")]),t._v(" "),s("code",[t._v("getInfo()")])]),t._v(" "),s("p",[t._v("Retrieves the information about the ANT process.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" info "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInfo")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Ardrive"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ticker"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ANT-ARDRIVE"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"owner"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getowner"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getowner"}},[t._v("#")]),t._v(" "),s("code",[t._v("getOwner()")])]),t._v(" "),s("p",[t._v("Returns the owner of the configured ANT process.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" owner "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getOwner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ccp3blG__gKUvG3hsGC2u06aDmqv4CuhuDJGOIg0jw4"')]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getcontrollers"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getcontrollers"}},[t._v("#")]),t._v(" "),s("code",[t._v("getControllers()")])]),t._v(" "),s("p",[t._v("Returns the controllers of the configured ANT process.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" controllers "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getControllers")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ccp3blG__gKUvG3hsGC2u06aDmqv4CuhuDJGOIg0jw4"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getrecords"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getrecords"}},[t._v("#")]),t._v(" "),s("code",[t._v("getRecords()")])]),t._v(" "),s("p",[t._v("Returns all records on the configured ANT process, including the required "),s("code",[t._v("@")]),t._v(" record that resolve connected ArNS names.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" records "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRecords")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"transactionId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"nOXJjj_vk0Dc1yCgdWD8kti_1iHruGzLQLNNBHVpN0Y"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ttlSeconds"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3600")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"cn"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"transactionId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"_HquerT6pfGFXrVxRxQTkJ7PV5RciZCqvMjLtUY0C1k"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ttlSeconds"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3300")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"dapp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"transactionId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"hxlxVgAG0K4o3fVD9T6Q4VBWpPmMZwMWgRh1kcuh3WU"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ttlSeconds"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3600")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"logo"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"transactionId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"KKmRbIfrc7wiLcG0zvY1etlO0NBx1926dSCksxCIN3A"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ttlSeconds"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3600")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"og"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"transactionId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"YzD_Pm5VAfYpMD3zQCgMUcKKuleGhEH7axlrnrDCKBo"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ttlSeconds"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3600")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"og_dapp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"transactionId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"5iR4wBu4KUV1pUz1YpYE1ARXSRHUT5G2ptMuoN2JDlI"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ttlSeconds"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3600")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"og_logo"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"transactionId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"TB2wJyKrPnkAW79DAwlJYwpgdHKpijEJWQfcwX715Co"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ttlSeconds"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3600")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"transfer-target"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#transfer-target"}},[t._v("#")]),t._v(" "),s("code",[t._v("transfer({ target })")])]),t._v(" "),s("p",[t._v("Transfers ownership of the ANT to a new target address. Target "),s("strong",[t._v("MUST")]),t._v(" be an Arweave address.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("ANT.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("transfer")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" target"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'aGzM_yjralacHIUo8_nQXMbh9l1cy0aksiL_x9M359f'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"setcontroller-controller"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setcontroller-controller"}},[t._v("#")]),t._v(" "),s("code",[t._v("setController({ controller })")])]),t._v(" "),s("p",[t._v("Adds a new controller to the list of approved controllers on the ANT. Controllers can set records and change the ticker and name of the ANT process.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("ANT.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setController")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" controller"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'aGzM_yjralacHIUo8_nQXMbh9l1cy0aksiL_x9M359f'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"removecontroller-controller"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#removecontroller-controller"}},[t._v("#")]),t._v(" "),s("code",[t._v("removeController({ controller })")])]),t._v(" "),s("p",[t._v("Removes a controller from the list of approved controllers on the ANT.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("ANT.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("removeController")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" controller"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'aGzM_yjralacHIUo8_nQXMbh9l1cy0aksiL_x9M359f'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"setrecord-subdomain-transactionid-ttlseconds"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setrecord-subdomain-transactionid-ttlseconds"}},[t._v("#")]),t._v(" "),s("code",[t._v("setRecord({ subDomain, transactionId, ttlSeconds })")])]),t._v(" "),s("p",[t._v("Updates or creates a record in the ANT process.")]),t._v(" "),s("p",[t._v("Records, or "),s("code",[t._v("undernames")]),t._v(" are configured with the "),s("code",[t._v("transactionId")]),t._v(" - the arweave transaction id the record resolves - and "),s("code",[t._v("ttlSeconds")]),t._v(", the Time To Live in the cache of client applications.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("ANT.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setRecord")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n undername"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n transactionId"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'432l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM'")]),t._v("\n ttlSeconds"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3600")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"removerecord-undername"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#removerecord-undername"}},[t._v("#")]),t._v(" "),s("code",[t._v("removeRecord({ undername })")])]),t._v(" "),s("p",[t._v("Removes a record from the ANT process.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("ANT.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("removeRecord")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" undername"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'remove-domemain'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"setname-name"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setname-name"}},[t._v("#")]),t._v(" "),s("code",[t._v("setName({ name })")])]),t._v(" "),s("p",[t._v("Sets the name of the ANT process.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("ANT.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setName")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My ANT'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"setticker-ticker"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setticker-ticker"}},[t._v("#")]),t._v(" "),s("code",[t._v("setTicker({ ticker })")])]),t._v(" "),s("p",[t._v("Sets the ticker of the ANT contract.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("ANT.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setTicker")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" ticker"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ANT-NEW-TICKER'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h3",{attrs:{id:"configuration-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configuration-2"}},[t._v("#")]),t._v(" Configuration")]),t._v(" "),s("p",[t._v("ANT clients can be configured to use custom AO processes. Refer to "),s("a",{attrs:{href:"https://github.com/permaweb/ao/tree/main/connect",target:"_blank",rel:"noopener noreferrer"}},[t._v("AO Connect"),s("OutboundLink")],1),t._v(" for more information on how to configure the AO process to use specific AO infrastructure.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ant "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("ANT")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n process"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AoProcess")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n processId"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ANT_PROCESS_ID'")]),t._v("\n ao"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("connect")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("MU_URL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://mu-testnet.xyz'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CU_URL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://cu-testnet.xyz'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("GRAPHQL_URL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://arweave.net/graphql'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("GATEWAY_URL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://arweave.net'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h2",{attrs:{id:"logging"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#logging"}},[t._v("#")]),t._v(" Logging")]),t._v(" "),s("p",[t._v("The library uses the "),s("a",{attrs:{href:"https://www.npmjs.com/package/winston",target:"_blank",rel:"noopener noreferrer"}},[t._v("Winston"),s("OutboundLink")],1),t._v(" logger for node based projects, and "),s("code",[t._v("console")]),t._v(" logger for web based projects by default. You can configure the log level via "),s("code",[t._v("setLogLevel()")]),t._v(" API. Alternatively you can set a custom logger as the default logger so long as it satisfies the "),s("code",[t._v("ILogger")]),t._v(" interface.")]),t._v(" "),s("h3",{attrs:{id:"configuration-3"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configuration-3"}},[t._v("#")]),t._v(" Configuration")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" Logger "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@ar.io/sdk'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// set the log level")]),t._v("\nLogger"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("default"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setLogLevel")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'debug'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// provide your own logger")]),t._v("\nLogger"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" winston"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createLogger")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("loggerConfigs "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// or some other logger that satisifes ILogger interface")]),t._v("\n")])])]),s("h2",{attrs:{id:"pagination"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#pagination"}},[t._v("#")]),t._v(" Pagination")]),t._v(" "),s("p",[t._v("Certain APIs that could return a large amount of data are paginated using cursors. The SDK uses the "),s("code",[t._v("cursor")]),t._v(" pattern (as opposed to pages) to better protect against changing data while paginating through a list of items. For more information on pagination strategies refer to "),s("a",{attrs:{href:"https://www.getknit.dev/blog/api-pagination-best-practices#api-pagination-techniques-",target:"_blank",rel:"noopener noreferrer"}},[t._v("this article"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[t._v("Paginated results include the following properties:")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("items")]),t._v(": the list of items on the current request, defaulted to 100 items.")]),t._v(" "),s("li",[s("code",[t._v("nextCursor")]),t._v(": the cursor to use for the next batch of items. This is "),s("code",[t._v("undefined")]),t._v(" if there are no more items to fetch.")]),t._v(" "),s("li",[s("code",[t._v("hasMore")]),t._v(": a boolean indicating if there are more items to fetch. This is "),s("code",[t._v("false")]),t._v(" if there are no more items to fetch.")]),t._v(" "),s("li",[s("code",[t._v("totalItems")]),t._v(": the total number of items available. This may change as new items are added to the list, only use this for informational purposes.")]),t._v(" "),s("li",[s("code",[t._v("sortBy")]),t._v(": the field used to sort the items, by default this is "),s("code",[t._v("startTimestamp")]),t._v(".")]),t._v(" "),s("li",[s("code",[t._v("sortOrder")]),t._v(": the order used to sort the items, by default this is "),s("code",[t._v("desc")]),t._v(".")])]),t._v(" "),s("p",[t._v("To request all the items in a list, you can iterate through the list using the "),s("code",[t._v("nextCursor")]),t._v(" until "),s("code",[t._v("hasMore")]),t._v(" is "),s("code",[t._v("false")]),t._v(".")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" hasMore "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" cursor"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" gateaways "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("hasMore"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" page "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getGateways")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" limit"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" cursor "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n gateaways"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("items"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n cursor "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" page"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextCursor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n hasMore "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" page"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("hasMore"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"developers"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#developers"}},[t._v("#")]),t._v(" Developers")]),t._v(" "),s("h3",{attrs:{id:"requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("node")]),t._v(" >= v18.0.0")]),t._v(" "),s("li",[s("code",[t._v("npm")]),t._v(" or "),s("code",[t._v("yarn")])]),t._v(" "),s("li",[s("code",[t._v("docker")]),t._v(" (recommended for testing)")])]),t._v(" "),s("h3",{attrs:{id:"setup-build"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setup-build"}},[t._v("#")]),t._v(" Setup & Build")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("nvm use")]),t._v(" - use the correct node version")]),t._v(" "),s("li",[s("code",[t._v("yarn install")]),t._v(" - installs dependencies")]),t._v(" "),s("li",[s("code",[t._v("yarn build")]),t._v(" - builds web/node/bundled outputs")])]),t._v(" "),s("h3",{attrs:{id:"testing"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#testing"}},[t._v("#")]),t._v(" Testing")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("yarn test:integration")]),t._v(" - runs integration tests against a local "),s("a",{attrs:{href:"https://github.com/ar-io/arns-service",target:"_blank",rel:"noopener noreferrer"}},[t._v("arns-service"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("code",[t._v("yarn example:web")]),t._v(" - opens up the example web page")]),t._v(" "),s("li",[s("code",[t._v("yarn example:cjs")]),t._v(" - runs example CJS node script")]),t._v(" "),s("li",[s("code",[t._v("yarn example:esm")]),t._v(" - runs example ESM node script")])]),t._v(" "),s("h3",{attrs:{id:"linting-formatting"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#linting-formatting"}},[t._v("#")]),t._v(" Linting & Formatting")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("yarn lint:check")]),t._v(" - checks for linting errors")]),t._v(" "),s("li",[s("code",[t._v("yarn lint:fix")]),t._v(" - fixes linting errors")]),t._v(" "),s("li",[s("code",[t._v("yarn format:check")]),t._v(" - checks for formatting errors")]),t._v(" "),s("li",[s("code",[t._v("yarn format:fix")]),t._v(" - fixes formatting errors")])]),t._v(" "),s("h3",{attrs:{id:"architecture"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#architecture"}},[t._v("#")]),t._v(" Architecture")]),t._v(" "),s("ul",[s("li",[t._v("Code to interfaces.")]),t._v(" "),s("li",[t._v("Prefer type safety over runtime safety.")]),t._v(" "),s("li",[t._v("Prefer composition over inheritance.")]),t._v(" "),s("li",[t._v("Prefer integration tests over unit tests.")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[66],{367:function(t,s,a){"use strict";a.r(s);var n=a(10),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"ar-io-sdk"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ar-io-sdk"}},[t._v("#")]),t._v(" ar-io sdk")]),t._v(" "),s("p",[t._v("The ar.io SDK provides functionality for interacting with the ar.io ecosystem of services (e.g. gateways and observers) and protocols (e.g. ArNS). It is available for both NodeJS and Web environments.")]),t._v(" "),s("h2",{attrs:{id:"prerequisites"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[t._v("#")]),t._v(" Prerequisites")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("node>=v18.0.0")])]),t._v(" "),s("li",[s("code",[t._v("npm")]),t._v(" or "),s("code",[t._v("yarn")])])]),t._v(" "),s("h2",{attrs:{id:"installation"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[t._v("#")]),t._v(" Installation")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" @ar.io/sdk\n")])])]),s("p",[t._v("or")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" @ar.io/sdk\n")])])]),s("h2",{attrs:{id:"quick-start"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#quick-start"}},[t._v("#")]),t._v(" Quick Start")]),t._v(" "),s("p",[t._v("Loading the gateway list in NodeJS.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@ar.io/sdk'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" gateways "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getGateways")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("gateways"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"end"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerWallet"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"operatorStake"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("250000000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// value in mIO")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"settings"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"fqdn"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ar-io.dev"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"label"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"AR.IO Test"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"note"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Test Gateway operated by PDS for the AR.IO ecosystem."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("443")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"properties"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"raJgvbFU-YAnku-WsupIdbTsqqGLQiYpGzoqk9SCVgY"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"protocol"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"start"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1256694")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stats"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"failedConsecutiveEpochs"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"passedEpochCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"submittedEpochCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalEpochParticipationCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalEpochsPrescribedCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"status"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"joined"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"vaults"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"weights"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stakeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("25")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"tenureWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.9031327160493827")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gatewayRewardRatioWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.96875")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerRewardRatioWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.96875")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"compositeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("21.189222170982834")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"normalizedCompositeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.27485583057217183")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h2",{attrs:{id:"usage"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[t._v("#")]),t._v(" Usage")]),t._v(" "),s("p",[t._v("The SDK is provided in both CommonJS and ESM formats and is compatible with bundlers such as Webpack, Rollup, and ESbuild. Utilize the appropriately named exports provided by this SDK's "),s("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/blob/main/package.json",target:"_blank",rel:"noopener noreferrer"}},[t._v("package.json"),s("OutboundLink")],1),t._v(" based on your project's configuration. Refer to the "),s("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/tree/main/examples",target:"_blank",rel:"noopener noreferrer"}},[t._v("examples"),s("OutboundLink")],1),t._v(" directory to see how to use the SDK in various environments.")]),t._v(" "),s("h3",{attrs:{id:"web"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#web"}},[t._v("#")]),t._v(" Web")]),t._v(" "),s("h4",{attrs:{id:"bundlers-webpack-rollup-esbuild-etc"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bundlers-webpack-rollup-esbuild-etc"}},[t._v("#")]),t._v(" Bundlers (Webpack, Rollup, ESbuild, etc.)")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@ar.io/sdk/web'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// set up client")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// fetch gateways")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" gateways "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getGateways")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[s("strong",[t._v("Note")]),t._v(": polyfills are only provided when using the named "),s("code",[t._v("@ar.io/sdk/web")]),t._v(" export (which requires "),s("code",[t._v("moduleResolution: nodenext")]),t._v(" in "),s("code",[t._v("tsconfig.json")]),t._v("). If you are using the default export within a Typescript project (e.g. "),s("code",[t._v("moduleResolution: node")]),t._v("), you will need to provide your own polyfills - specifically "),s("code",[t._v("crypto")]),t._v(", "),s("code",[t._v("fs")]),t._v(" and "),s("code",[t._v("buffer")]),t._v(". Refer to "),s("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/blob/main/examples/webpack",target:"_blank",rel:"noopener noreferrer"}},[t._v("examples/webpack"),s("OutboundLink")],1),t._v(" and "),s("a",{attrs:{href:"https://github.com/ar-io/ar-io-sdk/blob/main/examples/vite",target:"_blank",rel:"noopener noreferrer"}},[t._v("examples/vite"),s("OutboundLink")],1),t._v(" for references in how to properly provide those polyfills. For other project configurations, refer to your bundler's documentation for more information on how to provide the necessary polyfills.")]),t._v(" "),s("h4",{attrs:{id:"browser"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#browser"}},[t._v("#")]),t._v(" Browser")]),t._v(" "),s("div",{staticClass:"language-html extra-class"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token script"}},[s("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://unpkg.com/@ar.io/sdk'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// set up client")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// fetch gateways")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" gateways "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getGateways")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),s("h4",{attrs:{id:"node"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#node"}},[t._v("#")]),t._v(" Node")]),t._v(" "),s("h5",{attrs:{id:"esm-nodenext"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#esm-nodenext"}},[t._v("#")]),t._v(" ESM (NodeNext)")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@ar.io/sdk/node'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// set up client")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// fetch gateways")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" gateways "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getGateways")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h5",{attrs:{id:"cjs"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#cjs"}},[t._v("#")]),t._v(" CJS")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@ar.io/sdk'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// set up client")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// fetch gateways")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" gateways "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getGateways")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h2",{attrs:{id:"typescript"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#typescript"}},[t._v("#")]),t._v(" Typescript")]),t._v(" "),s("p",[t._v("The SDK provides TypeScript types. When you import the SDK in a TypeScript project types are exported from "),s("code",[t._v("./lib/types/[node/web]/index.d.ts")]),t._v(" and should be automatically recognized by package managers, offering benefits such as type-checking and autocompletion.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Typescript version 5.3 or higher is recommended.")]),t._v(" "),s("h2",{attrs:{id:"iotoken-miotoken"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#iotoken-miotoken"}},[t._v("#")]),t._v(" IOToken & mIOToken")]),t._v(" "),s("p",[t._v("The ArIO contract stores all values as mIO (milli-IO) to avoid floating-point arithmetic issues. The SDK provides an "),s("code",[t._v("IOToken")]),t._v(" and "),s("code",[t._v("mIOToken")]),t._v(" classes to handle the conversion between IO and mIO, along with rounding logic for precision.")]),t._v(" "),s("p",[s("strong",[t._v("All contract interactions expect values in mIO. If numbers are provided as inputs, they are assumed to be in raw mIO values.")])]),t._v(" "),s("h3",{attrs:{id:"converting-io-to-mio"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#converting-io-to-mio"}},[t._v("#")]),t._v(" Converting IO to mIO")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" IOToken"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" mIOToken "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@ar.io/sdk'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ioValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" mIOValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ioValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toMIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mIOValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 1000000 (mIO)")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" mIOValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1_000_000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ioValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("mIOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mIOValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ioValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 1 (IO)")]),t._v("\n")])])]),s("h2",{attrs:{id:"io-process"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#io-process"}},[t._v("#")]),t._v(" IO Process")]),t._v(" "),s("h3",{attrs:{id:"apis"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#apis"}},[t._v("#")]),t._v(" APIs")]),t._v(" "),s("h4",{attrs:{id:"init-signer"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#init-signer"}},[t._v("#")]),t._v(" "),s("code",[t._v("init({ signer })")])]),t._v(" "),s("p",[t._v("Factory function to that creates a read-only or writeable client. By providing a "),s("code",[t._v("signer")]),t._v(" additional write APIs that require signing, like "),s("code",[t._v("joinNetwork")]),t._v(" and "),s("code",[t._v("delegateStake")]),t._v(" are available. By default, a read-only client is returned and no write APIs are available.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// read-only client")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// read-write client for browser environments")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArConnectSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("window"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("arweaveWallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Arweave"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// read-write client for node environments")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JWK")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"getinfo"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getinfo"}},[t._v("#")]),t._v(" "),s("code",[t._v("getInfo()")])]),t._v(" "),s("p",[t._v("Retrieves the information of the IO process.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" info "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInfo")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Testnet IO"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"ticker"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"tIO"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"owner"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"denomination"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"IO"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getbalance-address"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getbalance-address"}},[t._v("#")]),t._v(" "),s("code",[t._v("getBalance({ address })")])]),t._v(" "),s("p",[t._v("Retrieves the balance of the specified wallet address.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// the balance will be returned in mIO as a value")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" balance "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getBalance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n address"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'INSERT_WALLET_ADDRESS'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("then")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("balance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("mIOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("balance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("valueOf")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// value in IO")]),t._v("\n1_000_000\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getbalances-cursor-limit-sortby-sortorder"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getbalances-cursor-limit-sortby-sortorder"}},[t._v("#")]),t._v(" "),s("code",[t._v("getBalances({ cursor, limit, sortBy, sortOrder })")])]),t._v(" "),s("p",[t._v("Retrieves the balances of the IO process in "),s("code",[t._v("mIO")]),t._v(", paginated and sorted by the specified criteria. The "),s("code",[t._v("cursor")]),t._v(" used for pagination is the last wallet address from the previous request.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" balances "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getBalances")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n cursor"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'-4xgjroXENKYhTWqrBo57HQwvDL51mMdfsdsxJy6Y2Z_sA'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n limit"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n sortBy"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'balance'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n sortOrder"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'desc'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"items"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"address"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"-4xgjroXENKYhTWqrBo57HQwvDL51mMvSxJy6Y2Z_sA"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"balance"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1000000")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"hasMore"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"nextCursor"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"-7vXsQZQDk8TMDlpiSLy3CnLi5PDPlAaN2DaynORpck"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalItems"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1789")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"sortBy"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"balance"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"sortOrder"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"desc"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getgateway-address"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getgateway-address"}},[t._v("#")]),t._v(" "),s("code",[t._v("getGateway({ address })")])]),t._v(" "),s("p",[t._v("Retrieves a gateway's info by its staking wallet address.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" gateway "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getGateway")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n address"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'INSERT_GATEWAY_ADDRESS'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"end"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerWallet"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"operatorStake"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("250000000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// value in mIO")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"settings"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"fqdn"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ar-io.dev"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"label"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"AR.IO Test"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"note"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Test Gateway operated by PDS for the AR.IO ecosystem."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("443")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"properties"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"raJgvbFU-YAnku-WsupIdbTsqqGLQiYpGzoqk9SCVgY"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"protocol"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"start"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1256694")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stats"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"failedConsecutiveEpochs"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"passedEpochCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"submittedEpochCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalEpochParticipationCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalEpochsPrescribedCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"status"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"joined"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"vaults"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getgateways-cursor-limit-sortby-sortorder"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getgateways-cursor-limit-sortby-sortorder"}},[t._v("#")]),t._v(" "),s("code",[t._v("getGateways({ cursor, limit, sortBy, sortOrder })")])]),t._v(" "),s("p",[t._v("Retrieves registered gateways of the IO process, using pagination and sorting by the specified criteria. The "),s("code",[t._v("cursor")]),t._v(" used for pagination is the last gateway address from the previous request.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" gateways "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getGateways")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n limit"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n sortOrder"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'desc'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n sortBy"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'operatorStake'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("Available "),s("code",[t._v("sortBy")]),t._v(" options are any of the keys on the gateway object, e.g. "),s("code",[t._v("operatorStake")]),t._v(", "),s("code",[t._v("start")]),t._v(", "),s("code",[t._v("status")]),t._v(", "),s("code",[t._v("settings.fqdn")]),t._v(", "),s("code",[t._v("settings.label")]),t._v(", "),s("code",[t._v("settings.note")]),t._v(", "),s("code",[t._v("settings.port")]),t._v(", "),s("code",[t._v("settings.protocol")]),t._v(", "),s("code",[t._v("stats")]),t._v("."),s("code",[t._v("failedConsecutiveEpochs")]),t._v(", "),s("code",[t._v("stats.passedConsecutiveEpochs")]),t._v(", etc.")]),t._v(" "),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"items"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gatewayAddress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerAddress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"operatorStake"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("250000000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"settings"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"fqdn"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ar-io.dev"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"label"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"AR.IO Test"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"note"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Test Gateway operated by PDS for the AR.IO ecosystem."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("443")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"properties"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"raJgvbFU-YAnku-WsupIdbTsqqGLQiYpGzoqk9SCVgY"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"protocol"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720620813")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stats"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"failedConsecutiveEpochs"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"passedEpochCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"submittedEpochCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalEpochParticipationCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalEpochsPrescribedCount"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"status"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"joined"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"vaults"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"hasMore"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"nextCursor"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"-4xgjroXENKYhTWqrBo57HQwvDL51mMdfsdsxJy6Y2Z_sA"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalItems"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("316")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"sortBy"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"operatorStake"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"sortOrder"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"desc"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getarnsrecord-name"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getarnsrecord-name"}},[t._v("#")]),t._v(" "),s("code",[t._v("getArNSRecord({ name })")])]),t._v(" "),s("p",[t._v("Retrieves the record info of the specified ArNS name.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" record "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getArNSRecord")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ardrive'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"processId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"endTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1711122739")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1694101828")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"lease"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"undernames"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getarnsrecords-cursor-limit-sortby-sortorder"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getarnsrecords-cursor-limit-sortby-sortorder"}},[t._v("#")]),t._v(" "),s("code",[t._v("getArNSRecords({ cursor, limit, sortBy, sortOrder })")])]),t._v(" "),s("p",[t._v("Retrieves all registered ArNS records of the IO process, paginated and sorted by the specified criteria. The "),s("code",[t._v("cursor")]),t._v(" used for pagination is the last ArNS name from the previous request.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// get the 5 newest names")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" records "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getArNSRecords")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n limit"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n sortBy"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'startTimestamp'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n sortOrder"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'desc'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("Available "),s("code",[t._v("sortBy")]),t._v(" options are any of the keys on the record object, e.g. "),s("code",[t._v("name")]),t._v(", "),s("code",[t._v("processId")]),t._v(", "),s("code",[t._v("endTimestamp")]),t._v(", "),s("code",[t._v("startTimestamp")]),t._v(", "),s("code",[t._v("type")]),t._v(", "),s("code",[t._v("undernames")]),t._v(".")]),t._v(" "),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"items"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ao"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"processId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"eNey-H9RB9uCdoJUvPULb35qhZVXZcEXv8xds4aHhkQ"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"purchasePrice"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("75541282285")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720621424")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"permabuy"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"undernames"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ardrive"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"processId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"endTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720819969")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720620813")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"lease"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"undernames"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"arweave"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"processId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"endTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720819969")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720620800")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"lease"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"undernames"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ar-io"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"processId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"endTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720819969")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720619000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"lease"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"undernames"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fwd"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"processId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"endTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720819969")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1720720220811")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"lease"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"undernames"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"hasMore"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"nextCursor"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fwdresearch"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalItems"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("21740")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"sortBy"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"sortOrder"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"desc"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getobservations-epochindex"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getobservations-epochindex"}},[t._v("#")]),t._v(" "),s("code",[t._v("getObservations({ epochIndex })")])]),t._v(" "),s("p",[t._v("Returns the epoch-indexed observation list.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" observations "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getObservations")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"0"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"failureSummaries"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"-Tk2DDk8k4zkwtppp_XFKKI5oUgh6IEHygAoN7mD-w8"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Ie2wEEUDKoU26c7IuckHNn3vMFdNQnMvfPBrFzAb3NA"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Ie2wEEUDKoU26c7IuckHNn3vMFdNQnMvfPBrFzAb3NA"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"reports"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"B6UUjKWjjEWDBvDSMXWNmymfwvgR9EN27z5FTkEVlX4"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Ie2wEEUDKoU26c7IuckHNn3vMFdNQnMvfPBrFzAb3NA"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"7tKsiQ2fxv0D8ZVN_QEv29fZ8hwFIgHoEDrpeEG0DIs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"osZP4D9cqeDvbVFBaEfjIxwc1QLIvRxUBRAxDIX9je8"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"aatgznEvC_UPcxp1v0uw_RqydhIfKm4wtt1KCpONBB0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"qZ90I67XG68BYIAFVNfm9PUdM7v1XtFTn7u-EOZFAtk"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Bd8SmFK9-ktJRmwIungS8ur6JM-JtpxrvMtjt5JkB1M"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getdistributions-epochindex"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getdistributions-epochindex"}},[t._v("#")]),t._v(" "),s("code",[t._v("getDistributions({ epochIndex })")])]),t._v(" "),s("p",[t._v("Returns the current rewards distribution information.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" distributions "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getDistributions")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"epochEndHeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1382379")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"epochPeriod"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("43")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"epochStartHeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1381660")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"epochZeroStartHeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1350700")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"nextDistributionHeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1382394")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getepoch-epochindex"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getepoch-epochindex"}},[t._v("#")]),t._v(" "),s("code",[t._v("getEpoch({ epochIndex })")])]),t._v(" "),s("p",[t._v("Returns the epoch data for the specified block height.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" epoch "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getEpoch")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" epochIndex"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"epochIndex"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1694101828")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"endTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1711122739")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startHeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1350700")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"distributionTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1711122739")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observations"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"failureSummaries"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"-Tk2DDk8k4zkwtppp_XFKKI5oUgh6IEHygAoN7mD-w8"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Ie2wEEUDKoU26c7IuckHNn3vMFdNQnMvfPBrFzAb3NA"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"reports"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"B6UUjKWjjEWDBvDSMXWNmymfwvgR9EN27z5FTkEVlX4"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"prescribedNames"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ardrive"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ar-io"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"arweave"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fwd"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ao"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"prescribedObservers"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gatewayAddress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2Fk8lCmDegPg6jjprl57-UCpKmNgYiKwyhkU4vMNDnE"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerAddress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2Fk8lCmDegPg6jjprl57-UCpKmNgYiKwyhkU4vMNDnE"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stake"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10000000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// value in mIO")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"start"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1292450")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stakeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"tenureWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.4494598765432099")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gatewayRewardRatioWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerRewardRatioWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"compositeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.4494598765432099")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"normalizedCompositeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.002057032496835938")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"distributions"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"distributedTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1711122739")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalEligibleRewards"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"rewards"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100000000")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getcurrentepoch"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getcurrentepoch"}},[t._v("#")]),t._v(" "),s("code",[t._v("getCurrentEpoch()")])]),t._v(" "),s("p",[t._v("Returns the current epoch data.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" epoch "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getCurrentEpoch")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"epochIndex"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1694101828")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"endTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1711122739")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"startHeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1350700")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"distributionTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1711122739")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observations"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"failureSummaries"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"-Tk2DDk8k4zkwtppp_XFKKI5oUgh6IEHygAoN7mD-w8"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Ie2wEEUDKoU26c7IuckHNn3vMFdNQnMvfPBrFzAb3NA"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"reports"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"B6UUjKWjjEWDBvDSMXWNmymfwvgR9EN27z5FTkEVlX4"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"prescribedNames"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ardrive"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ar-io"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"arweave"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fwd"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ao"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"prescribedObservers"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gatewayAddress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2Fk8lCmDegPg6jjprl57-UCpKmNgYiKwyhkU4vMNDnE"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerAddress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2Fk8lCmDegPg6jjprl57-UCpKmNgYiKwyhkU4vMNDnE"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stake"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10000000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// value in mIO")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"start"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1292450")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stakeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"tenureWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.4494598765432099")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gatewayRewardRatioWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerRewardRatioWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"compositeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.4494598765432099")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"normalizedCompositeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.002057032496835938")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"distributions"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"distributedTimestamp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1711122739")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"totalEligibleRewards"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"rewards"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100000000")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getprescribedobservers-epochindex"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getprescribedobservers-epochindex"}},[t._v("#")]),t._v(" "),s("code",[t._v("getPrescribedObservers({ epochIndex })")])]),t._v(" "),s("p",[t._v("Retrieves the prescribed observers of the IO process. To fetch prescribed observers for a previous epoch set the "),s("code",[t._v("epochIndex")]),t._v(" to the desired epoch.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" observers "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getPrescribedObservers")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" epochIndex"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gatewayAddress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"BpQlyhREz4lNGS-y3rSS1WxADfxPpAuing9Lgfdrj2U"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerAddress"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2Fk8lCmDegPg6jjprl57-UCpKmNgYiKwyhkU4vMNDnE"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stake"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10000000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// value in mIO")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"start"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1296976")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"stakeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"tenureWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.41453703703703704")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gatewayRewardRatioWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"observerRewardRatioWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"compositeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.41453703703703704")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"normalizedCompositeWeight"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.0018972019546783507")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"gettokencost-intent-args"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#gettokencost-intent-args"}},[t._v("#")]),t._v(" "),s("code",[t._v("getTokenCost({ intent, ...args })")])]),t._v(" "),s("p",[t._v("Calculates the price in mIO to perform the interaction in question, e.g. a "),s("code",[t._v("Buy-record")]),t._v(" interaction, where args are the specific params for that interaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" price "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getTokenCost")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n intent"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Buy-Record'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ar-io'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n type"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'permabuy'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("then")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("p"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("mIOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("p"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Price is returned as mio, convert to IO and log it out")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" price"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" price"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("valueOf")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"price"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1642.62")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"joinnetwork-params"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#joinnetwork-params"}},[t._v("#")]),t._v(" "),s("code",[t._v("joinNetwork( params )")])]),t._v(" "),s("p",[t._v("Joins a gateway to the ar.io network via its associated wallet.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("joinNetwork")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n qty"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10_000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toMIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// minimum operator stake allowed")]),t._v("\n autoStake"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// auto-stake operator rewards to the gateway")]),t._v("\n allowDelegatedStaking"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// allows delegated staking")]),t._v("\n minDelegatedStake"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toMIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// minimum delegated stake allowed")]),t._v("\n delegateRewardShareRatio"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// percentage of rewards to share with delegates (e.g. 10%)")]),t._v("\n label"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'john smith'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// min 1, max 64 characters")]),t._v("\n note"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'The example gateway'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// max 256 characters")]),t._v("\n properties"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'FH1aVetOoulPGqgYukj0VE0wIhDy90WiQoV3U2PeY44'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Arweave transaction ID containing additional properties of the Gateway")]),t._v("\n observerWallet"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'0VE0wIhDy90WiQoV3U2PeY44FH1aVetOoulPGqgYukj'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// wallet address of the observer, must match OBSERVER_WALLET on the observer")]),t._v("\n fqdn"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'example.com'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// fully qualified domain name - note: you must own the domain and set the OBSERVER_WALLET on your gateway to match `observerWallet`")]),t._v("\n port"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("443")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// port number")]),t._v("\n protocol"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// only 'https' is supported")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"leavenetwork"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#leavenetwork"}},[t._v("#")]),t._v(" "),s("code",[t._v("leaveNetwork()")])]),t._v(" "),s("p",[t._v("Sets the gateway as "),s("code",[t._v("leaving")]),t._v(" on the ar.io network. Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction. The gateway's operator and delegated stakes are vaulted and will be returned after the leave periods. The gateway will be removed from the network after the leave period.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("leaveNetwork")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"updategatewaysettings-gatewaysettings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#updategatewaysettings-gatewaysettings"}},[t._v("#")]),t._v(" "),s("code",[t._v("updateGatewaySettings( gatewaySettings )")])]),t._v(" "),s("p",[t._v("Writes new gateway settings to the caller's gateway configuration.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("updateGatewaySettings")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// any other settings you want to update")]),t._v("\n minDelegatedStake"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toMIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// t4Xr0_J4Iurt7caNST02cMotaz2FIbWQ4Kbj616RHl3")]),t._v("\n")])])]),s("h4",{attrs:{id:"increasedelegatestake-target-qty"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#increasedelegatestake-target-qty"}},[t._v("#")]),t._v(" "),s("code",[t._v("increaseDelegateStake({ target, qty })")])]),t._v(" "),s("p",[t._v("Increases the caller's stake on the target gateway.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("increaseDelegateStake")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n target"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'t4Xr0_J4Iurt7caNST02cMotaz2FIbWQ4Kbj616RHl3'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n qty"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toMIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"decreasedelegatestake-target-qty"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#decreasedelegatestake-target-qty"}},[t._v("#")]),t._v(" "),s("code",[t._v("decreaseDelegateStake({ target, qty })")])]),t._v(" "),s("p",[t._v("Decrease the caller's stake on the target gateway.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("decreaseDelegateStake")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n target"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'t4Xr0_J4Iurt7caNST02cMotaz2FIbWQ4Kbj616RHl3'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n qty"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toMIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"increaseoperatorstake-qty"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#increaseoperatorstake-qty"}},[t._v("#")]),t._v(" "),s("code",[t._v("increaseOperatorStake({ qty })")])]),t._v(" "),s("p",[t._v("Increases the caller's operator stake. Must be executed with a wallet registered as a gateway operator.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("increaseOperatorStake")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n qty"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toMIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"decreaseoperatorstake-qty"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#decreaseoperatorstake-qty"}},[t._v("#")]),t._v(" "),s("code",[t._v("decreaseOperatorStake({ qty })")])]),t._v(" "),s("p",[t._v("Decreases the caller's operator stake. Must be executed with a wallet registered as a gateway operator.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("decreaseOperatorStake")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n qty"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toMIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"saveobservations-reporttxid-failedgateways"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#saveobservations-reporttxid-failedgateways"}},[t._v("#")]),t._v(" "),s("code",[t._v("saveObservations({ reportTxId, failedGateways })")])]),t._v(" "),s("p",[t._v("Saves the observations of the current epoch.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("saveObservations")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n reportTxId"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'fDrr0_J4Iurt7caNST02cMotaz2FIbWQ4Kcj616RHl3'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n failedGateways"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'t4Xr0_J4Iurt7caNST02cMotaz2FIbWQ4Kbj616RHl3'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"transfer-target-qty-denomination"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#transfer-target-qty-denomination"}},[t._v("#")]),t._v(" "),s("code",[t._v("transfer({ target, qty, denomination })")])]),t._v(" "),s("p",[t._v("Transfers "),s("code",[t._v("IO")]),t._v(" or "),s("code",[t._v("mIO")]),t._v(" depending on the "),s("code",[t._v("denomination")]),t._v(" selected, defaulting as "),s("code",[t._v("IO")]),t._v(", to the designated "),s("code",[t._v("target")]),t._v(" recipient address.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("transfer")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n target"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'-5dV7nk7waR8v4STuwPnTck1zFVkQqJh5K9q9Zik4Y5'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n qty"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOToken")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toMIO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n denomination"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IO'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"increaseundernamelimit-name-qty"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#increaseundernamelimit-name-qty"}},[t._v("#")]),t._v(" "),s("code",[t._v("increaseUndernameLimit({ name, qty })")])]),t._v(" "),s("p",[t._v("Increases the undername support of a domain up to a maximum of 10k. Domains, by default, support up to 10 undernames.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("IO.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("increaseUndernameLimit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ar-io'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n qty"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("420")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"extendlease-name-years"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#extendlease-name-years"}},[t._v("#")]),t._v(" "),s("code",[t._v("extendLease({ name, years })")])]),t._v(" "),s("p",[t._v("Extends the lease of a registered ArNS domain, with an extension of 1-5 years depending on grace period status. Permanently registered domains cannot be extended.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jwk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("extendLease")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ar-io'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n years"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h3",{attrs:{id:"configuration"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[t._v("#")]),t._v(" Configuration")]),t._v(" "),s("p",[t._v("The IO client class exposes APIs relevenat to the ar.io process. It can be configured to use any AO Process ID that adheres to the "),s("a",{attrs:{href:"https://github.com/ar-io/ar-io-network-process?tab=readme-ov-file#contract-spec",target:"_blank",rel:"noopener noreferrer"}},[t._v("IO Network Spec"),s("OutboundLink")],1),t._v(". By default, it will use the current "),s("a",{attrs:{href:"https://www.ao.link/#/entity/agYcCFJtrMG6cqMuZfskIkFTGvUPddICmtQSBIoPdiA",target:"_blank",rel:"noopener noreferrer"}},[t._v("IO testnet process"),s("OutboundLink")],1),t._v(". Refer to "),s("a",{attrs:{href:"https://github.com/permaweb/ao/tree/main/connect",target:"_blank",rel:"noopener noreferrer"}},[t._v("AO Connect"),s("OutboundLink")],1),t._v(" for more information on how to configure an IO process to use specific AO infrastructure.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// provide a custom ao infrastructure and process id")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n process"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AoProcess")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n processId"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'IO_PROCESS_ID'")]),t._v("\n ao"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("connect")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("MU_URL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://mu-testnet.xyz'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CU_URL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://cu-testnet.xyz'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("GRAPHQL_URL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://arweave.net/graphql'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("GATEWAY_URL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://arweave.net'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h2",{attrs:{id:"arweave-name-tokens-ant-s"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#arweave-name-tokens-ant-s"}},[t._v("#")]),t._v(" Arweave Name Tokens (ANT's)")]),t._v(" "),s("p",[t._v("The ANT client class exposes APIs relevant to compliant Arweave Name Token processes. It can be configured to use any process ID that adheres to the ANT process spec. You must provide either a custom process data provider or a processId to the ANT class constructor to use.")]),t._v(" "),s("h3",{attrs:{id:"apis-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#apis-2"}},[t._v("#")]),t._v(" APIs")]),t._v(" "),s("h4",{attrs:{id:"init-signer-processid"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#init-signer-processid"}},[t._v("#")]),t._v(" "),s("code",[t._v("init({signer, processId })")])]),t._v(" "),s("p",[t._v("Factory function to that creates a read-only or writeable client. By providing a "),s("code",[t._v("signer")]),t._v(" additional write APIs that require signing, like "),s("code",[t._v("setRecord")]),t._v(" and "),s("code",[t._v("transfer")]),t._v(" are available. By default, a read-only client is returned and no write APIs are available.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// in a browser environment with ArConnect")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ant "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("ANT")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArConnectSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("window"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("arweaveWallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Arweave"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n processId"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM'")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// in a node environment")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ant "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("ANT")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n signer"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArweaveSigner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JWK")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n processId"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM'")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"getinfo-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getinfo-2"}},[t._v("#")]),t._v(" "),s("code",[t._v("getInfo()")])]),t._v(" "),s("p",[t._v("Retrieves the information about the ANT process.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" info "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInfo")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Ardrive"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ticker"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ANT-ARDRIVE"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"owner"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getowner"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getowner"}},[t._v("#")]),t._v(" "),s("code",[t._v("getOwner()")])]),t._v(" "),s("p",[t._v("Returns the owner of the configured ANT process.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" owner "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getOwner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ccp3blG__gKUvG3hsGC2u06aDmqv4CuhuDJGOIg0jw4"')]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getcontrollers"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getcontrollers"}},[t._v("#")]),t._v(" "),s("code",[t._v("getControllers()")])]),t._v(" "),s("p",[t._v("Returns the controllers of the configured ANT process.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" controllers "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getControllers")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ccp3blG__gKUvG3hsGC2u06aDmqv4CuhuDJGOIg0jw4"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"getrecords"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getrecords"}},[t._v("#")]),t._v(" "),s("code",[t._v("getRecords()")])]),t._v(" "),s("p",[t._v("Returns all records on the configured ANT process, including the required "),s("code",[t._v("@")]),t._v(" record that resolve connected ArNS names.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" records "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRecords")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("details",[s("summary",[t._v("Output")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"transactionId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"nOXJjj_vk0Dc1yCgdWD8kti_1iHruGzLQLNNBHVpN0Y"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ttlSeconds"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3600")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"cn"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"transactionId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"_HquerT6pfGFXrVxRxQTkJ7PV5RciZCqvMjLtUY0C1k"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ttlSeconds"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3300")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"dapp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"transactionId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"hxlxVgAG0K4o3fVD9T6Q4VBWpPmMZwMWgRh1kcuh3WU"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ttlSeconds"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3600")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"logo"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"transactionId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"KKmRbIfrc7wiLcG0zvY1etlO0NBx1926dSCksxCIN3A"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ttlSeconds"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3600")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"og"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"transactionId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"YzD_Pm5VAfYpMD3zQCgMUcKKuleGhEH7axlrnrDCKBo"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ttlSeconds"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3600")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"og_dapp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"transactionId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"5iR4wBu4KUV1pUz1YpYE1ARXSRHUT5G2ptMuoN2JDlI"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ttlSeconds"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3600")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"og_logo"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"transactionId"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"TB2wJyKrPnkAW79DAwlJYwpgdHKpijEJWQfcwX715Co"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ttlSeconds"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3600")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])]),t._v(" "),s("h4",{attrs:{id:"transfer-target"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#transfer-target"}},[t._v("#")]),t._v(" "),s("code",[t._v("transfer({ target })")])]),t._v(" "),s("p",[t._v("Transfers ownership of the ANT to a new target address. Target "),s("strong",[t._v("MUST")]),t._v(" be an Arweave address.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("ANT.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("transfer")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" target"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'aGzM_yjralacHIUo8_nQXMbh9l1cy0aksiL_x9M359f'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"setcontroller-controller"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setcontroller-controller"}},[t._v("#")]),t._v(" "),s("code",[t._v("setController({ controller })")])]),t._v(" "),s("p",[t._v("Adds a new controller to the list of approved controllers on the ANT. Controllers can set records and change the ticker and name of the ANT process.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("ANT.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setController")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" controller"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'aGzM_yjralacHIUo8_nQXMbh9l1cy0aksiL_x9M359f'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"removecontroller-controller"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#removecontroller-controller"}},[t._v("#")]),t._v(" "),s("code",[t._v("removeController({ controller })")])]),t._v(" "),s("p",[t._v("Removes a controller from the list of approved controllers on the ANT.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("ANT.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("removeController")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" controller"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'aGzM_yjralacHIUo8_nQXMbh9l1cy0aksiL_x9M359f'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"setrecord-subdomain-transactionid-ttlseconds"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setrecord-subdomain-transactionid-ttlseconds"}},[t._v("#")]),t._v(" "),s("code",[t._v("setRecord({ subDomain, transactionId, ttlSeconds })")])]),t._v(" "),s("p",[t._v("Updates or creates a record in the ANT process.")]),t._v(" "),s("p",[t._v("Records, or "),s("code",[t._v("undernames")]),t._v(" are configured with the "),s("code",[t._v("transactionId")]),t._v(" - the arweave transaction id the record resolves - and "),s("code",[t._v("ttlSeconds")]),t._v(", the Time To Live in the cache of client applications.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("ANT.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setRecord")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n undername"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n transactionId"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'432l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM'")]),t._v("\n ttlSeconds"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3600")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"removerecord-undername"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#removerecord-undername"}},[t._v("#")]),t._v(" "),s("code",[t._v("removeRecord({ undername })")])]),t._v(" "),s("p",[t._v("Removes a record from the ANT process.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("ANT.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("removeRecord")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" undername"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'remove-domemain'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"setname-name"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setname-name"}},[t._v("#")]),t._v(" "),s("code",[t._v("setName({ name })")])]),t._v(" "),s("p",[t._v("Sets the name of the ANT process.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("ANT.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setName")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My ANT'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional additional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h4",{attrs:{id:"setticker-ticker"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setticker-ticker"}},[t._v("#")]),t._v(" "),s("code",[t._v("setTicker({ ticker })")])]),t._v(" "),s("p",[t._v("Sets the ticker of the ANT contract.")]),t._v(" "),s("p",[s("strong",[t._v("NOTE")]),t._v(": Requires "),s("code",[t._v("signer")]),t._v(" to be provided on "),s("code",[t._v("ANT.init")]),t._v(" to sign the transaction.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" txId "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ant"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setTicker")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" ticker"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ANT-NEW-TICKER'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional tags")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'App-Name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'My-Awesome-App'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h3",{attrs:{id:"configuration-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configuration-2"}},[t._v("#")]),t._v(" Configuration")]),t._v(" "),s("p",[t._v("ANT clients can be configured to use custom AO processes. Refer to "),s("a",{attrs:{href:"https://github.com/permaweb/ao/tree/main/connect",target:"_blank",rel:"noopener noreferrer"}},[t._v("AO Connect"),s("OutboundLink")],1),t._v(" for more information on how to configure the AO process to use specific AO infrastructure.")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ant "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("ANT")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n process"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AoProcess")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n processId"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ANT_PROCESS_ID'")]),t._v("\n ao"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("connect")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("MU_URL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://mu-testnet.xyz'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CU_URL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://cu-testnet.xyz'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("GRAPHQL_URL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://arweave.net/graphql'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("GATEWAY_URL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://arweave.net'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h2",{attrs:{id:"logging"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#logging"}},[t._v("#")]),t._v(" Logging")]),t._v(" "),s("p",[t._v("The library uses the "),s("a",{attrs:{href:"https://www.npmjs.com/package/winston",target:"_blank",rel:"noopener noreferrer"}},[t._v("Winston"),s("OutboundLink")],1),t._v(" logger for node based projects, and "),s("code",[t._v("console")]),t._v(" logger for web based projects by default. You can configure the log level via "),s("code",[t._v("setLogLevel()")]),t._v(" API. Alternatively you can set a custom logger as the default logger so long as it satisfies the "),s("code",[t._v("ILogger")]),t._v(" interface.")]),t._v(" "),s("h3",{attrs:{id:"configuration-3"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configuration-3"}},[t._v("#")]),t._v(" Configuration")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" Logger "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@ar.io/sdk'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// set the log level")]),t._v("\nLogger"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("default"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setLogLevel")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'debug'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// provide your own logger")]),t._v("\nLogger"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" winston"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createLogger")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("loggerConfigs "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// or some other logger that satisifes ILogger interface")]),t._v("\n")])])]),s("h2",{attrs:{id:"pagination"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#pagination"}},[t._v("#")]),t._v(" Pagination")]),t._v(" "),s("p",[t._v("Certain APIs that could return a large amount of data are paginated using cursors. The SDK uses the "),s("code",[t._v("cursor")]),t._v(" pattern (as opposed to pages) to better protect against changing data while paginating through a list of items. For more information on pagination strategies refer to "),s("a",{attrs:{href:"https://www.getknit.dev/blog/api-pagination-best-practices#api-pagination-techniques-",target:"_blank",rel:"noopener noreferrer"}},[t._v("this article"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[t._v("Paginated results include the following properties:")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("items")]),t._v(": the list of items on the current request, defaulted to 100 items.")]),t._v(" "),s("li",[s("code",[t._v("nextCursor")]),t._v(": the cursor to use for the next batch of items. This is "),s("code",[t._v("undefined")]),t._v(" if there are no more items to fetch.")]),t._v(" "),s("li",[s("code",[t._v("hasMore")]),t._v(": a boolean indicating if there are more items to fetch. This is "),s("code",[t._v("false")]),t._v(" if there are no more items to fetch.")]),t._v(" "),s("li",[s("code",[t._v("totalItems")]),t._v(": the total number of items available. This may change as new items are added to the list, only use this for informational purposes.")]),t._v(" "),s("li",[s("code",[t._v("sortBy")]),t._v(": the field used to sort the items, by default this is "),s("code",[t._v("startTimestamp")]),t._v(".")]),t._v(" "),s("li",[s("code",[t._v("sortOrder")]),t._v(": the order used to sort the items, by default this is "),s("code",[t._v("desc")]),t._v(".")])]),t._v(" "),s("p",[t._v("To request all the items in a list, you can iterate through the list using the "),s("code",[t._v("nextCursor")]),t._v(" until "),s("code",[t._v("hasMore")]),t._v(" is "),s("code",[t._v("false")]),t._v(".")]),t._v(" "),s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" hasMore "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" cursor"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" gateaways "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("hasMore"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" page "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getGateways")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" limit"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" cursor "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n gateaways"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("items"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n cursor "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" page"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextCursor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n hasMore "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" page"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("hasMore"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"developers"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#developers"}},[t._v("#")]),t._v(" Developers")]),t._v(" "),s("h3",{attrs:{id:"requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("node")]),t._v(" >= v18.0.0")]),t._v(" "),s("li",[s("code",[t._v("npm")]),t._v(" or "),s("code",[t._v("yarn")])]),t._v(" "),s("li",[s("code",[t._v("docker")]),t._v(" (recommended for testing)")])]),t._v(" "),s("h3",{attrs:{id:"setup-build"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setup-build"}},[t._v("#")]),t._v(" Setup & Build")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("nvm use")]),t._v(" - use the correct node version")]),t._v(" "),s("li",[s("code",[t._v("yarn install")]),t._v(" - installs dependencies")]),t._v(" "),s("li",[s("code",[t._v("yarn build")]),t._v(" - builds web/node/bundled outputs")])]),t._v(" "),s("h3",{attrs:{id:"testing"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#testing"}},[t._v("#")]),t._v(" Testing")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("yarn test:integration")]),t._v(" - runs integration tests against a local "),s("a",{attrs:{href:"https://github.com/ar-io/arns-service",target:"_blank",rel:"noopener noreferrer"}},[t._v("arns-service"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("code",[t._v("yarn example:web")]),t._v(" - opens up the example web page")]),t._v(" "),s("li",[s("code",[t._v("yarn example:cjs")]),t._v(" - runs example CJS node script")]),t._v(" "),s("li",[s("code",[t._v("yarn example:esm")]),t._v(" - runs example ESM node script")])]),t._v(" "),s("h3",{attrs:{id:"linting-formatting"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#linting-formatting"}},[t._v("#")]),t._v(" Linting & Formatting")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("yarn lint:check")]),t._v(" - checks for linting errors")]),t._v(" "),s("li",[s("code",[t._v("yarn lint:fix")]),t._v(" - fixes linting errors")]),t._v(" "),s("li",[s("code",[t._v("yarn format:check")]),t._v(" - checks for formatting errors")]),t._v(" "),s("li",[s("code",[t._v("yarn format:fix")]),t._v(" - fixes formatting errors")])]),t._v(" "),s("h3",{attrs:{id:"architecture"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#architecture"}},[t._v("#")]),t._v(" Architecture")]),t._v(" "),s("ul",[s("li",[t._v("Code to interfaces.")]),t._v(" "),s("li",[t._v("Prefer type safety over runtime safety.")]),t._v(" "),s("li",[t._v("Prefer composition over inheritance.")]),t._v(" "),s("li",[t._v("Prefer integration tests over unit tests.")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/67.7a697e57.js b/assets/js/67.71b92a30.js similarity index 98% rename from assets/js/67.7a697e57.js rename to assets/js/67.71b92a30.js index 6fb7bbab..caf49813 100644 --- a/assets/js/67.7a697e57.js +++ b/assets/js/67.71b92a30.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[67],{367:function(e,a,t){"use strict";t.r(a);var s=t(10),r=Object(s.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"welcome-to-the-permaweb"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#welcome-to-the-permaweb"}},[e._v("#")]),e._v(" Welcome to the Permaweb")]),e._v(" "),a("p",[e._v("Data in paradise. The AR.IO ecosystem is dedicated to cultivating products and protocols for sustaining access to digital permanence, making the permaweb available to everyone. Powered by the IO Token, this global network of Gateways connects users to permanently stored data, files, applications, and web pages on the Arweave decentralized storage network.")]),e._v(" "),a("div",{staticClass:"home-container",attrs:{id:"block-container"}},[a("div",{staticClass:"home-box"},[a("a",{attrs:{href:"./gateways"}},[a("img",{staticClass:"smaller-image",attrs:{src:e.$withBase("/images/1-Gateways.png")}}),e._v(" "),a("h3",[e._v("ar.io Gateways")]),e._v(" "),a("p",[e._v("ar.io's modular gateways are built for the Arweave permanent data storage network and optimized for data retrieval, caching, serving and indexing transactions.")])])]),e._v(" "),a("div",{staticClass:"home-box"},[a("a",{attrs:{href:"./arns"}},[a("img",{staticClass:"smaller-image",attrs:{src:e.$withBase("/images/2-ArNSys.png")}}),e._v(" "),a("h3",[e._v("ArNS Names")]),e._v(" "),a("p",[e._v("ArNS is a censorship-resistant naming system stored on Arweave, enabling user-friendly domain names that link to permaweb dApps, web pages, data, and identities.")])])]),e._v(" "),a("div",{staticClass:"home-box"},[a("a",{attrs:{href:"./token"}},[a("img",{staticClass:"smaller-image",attrs:{src:e.$withBase("/images/3-Token.png")}}),e._v(" "),a("h3",[e._v("IO Token")]),e._v(" "),a("p",[e._v("IO powers the AR.IO Network and its suite of permaweb applications as a permissionless and censorship resistant medium of common value for the network.")])])]),e._v(" "),a("div",{staticClass:"home-box"},[a("a",{attrs:{href:"https://arweave.net/lNjWn3LpyhKC95Kqe-x8X2qgju0j98MhucdDKK85vc4",target:"_blank"}},[a("img",{staticClass:"smaller-image",attrs:{src:e.$withBase("/images/4-White-Paper.png")}}),e._v(" "),a("h3",[e._v("White Paper")]),e._v(" "),a("p",[e._v("A comprehensive document that details a decentralized and incentivized gateway network aimed at making the permaweb more accessible to all.")])])]),e._v(" "),a("div",{staticClass:"home-box"},[a("a",{attrs:{href:"./arweave"}},[a("img",{staticClass:"smaller-image",attrs:{src:e.$withBase("/images/5-The-Permaweb.png")}}),e._v(" "),a("h3",[e._v("The Permaweb")]),e._v(" "),a("p",[e._v("Learn more about the Arweave network, the permaweb and the reason the ar.io gateway network was built.")])])]),e._v(" "),a("div",{staticClass:"home-box"},[a("a",{attrs:{href:"./wayfinder"}},[a("img",{staticClass:"smaller-image",attrs:{src:e.$withBase("/images/6-ARCSS.png")}}),e._v(" "),a("h3",[e._v("ar://")]),e._v(" "),a("p",[e._v("The Wayfinder protocol transforms traditional Arweave URLs into more concise and user-friendly forms.")])])])]),e._v(" "),a("br"),e._v(" "),a("center",[a("h3",[e._v("ar.io = Arweave Input & Output")]),e._v(" "),a("div",{staticClass:"video-container"},[a("iframe",{attrs:{width:"760",height:"428",src:"https://www.youtube.com/embed/6HJc4_OYVMQ",title:"What and Why AR.IO? | AR.IO 101",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",allowfullscreen:""}})]),e._v(" "),a("br"),e._v(" "),a("br"),e._v(" "),a("h3",[e._v("Questions? Join our Discord")]),e._v(" "),a("a",{staticClass:"discord-container",attrs:{href:"https://discord.gg/7zUPfN4D6g",target:"_self"}},[a("img",{staticClass:"discord-logo-home",attrs:{src:e.$withBase("/images/discord-mark-black.svg"),alt:"Discord Icon"}}),e._v(" "),a("span",{staticClass:"discord-button-text"},[e._v("ar.io Discord")])])])],1)}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[67],{366:function(e,a,t){"use strict";t.r(a);var s=t(10),r=Object(s.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"welcome-to-the-permaweb"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#welcome-to-the-permaweb"}},[e._v("#")]),e._v(" Welcome to the Permaweb")]),e._v(" "),a("p",[e._v("Data in paradise. The AR.IO ecosystem is dedicated to cultivating products and protocols for sustaining access to digital permanence, making the permaweb available to everyone. Powered by the IO Token, this global network of Gateways connects users to permanently stored data, files, applications, and web pages on the Arweave decentralized storage network.")]),e._v(" "),a("div",{staticClass:"home-container",attrs:{id:"block-container"}},[a("div",{staticClass:"home-box"},[a("a",{attrs:{href:"./gateways"}},[a("img",{staticClass:"smaller-image",attrs:{src:e.$withBase("/images/1-Gateways.png")}}),e._v(" "),a("h3",[e._v("ar.io Gateways")]),e._v(" "),a("p",[e._v("ar.io's modular gateways are built for the Arweave permanent data storage network and optimized for data retrieval, caching, serving and indexing transactions.")])])]),e._v(" "),a("div",{staticClass:"home-box"},[a("a",{attrs:{href:"./arns"}},[a("img",{staticClass:"smaller-image",attrs:{src:e.$withBase("/images/2-ArNSys.png")}}),e._v(" "),a("h3",[e._v("ArNS Names")]),e._v(" "),a("p",[e._v("ArNS is a censorship-resistant naming system stored on Arweave, enabling user-friendly domain names that link to permaweb dApps, web pages, data, and identities.")])])]),e._v(" "),a("div",{staticClass:"home-box"},[a("a",{attrs:{href:"./token"}},[a("img",{staticClass:"smaller-image",attrs:{src:e.$withBase("/images/3-Token.png")}}),e._v(" "),a("h3",[e._v("IO Token")]),e._v(" "),a("p",[e._v("IO powers the AR.IO Network and its suite of permaweb applications as a permissionless and censorship resistant medium of common value for the network.")])])]),e._v(" "),a("div",{staticClass:"home-box"},[a("a",{attrs:{href:"https://arweave.net/lNjWn3LpyhKC95Kqe-x8X2qgju0j98MhucdDKK85vc4",target:"_blank"}},[a("img",{staticClass:"smaller-image",attrs:{src:e.$withBase("/images/4-White-Paper.png")}}),e._v(" "),a("h3",[e._v("White Paper")]),e._v(" "),a("p",[e._v("A comprehensive document that details a decentralized and incentivized gateway network aimed at making the permaweb more accessible to all.")])])]),e._v(" "),a("div",{staticClass:"home-box"},[a("a",{attrs:{href:"./arweave"}},[a("img",{staticClass:"smaller-image",attrs:{src:e.$withBase("/images/5-The-Permaweb.png")}}),e._v(" "),a("h3",[e._v("The Permaweb")]),e._v(" "),a("p",[e._v("Learn more about the Arweave network, the permaweb and the reason the ar.io gateway network was built.")])])]),e._v(" "),a("div",{staticClass:"home-box"},[a("a",{attrs:{href:"./wayfinder"}},[a("img",{staticClass:"smaller-image",attrs:{src:e.$withBase("/images/6-ARCSS.png")}}),e._v(" "),a("h3",[e._v("ar://")]),e._v(" "),a("p",[e._v("The Wayfinder protocol transforms traditional Arweave URLs into more concise and user-friendly forms.")])])])]),e._v(" "),a("br"),e._v(" "),a("center",[a("h3",[e._v("ar.io = Arweave Input & Output")]),e._v(" "),a("div",{staticClass:"video-container"},[a("iframe",{attrs:{width:"760",height:"428",src:"https://www.youtube.com/embed/6HJc4_OYVMQ",title:"What and Why AR.IO? | AR.IO 101",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",allowfullscreen:""}})]),e._v(" "),a("br"),e._v(" "),a("br"),e._v(" "),a("h3",[e._v("Questions? Join our Discord")]),e._v(" "),a("a",{staticClass:"discord-container",attrs:{href:"https://discord.gg/7zUPfN4D6g",target:"_self"}},[a("img",{staticClass:"discord-logo-home",attrs:{src:e.$withBase("/images/discord-mark-black.svg"),alt:"Discord Icon"}}),e._v(" "),a("span",{staticClass:"discord-button-text"},[e._v("ar.io Discord")])])])],1)}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/app.35d642c7.js b/assets/js/app.addfb1ab.js similarity index 84% rename from assets/js/app.35d642c7.js rename to assets/js/app.addfb1ab.js index 94d1b86d..e90fda64 100644 --- a/assets/js/app.35d642c7.js +++ b/assets/js/app.addfb1ab.js @@ -1,4 +1,4 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(e){function n(n){for(var a,r,s=n[0],l=n[1],d=n[2],c=0,u=[];c
'};function i(e,n,t){return et?t:e}function o(e){return 100*(-1+e)}t.configure=function(e){var n,t;for(n in e)void 0!==(t=e[n])&&e.hasOwnProperty(n)&&(a[n]=t);return this},t.status=null,t.set=function(e){var n=t.isStarted();e=i(e,a.minimum,1),t.status=1===e?null:e;var l=t.render(!n),d=l.querySelector(a.barSelector),m=a.speed,c=a.easing;return l.offsetWidth,r((function(n){""===a.positionUsing&&(a.positionUsing=t.getPositioningCSS()),s(d,function(e,n,t){var i;return(i="translate3d"===a.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===a.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+n+"ms "+t,i}(e,m,c)),1===e?(s(l,{transition:"none",opacity:1}),l.offsetWidth,setTimeout((function(){s(l,{transition:"all "+m+"ms linear",opacity:0}),setTimeout((function(){t.remove(),n()}),m)}),m)):setTimeout(n,m)})),this},t.isStarted=function(){return"number"==typeof t.status},t.start=function(){t.status||t.set(0);var e=function(){setTimeout((function(){t.status&&(t.trickle(),e())}),a.trickleSpeed)};return a.trickle&&e(),this},t.done=function(e){return e||t.status?t.inc(.3+.5*Math.random()).set(1):this},t.inc=function(e){var n=t.status;return n?("number"!=typeof e&&(e=(1-n)*i(Math.random()*n,.1,.95)),n=i(n+e,0,.994),t.set(n)):t.start()},t.trickle=function(){return t.inc(Math.random()*a.trickleRate)},e=0,n=0,t.promise=function(a){return a&&"resolved"!==a.state()?(0===n&&t.start(),e++,n++,a.always((function(){0==--n?(e=0,t.done()):t.set((e-n)/e)})),this):this},t.render=function(e){if(t.isRendered())return document.getElementById("nprogress");d(document.documentElement,"nprogress-busy");var n=document.createElement("div");n.id="nprogress",n.innerHTML=a.template;var i,r=n.querySelector(a.barSelector),l=e?"-100":o(t.status||0),m=document.querySelector(a.parent);return s(r,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),a.showSpinner||(i=n.querySelector(a.spinnerSelector))&&u(i),m!=document.body&&d(m,"nprogress-custom-parent"),m.appendChild(n),n},t.remove=function(){m(document.documentElement,"nprogress-busy"),m(document.querySelector(a.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&u(e)},t.isRendered=function(){return!!document.getElementById("nprogress")},t.getPositioningCSS=function(){var e=document.body.style,n="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return n+"Perspective"in e?"translate3d":n+"Transform"in e?"translate":"margin"};var r=function(){var e=[];function n(){var t=e.shift();t&&t(n)}return function(t){e.push(t),1==e.length&&n()}}(),s=function(){var e=["Webkit","O","Moz","ms"],n={};function t(t){return t=t.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,n){return n.toUpperCase()})),n[t]||(n[t]=function(n){var t=document.body.style;if(n in t)return n;for(var a,i=e.length,o=n.charAt(0).toUpperCase()+n.slice(1);i--;)if((a=e[i]+o)in t)return a;return n}(t))}function a(e,n,a){n=t(n),e.style[n]=a}return function(e,n){var t,i,o=arguments;if(2==o.length)for(t in n)void 0!==(i=n[t])&&n.hasOwnProperty(t)&&a(e,t,i);else a(e,o[1],o[2])}}();function l(e,n){return("string"==typeof e?e:c(e)).indexOf(" "+n+" ")>=0}function d(e,n){var t=c(e),a=t+n;l(t,n)||(e.className=a.substring(1))}function m(e,n){var t,a=c(e);l(e,n)&&(t=a.replace(" "+n+" "," "),e.className=t.substring(1,t.length-1))}function c(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function u(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return t})?a.call(n,t,n,e):a)||(e.exports=i)},function(e,n,t){"use strict";var a=t(0),i=t(49).f,o=t(13),r=t(92),s=t(35),l=t(61),d=t(122);e.exports=function(e,n){var t,m,c,u,h,y=e.target,w=e.global,z=e.stat;if(t=w?a:z?a[y]||s(y,{}):a[y]&&a[y].prototype)for(m in n){if(u=n[m],c=e.dontCallGetSet?(h=i(t,m))&&h.value:t[m],!d(w?m:y+(z?".":"#")+m,e.forced)&&void 0!==c){if(typeof u==typeof c)continue;l(u,c)}(e.sham||c&&c.sham)&&o(u,"sham",!0),r(t,m,u,e)}}},function(e,n,t){"use strict";var a=t(3);e.exports=!a((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},function(e,n,t){"use strict";var a=t(46),i=t(33);e.exports=function(e){return a(i(e))}},function(e,n,t){"use strict";var a=t(0),i=t(1),o=function(e){return i(e)?e:void 0};e.exports=function(e,n){return arguments.length<2?o(a[e]):a[e]&&a[e][n]}},function(e,n,t){"use strict";var a=t(1),i=t(109),o=TypeError;e.exports=function(e){if(a(e))return e;throw new o(i(e)+" is not a function")}},function(e,n,t){"use strict";var a=t(0),i=t(57),o=t(8),r=t(59),s=t(55),l=t(54),d=a.Symbol,m=i("wks"),c=l?d.for||d:d&&d.withoutSetter||r;e.exports=function(e){return o(m,e)||(m[e]=s&&o(d,e)?d[e]:c("Symbol."+e)),m[e]}},function(e,n,t){"use strict";var a=t(33),i=Object;e.exports=function(e){return i(a(e))}},function(e,n,t){"use strict";var a=t(120);e.exports=function(e){return a(e.length)}},function(e,n,t){"use strict";var a=t(24),i=Function.prototype.call;e.exports=a?i.bind(i):function(){return i.apply(i,arguments)}},function(e,n,t){"use strict";e.exports=function(e,n){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:n}}},function(e,n,t){"use strict";var a=t(50),i=TypeError;e.exports=function(e){if(a(e))throw new i("Can't call method on "+e);return e}},function(e,n,t){"use strict";var a=t(58),i=t(0),o=t(35),r=e.exports=i["__core-js_shared__"]||o("__core-js_shared__",{});(r.versions||(r.versions=[])).push({version:"3.37.1",mode:a?"pure":"global",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.37.1/LICENSE",source:"https://github.com/zloirock/core-js"})},function(e,n,t){"use strict";var a=t(0),i=Object.defineProperty;e.exports=function(e,n){try{i(a,e,{value:n,configurable:!0,writable:!0})}catch(t){a[e]=n}return n}},function(e,n,t){var a=t(146),i=t(11),o=Object.prototype,r=o.hasOwnProperty,s=o.propertyIsEnumerable,l=a(function(){return arguments}())?a:function(e){return i(e)&&r.call(e,"callee")&&!s.call(e,"callee")};e.exports=l},function(e,n,t){var a=t(9)(t(7),"Map");e.exports=a},function(e,n){e.exports=function(e){var n=typeof e;return null!=e&&("object"==n||"function"==n)}},function(e,n,t){var a=t(166),i=t(173),o=t(175),r=t(176),s=t(177);function l(e){var n=-1,t=null==e?0:e.length;for(this.clear();++n-1&&e%1==0&&e<=9007199254740991}},function(e,n,t){var a=t(4),i=t(43),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,r=/^\w*$/;e.exports=function(e,n){if(a(e))return!1;var t=typeof e;return!("number"!=t&&"symbol"!=t&&"boolean"!=t&&null!=e&&!i(e))||(r.test(e)||!o.test(e)||null!=n&&e in Object(n))}},function(e,n,t){var a=t(12),i=t(11);e.exports=function(e){return"symbol"==typeof e||i(e)&&"[object Symbol]"==a(e)}},function(e,n){e.exports=function(e){return e}},function(e,n,t){"use strict";var a=t(6),i=String,o=TypeError;e.exports=function(e){if(a(e))return e;throw new o(i(e)+" is not an object")}},function(e,n,t){"use strict";var a=t(2),i=t(3),o=t(16),r=Object,s=a("".split);e.exports=i((function(){return!r("z").propertyIsEnumerable(0)}))?function(e){return"String"===o(e)?s(e,""):r(e)}:r},function(e,n,t){"use strict";e.exports={}},function(e,n){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,n,t){"use strict";var a=t(5),i=t(31),o=t(105),r=t(32),s=t(25),l=t(51),d=t(8),m=t(60),c=Object.getOwnPropertyDescriptor;n.f=a?c:function(e,n){if(e=s(e),n=l(n),m)try{return c(e,n)}catch(e){}if(d(e,n))return r(!i(o.f,e,n),e[n])}},function(e,n,t){"use strict";e.exports=function(e){return null==e}},function(e,n,t){"use strict";var a=t(106),i=t(52);e.exports=function(e){var n=a(e,"string");return i(n)?n:n+""}},function(e,n,t){"use strict";var a=t(26),i=t(1),o=t(53),r=t(54),s=Object;e.exports=r?function(e){return"symbol"==typeof e}:function(e){var n=a("Symbol");return i(n)&&o(n.prototype,s(e))}},function(e,n,t){"use strict";var a=t(2);e.exports=a({}.isPrototypeOf)},function(e,n,t){"use strict";var a=t(55);e.exports=a&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(e,n,t){"use strict";var a=t(56),i=t(3),o=t(0).String;e.exports=!!Object.getOwnPropertySymbols&&!i((function(){var e=Symbol("symbol detection");return!o(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&a&&a<41}))},function(e,n,t){"use strict";var a,i,o=t(0),r=t(107),s=o.process,l=o.Deno,d=s&&s.versions||l&&l.version,m=d&&d.v8;m&&(i=(a=m.split("."))[0]>0&&a[0]<4?1:+(a[0]+a[1])),!i&&r&&(!(a=r.match(/Edge\/(\d+)/))||a[1]>=74)&&(a=r.match(/Chrome\/(\d+)/))&&(i=+a[1]),e.exports=i},function(e,n,t){"use strict";var a=t(34);e.exports=function(e,n){return a[e]||(a[e]=n||{})}},function(e,n,t){"use strict";e.exports=!1},function(e,n,t){"use strict";var a=t(2),i=0,o=Math.random(),r=a(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+r(++i+o,36)}},function(e,n,t){"use strict";var a=t(5),i=t(3),o=t(96);e.exports=!a&&!i((function(){return 7!==Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a}))},function(e,n,t){"use strict";var a=t(8),i=t(115),o=t(49),r=t(15);e.exports=function(e,n,t){for(var s=i(n),l=r.f,d=o.f,m=0;mm))return!1;var u=l.get(e),h=l.get(n);if(u&&h)return u==n&&h==e;var y=-1,w=!0,z=2&t?new a:void 0;for(l.set(e,n),l.set(n,e);++y-1&&e%1==0&&e=0&&Math.floor(n)===n&&isFinite(e)}function w(e){return r(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function z(e){return null==e?"":Array.isArray(e)||u(e)&&e.toString===c?JSON.stringify(e,p,2):String(e)}function p(e,n){return n&&n.__v_isRef?n.value:n}function g(e){var n=parseFloat(e);return isNaN(n)?e:n}function j(e,n){for(var t=Object.create(null),a=e.split(","),i=0;i-1)return e.splice(a,1)}}var v=Object.prototype.hasOwnProperty;function k(e,n){return v.call(e,n)}function x(e){var n=Object.create(null);return function(t){return n[t]||(n[t]=e(t))}}var q=/-(\w)/g,_=x((function(e){return e.replace(q,(function(e,n){return n?n.toUpperCase():""}))})),N=x((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),Z=/\B([A-Z])/g,M=x((function(e){return e.replace(Z,"-$1").toLowerCase()}));var I=Function.prototype.bind?function(e,n){return e.bind(n)}:function(e,n){function t(t){var a=arguments.length;return a?a>1?e.apply(n,arguments):e.call(n,t):e.call(n)}return t._length=e.length,t};function T(e,n){n=n||0;for(var t=e.length-n,a=new Array(t);t--;)a[t]=e[t+n];return a}function Y(e,n){for(var t in n)e[t]=n[t];return e}function A(e){for(var n={},t=0;t0,$=H&&H.indexOf("edge/")>0;H&&H.indexOf("android");var ee=H&&/iphone|ipad|ipod|ios/.test(H);H&&/chrome\/\d+/.test(H),H&&/phantomjs/.test(H);var ne,te=H&&H.match(/firefox\/(\d+)/),ae={}.watch,ie=!1;if(L)try{var oe={};Object.defineProperty(oe,"passive",{get:function(){ie=!0}}),window.addEventListener("test-passive",null,oe)}catch(e){}var re=function(){return void 0===ne&&(ne=!L&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),ne},se=L&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function le(e){return"function"==typeof e&&/native code/.test(e.toString())}var de,me="undefined"!=typeof Symbol&&le(Symbol)&&"undefined"!=typeof Reflect&&le(Reflect.ownKeys);de="undefined"!=typeof Set&&le(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ce=null;function ue(e){void 0===e&&(e=null),e||ce&&ce._scope.off(),ce=e,e&&e._scope.on()}var he=function(){function e(e,n,t,a,i,o,r,s){this.tag=e,this.data=n,this.children=t,this.text=a,this.elm=i,this.ns=void 0,this.context=o,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=n&&n.key,this.componentOptions=r,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(e.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),e}(),ye=function(e){void 0===e&&(e="");var n=new he;return n.text=e,n.isComment=!0,n};function we(e){return new he(void 0,void 0,void 0,String(e))}function ze(e){var n=new he(e.tag,e.data,e.children&&e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return n.ns=e.ns,n.isStatic=e.isStatic,n.key=e.key,n.isComment=e.isComment,n.fnContext=e.fnContext,n.fnOptions=e.fnOptions,n.fnScopeId=e.fnScopeId,n.asyncMeta=e.asyncMeta,n.isCloned=!0,n}"function"==typeof SuppressedError&&SuppressedError;var pe=0,ge=[],je=function(){function e(){this._pending=!1,this.id=pe++,this.subs=[]}return e.prototype.addSub=function(e){this.subs.push(e)},e.prototype.removeSub=function(e){this.subs[this.subs.indexOf(e)]=null,this._pending||(this._pending=!0,ge.push(this))},e.prototype.depend=function(n){e.target&&e.target.addDep(this)},e.prototype.notify=function(e){var n=this.subs.filter((function(e){return e}));for(var t=0,a=n.length;t0&&(on((d=e(d,"".concat(t||"","_").concat(a)))[0])&&on(c)&&(u[m]=we(c.text+d[0].text),d.shift()),u.push.apply(u,d)):l(d)?on(c)?u[m]=we(c.text+d):""!==d&&u.push(we(d)):on(d)&&on(c)?u[m]=we(c.text+d.text):(s(n._isVList)&&r(d.tag)&&o(d.key)&&r(t)&&(d.key="__vlist".concat(t,"_").concat(a,"__")),u.push(d)));return u}(e):void 0}function on(e){return r(e)&&r(e.text)&&!1===e.isComment}function rn(e,n){var t,a,o,s,l=null;if(i(e)||"string"==typeof e)for(l=new Array(e.length),t=0,a=e.length;t0,s=n?!!n.$stable:!r,l=n&&n.$key;if(n){if(n._normalized)return n._normalized;if(s&&i&&i!==a&&l===i.$key&&!r&&!i.$hasNormal)return i;for(var d in o={},n)n[d]&&"$"!==d[0]&&(o[d]=qn(e,t,d,n[d]))}else o={};for(var m in t)m in o||(o[m]=_n(t,m));return n&&Object.isExtensible(n)&&(n._normalized=o),X(o,"$stable",s),X(o,"$key",l),X(o,"$hasNormal",r),o}function qn(e,n,t,a){var o=function(){var n=ce;ue(e);var t=arguments.length?a.apply(null,arguments):a({}),o=(t=t&&"object"==typeof t&&!i(t)?[t]:an(t))&&t[0];return ue(n),t&&(!o||1===t.length&&o.isComment&&!kn(o))?void 0:t};return a.proxy&&Object.defineProperty(n,t,{get:o,enumerable:!0,configurable:!0}),o}function _n(e,n){return function(){return e[n]}}function Nn(e){return{get attrs(){if(!e._attrsProxy){var n=e._attrsProxy={};X(n,"_v_attr_proxy",!0),Zn(n,e.$attrs,a,e,"$attrs")}return e._attrsProxy},get listeners(){e._listenersProxy||Zn(e._listenersProxy={},e.$listeners,a,e,"$listeners");return e._listenersProxy},get slots(){return function(e){e._slotsProxy||In(e._slotsProxy={},e.$scopedSlots);return e._slotsProxy}(e)},emit:I(e.$emit,e),expose:function(n){n&&Object.keys(n).forEach((function(t){return Fe(e,n,t)}))}}}function Zn(e,n,t,a,i){var o=!1;for(var r in n)r in e?n[r]!==t[r]&&(o=!0):(o=!0,Mn(e,r,a,i));for(var r in e)r in n||(o=!0,delete e[r]);return o}function Mn(e,n,t,a){Object.defineProperty(e,n,{enumerable:!0,configurable:!0,get:function(){return t[a][n]}})}function In(e,n){for(var t in n)e[t]=n[t];for(var t in e)t in n||delete e[t]}var Tn=null;function Yn(e,n){return(e.__esModule||me&&"Module"===e[Symbol.toStringTag])&&(e=e.default),m(e)?n.extend(e):e}function An(e){if(i(e))for(var n=0;ndocument.createEvent("Event").timeStamp&&(pt=function(){return gt.now()})}var jt=function(e,n){if(e.post){if(!n.post)return 1}else if(n.post)return-1;return e.id-n.id};function bt(){var e,n;for(zt=pt(),yt=!0,mt.sort(jt),wt=0;wtwt&&mt[t].id>e.id;)t--;mt.splice(t+1,0,e)}else mt.push(e);ht||(ht=!0,Cn(bt))}}function vt(e,n){if(e){for(var t=Object.create(null),a=me?Reflect.ownKeys(e):Object.keys(e),i=0;i-1)if(o&&!k(i,"default"))r=!1;else if(""===r||r===M(e)){var l=Jt(String,i.type);(l<0||s-1:"string"==typeof e?e.split(",").indexOf(n)>-1:!!h(e)&&e.test(n)}function oa(e,n){var t=e.cache,a=e.keys,i=e._vnode,o=e.$vnode;for(var r in t){var s=t[r];if(s){var l=s.name;l&&!n(l)&&ra(t,r,a,i)}}o.componentOptions.children=void 0}function ra(e,n,t,a){var i=e[n];!i||a&&i.tag===a.tag||i.componentInstance.$destroy(),e[n]=null,f(t,n)}na.prototype._init=function(e){var n=this;n._uid=$t++,n._isVue=!0,n.__v_skip=!0,n._scope=new He(!0),n._scope.parent=void 0,n._scope._vm=!0,e&&e._isComponent?function(e,n){var t=e.$options=Object.create(e.constructor.options),a=n._parentVnode;t.parent=n.parent,t._parentVnode=a;var i=a.componentOptions;t.propsData=i.propsData,t._parentListeners=i.listeners,t._renderChildren=i.children,t._componentTag=i.tag,n.render&&(t.render=n.render,t.staticRenderFns=n.staticRenderFns)}(n,e):n.$options=Ut(ea(n.constructor),e||{},n),n._renderProxy=n,n._self=n,function(e){var n=e.$options,t=n.parent;if(t&&!n.abstract){for(;t.$options.abstract&&t.$parent;)t=t.$parent;t.$children.push(e)}e.$parent=t,e.$root=t?t.$root:e,e.$children=[],e.$refs={},e._provided=t?t._provided:Object.create(null),e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(n),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var n=e.$options._parentListeners;n&&it(e,n)}(n),function(e){e._vnode=null,e._staticTrees=null;var n=e.$options,t=e.$vnode=n._parentVnode,i=t&&t.context;e.$slots=fn(n._renderChildren,i),e.$scopedSlots=t?xn(e.$parent,t.data.scopedSlots,e.$slots):a,e._c=function(n,t,a,i){return Wn(e,n,t,a,i,!1)},e.$createElement=function(n,t,a,i){return Wn(e,n,t,a,i,!0)};var o=t&&t.data;Ye(e,"$attrs",o&&o.attrs||a,null,!0),Ye(e,"$listeners",n._parentListeners||a,null,!0)}(n),dt(n,"beforeCreate",void 0,!1),function(e){var n=vt(e.$options.inject,e);n&&(Ze(!1),Object.keys(n).forEach((function(t){Ye(e,t,n[t])})),Ze(!0))}(n),Bt(n),function(e){var n=e.$options.provide;if(n){var t=d(n)?n.call(e):n;if(!m(t))return;for(var a=Pe(e),i=me?Reflect.ownKeys(t):Object.keys(t),o=0;o1?T(t):t;for(var a=T(arguments,1),i='event handler for "'.concat(e,'"'),o=0,r=t.length;oparseInt(this.max)&&ra(e,n[0],n,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)ra(this.cache,e,this.keys)},mounted:function(){var e=this;this.cacheVNode(),this.$watch("include",(function(n){oa(e,(function(e){return ia(n,e)}))})),this.$watch("exclude",(function(n){oa(e,(function(e){return!ia(n,e)}))}))},updated:function(){this.cacheVNode()},render:function(){var e=this.$slots.default,n=An(e),t=n&&n.componentOptions;if(t){var a=aa(t),i=this.include,o=this.exclude;if(i&&(!a||!ia(i,a))||o&&a&&ia(o,a))return n;var r=this.cache,s=this.keys,l=null==n.key?t.Ctor.cid+(t.tag?"::".concat(t.tag):""):n.key;r[l]?(n.componentInstance=r[l].componentInstance,f(s,l),s.push(l)):(this.vnodeToCache=n,this.keyToCache=l),n.data.keepAlive=!0}return n||e&&e[0]}}};!function(e){var n={get:function(){return Q}};Object.defineProperty(e,"config",n),e.util={warn:Tt,extend:Y,mergeOptions:Ut,defineReactive:Ye},e.set=Ae,e.delete=We,e.nextTick=Cn,e.observable=function(e){return Te(e),e},e.options=Object.create(null),G.forEach((function(n){e.options[n+"s"]=Object.create(null)})),e.options._base=e,Y(e.options.components,la),function(e){e.use=function(e){var n=this._installedPlugins||(this._installedPlugins=[]);if(n.indexOf(e)>-1)return this;var t=T(arguments,1);return t.unshift(this),d(e.install)?e.install.apply(e,t):d(e)&&e.apply(null,t),n.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=Ut(this.options,e),this}}(e),ta(e),function(e){G.forEach((function(n){e[n]=function(e,t){return t?("component"===n&&u(t)&&(t.name=t.name||e,t=this.options._base.extend(t)),"directive"===n&&d(t)&&(t={bind:t,update:t}),this.options[n+"s"][e]=t,t):this.options[n+"s"][e]}}))}(e)}(na),Object.defineProperty(na.prototype,"$isServer",{get:re}),Object.defineProperty(na.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(na,"FunctionalRenderContext",{value:kt}),na.version="2.7.16";var da=j("style,class"),ma=j("input,textarea,option,select,progress"),ca=j("contenteditable,draggable,spellcheck"),ua=j("events,caret,typing,plaintext-only"),ha=j("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),ya="http://www.w3.org/1999/xlink",wa=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},za=function(e){return wa(e)?e.slice(6,e.length):""},pa=function(e){return null==e||!1===e};function ga(e){for(var n=e.data,t=e,a=e;r(a.componentInstance);)(a=a.componentInstance._vnode)&&a.data&&(n=ja(a.data,n));for(;r(t=t.parent);)t&&t.data&&(n=ja(n,t.data));return function(e,n){if(r(e)||r(n))return ba(e,fa(n));return""}(n.staticClass,n.class)}function ja(e,n){return{staticClass:ba(e.staticClass,n.staticClass),class:r(e.class)?[e.class,n.class]:n.class}}function ba(e,n){return e?n?e+" "+n:e:n||""}function fa(e){return Array.isArray(e)?function(e){for(var n,t="",a=0,i=e.length;a-1?Sa(e,n,t):ha(n)?pa(t)?e.removeAttribute(n):(t="allowfullscreen"===n&&"EMBED"===e.tagName?"true":n,e.setAttribute(n,t)):ca(n)?e.setAttribute(n,function(e,n){return pa(n)||"false"===n?"false":"contenteditable"===e&&ua(n)?n:"true"}(n,t)):wa(n)?pa(t)?e.removeAttributeNS(ya,za(n)):e.setAttributeNS(ya,n,t):Sa(e,n,t)}function Sa(e,n,t){if(pa(t))e.removeAttribute(n);else{if(P&&!K&&"TEXTAREA"===e.tagName&&"placeholder"===n&&""!==t&&!e.__ieph){var a=function(n){n.stopImmediatePropagation(),e.removeEventListener("input",a)};e.addEventListener("input",a),e.__ieph=!0}e.setAttribute(n,t)}}var Xa={create:Qa,update:Qa};function Ba(e,n){var t=n.elm,a=n.data,i=e.data;if(!(o(a.staticClass)&&o(a.class)&&(o(i)||o(i.staticClass)&&o(i.class)))){var s=ga(n),l=t._transitionClasses;r(l)&&(s=ba(s,fa(l))),s!==t._prevClass&&(t.setAttribute("class",s),t._prevClass=s)}}var Ca,La={create:Ba,update:Ba};function Ha(e,n,t){var a=Ca;return function i(){var o=n.apply(null,arguments);null!==o&&$a(e,i,t,a)}}var Pa=Vn&&!(te&&Number(te[1])<=53);function Ka(e,n,t,a){if(Pa){var i=zt,o=n;n=o._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=i||e.timeStamp<=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}}Ca.addEventListener(e,n,ie?{capture:t,passive:a}:t)}function $a(e,n,t,a){(a||Ca).removeEventListener(e,n._wrapper||n,t)}function ei(e,n){if(!o(e.data.on)||!o(n.data.on)){var t=n.data.on||{},a=e.data.on||{};Ca=n.elm||e.elm,function(e){if(r(e.__r)){var n=P?"change":"input";e[n]=[].concat(e.__r,e[n]||[]),delete e.__r}r(e.__c)&&(e.change=[].concat(e.__c,e.change||[]),delete e.__c)}(t),en(t,a,Ka,$a,Ha,n.context),Ca=void 0}}var ni,ti={create:ei,update:ei,destroy:function(e){return ei(e,Ya)}};function ai(e,n){if(!o(e.data.domProps)||!o(n.data.domProps)){var t,a,i=n.elm,l=e.data.domProps||{},d=n.data.domProps||{};for(t in(r(d.__ob__)||s(d._v_attr_proxy))&&(d=n.data.domProps=Y({},d)),l)t in d||(i[t]="");for(t in d){if(a=d[t],"textContent"===t||"innerHTML"===t){if(n.children&&(n.children.length=0),a===l[t])continue;1===i.childNodes.length&&i.removeChild(i.childNodes[0])}if("value"===t&&"PROGRESS"!==i.tagName){i._value=a;var m=o(a)?"":String(a);ii(i,m)&&(i.value=m)}else if("innerHTML"===t&&xa(i.tagName)&&o(i.innerHTML)){(ni=ni||document.createElement("div")).innerHTML="".concat(a,"");for(var c=ni.firstChild;i.firstChild;)i.removeChild(i.firstChild);for(;c.firstChild;)i.appendChild(c.firstChild)}else if(a!==l[t])try{i[t]=a}catch(e){}}}}function ii(e,n){return!e.composing&&("OPTION"===e.tagName||function(e,n){var t=!0;try{t=document.activeElement!==e}catch(e){}return t&&e.value!==n}(e,n)||function(e,n){var t=e.value,a=e._vModifiers;if(r(a)){if(a.number)return g(t)!==g(n);if(a.trim)return t.trim()!==n.trim()}return t!==n}(e,n))}var oi={create:ai,update:ai},ri=x((function(e){var n={},t=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach((function(e){if(e){var a=e.split(t);a.length>1&&(n[a[0].trim()]=a[1].trim())}})),n}));function si(e){var n=li(e.style);return e.staticStyle?Y(e.staticStyle,n):n}function li(e){return Array.isArray(e)?A(e):"string"==typeof e?ri(e):e}var di,mi=/^--/,ci=/\s*!important$/,ui=function(e,n,t){if(mi.test(n))e.style.setProperty(n,t);else if(ci.test(t))e.style.setProperty(M(n),t.replace(ci,""),"important");else{var a=yi(n);if(Array.isArray(t))for(var i=0,o=t.length;i-1?n.split(pi).forEach((function(n){return e.classList.add(n)})):e.classList.add(n);else{var t=" ".concat(e.getAttribute("class")||""," ");t.indexOf(" "+n+" ")<0&&e.setAttribute("class",(t+n).trim())}}function ji(e,n){if(n&&(n=n.trim()))if(e.classList)n.indexOf(" ")>-1?n.split(pi).forEach((function(n){return e.classList.remove(n)})):e.classList.remove(n),e.classList.length||e.removeAttribute("class");else{for(var t=" ".concat(e.getAttribute("class")||""," "),a=" "+n+" ";t.indexOf(a)>=0;)t=t.replace(a," ");(t=t.trim())?e.setAttribute("class",t):e.removeAttribute("class")}}function bi(e){if(e){if("object"==typeof e){var n={};return!1!==e.css&&Y(n,fi(e.name||"v")),Y(n,e),n}return"string"==typeof e?fi(e):void 0}}var fi=x((function(e){return{enterClass:"".concat(e,"-enter"),enterToClass:"".concat(e,"-enter-to"),enterActiveClass:"".concat(e,"-enter-active"),leaveClass:"".concat(e,"-leave"),leaveToClass:"".concat(e,"-leave-to"),leaveActiveClass:"".concat(e,"-leave-active")}})),vi=L&&!K,ki="transition",xi="transitionend",qi="animation",_i="animationend";vi&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ki="WebkitTransition",xi="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(qi="WebkitAnimation",_i="webkitAnimationEnd"));var Ni=L?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Zi(e){Ni((function(){Ni(e)}))}function Mi(e,n){var t=e._transitionClasses||(e._transitionClasses=[]);t.indexOf(n)<0&&(t.push(n),gi(e,n))}function Ii(e,n){e._transitionClasses&&f(e._transitionClasses,n),ji(e,n)}function Ti(e,n,t){var a=Ai(e,n),i=a.type,o=a.timeout,r=a.propCount;if(!i)return t();var s="transition"===i?xi:_i,l=0,d=function(){e.removeEventListener(s,m),t()},m=function(n){n.target===e&&++l>=r&&d()};setTimeout((function(){l0&&(t="transition",m=r,c=o.length):"animation"===n?d>0&&(t="animation",m=d,c=l.length):c=(t=(m=Math.max(r,d))>0?r>d?"transition":"animation":null)?"transition"===t?o.length:l.length:0,{type:t,timeout:m,propCount:c,hasTransform:"transition"===t&&Yi.test(a[ki+"Property"])}}function Wi(e,n){for(;e.length1}function Vi(e,n){!0!==n.data.show&&Di(n)}var Gi=function(e){var n,t,a={},d=e.modules,m=e.nodeOps;for(n=0;ny?b(e,o(t[p+1])?null:t[p+1].elm,t,h,p,a):h>p&&v(n,c,y)}(c,w,p,t,d):r(p)?(r(e.text)&&m.setTextContent(c,""),b(c,null,p,0,p.length-1,t)):r(w)?v(w,0,w.length-1):r(e.text)&&m.setTextContent(c,""):e.text!==n.text&&m.setTextContent(c,n.text),r(y)&&r(h=y.hook)&&r(h=h.postpatch)&&h(e,n)}}}function _(e,n,t){if(s(t)&&r(e.parent))e.parent.data.pendingInsert=n;else for(var a=0;a-1,r.selected!==o&&(r.selected=o);else if(R(Xi(r),a))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function Si(e,n){return n.every((function(n){return!R(n,e)}))}function Xi(e){return"_value"in e?e._value:e.value}function Bi(e){e.target.composing=!0}function Ci(e){e.target.composing&&(e.target.composing=!1,Li(e.target,"input"))}function Li(e,n){var t=document.createEvent("HTMLEvents");t.initEvent(n,!0,!0),e.dispatchEvent(t)}function Hi(e){return!e.componentInstance||e.data&&e.data.transition?e:Hi(e.componentInstance._vnode)}var Pi={model:Fi,show:{bind:function(e,n,t){var a=n.value,i=(t=Hi(t)).data&&t.data.transition,o=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;a&&i?(t.data.show=!0,Di(t,(function(){e.style.display=o}))):e.style.display=a?o:"none"},update:function(e,n,t){var a=n.value;!a!=!n.oldValue&&((t=Hi(t)).data&&t.data.transition?(t.data.show=!0,a?Di(t,(function(){e.style.display=e.__vOriginalDisplay})):Ri(t,(function(){e.style.display="none"}))):e.style.display=a?e.__vOriginalDisplay:"none")},unbind:function(e,n,t,a,i){i||(e.style.display=e.__vOriginalDisplay)}}},Ki={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function $i(e){var n=e&&e.componentOptions;return n&&n.Ctor.options.abstract?$i(An(n.children)):e}function eo(e){var n={},t=e.$options;for(var a in t.propsData)n[a]=e[a];var i=t._parentListeners;for(var a in i)n[_(a)]=i[a];return n}function no(e,n){if(/\d-keep-alive$/.test(n.tag))return e("keep-alive",{props:n.componentOptions.propsData})}var to=function(e){return e.tag||kn(e)},ao=function(e){return"show"===e.name},io={name:"transition",props:Ki,abstract:!0,render:function(e){var n=this,t=this.$slots.default;if(t&&(t=t.filter(to)).length){0;var a=this.mode;0;var i=t[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return i;var o=$i(i);if(!o)return i;if(this._leaving)return no(e,i);var r="__transition-".concat(this._uid,"-");o.key=null==o.key?o.isComment?r+"comment":r+o.tag:l(o.key)?0===String(o.key).indexOf(r)?o.key:r+o.key:o.key;var s=(o.data||(o.data={})).transition=eo(this),d=this._vnode,m=$i(d);if(o.data.directives&&o.data.directives.some(ao)&&(o.data.show=!0),m&&m.data&&!function(e,n){return n.key===e.key&&n.tag===e.tag}(o,m)&&!kn(m)&&(!m.componentInstance||!m.componentInstance._vnode.isComment)){var c=m.data.transition=Y({},s);if("out-in"===a)return this._leaving=!0,nn(c,"afterLeave",(function(){n._leaving=!1,n.$forceUpdate()})),no(e,i);if("in-out"===a){if(kn(o))return d;var u,h=function(){u()};nn(s,"afterEnter",h),nn(s,"enterCancelled",h),nn(c,"delayLeave",(function(e){u=e}))}}return i}}},oo=Y({tag:String,moveClass:String},Ki);function ro(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function so(e){e.data.newPos=e.elm.getBoundingClientRect()}function lo(e){var n=e.data.pos,t=e.data.newPos,a=n.left-t.left,i=n.top-t.top;if(a||i){e.data.moved=!0;var o=e.elm.style;o.transform=o.WebkitTransform="translate(".concat(a,"px,").concat(i,"px)"),o.transitionDuration="0s"}}delete oo.mode;var mo={Transition:io,TransitionGroup:{props:oo,beforeMount:function(){var e=this,n=this._update;this._update=function(t,a){var i=rt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,i(),n.call(e,t,a)}},render:function(e){for(var n=this.tag||this.$vnode.data.tag||"span",t=Object.create(null),a=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],r=eo(this),s=0;s-1?_a[e]=n.constructor===window.HTMLUnknownElement||n.constructor===window.HTMLElement:_a[e]=/HTMLUnknownElement/.test(n.toString())},Y(na.options.directives,Pi),Y(na.options.components,mo),na.prototype.__patch__=L?Gi:W,na.prototype.$mount=function(e,n){return function(e,n,t){var a;e.$el=n,e.$options.render||(e.$options.render=ye),dt(e,"beforeMount"),a=function(){e._update(e._render(),t)},new et(e,a,W,{before:function(){e._isMounted&&!e._isDestroyed&&dt(e,"beforeUpdate")}},!0),t=!1;var i=e._preWatchers;if(i)for(var o=0;o=0&&(n=e.slice(a),e=e.slice(0,a));var i=e.indexOf("?");return i>=0&&(t=e.slice(i+1),e=e.slice(0,i)),{path:e,query:t,hash:n}}(i.path||""),d=n&&n.path||"/",m=l.path?To(l.path,d,t||i.append):d,c=function(e,n,t){void 0===n&&(n={});var a,i=t||go;try{a=i(e||"")}catch(e){a={}}for(var o in n){var r=n[o];a[o]=Array.isArray(r)?r.map(po):po(r)}return a}(l.query,i.query,a&&a.options.parseQuery),u=i.hash||l.hash;return u&&"#"!==u.charAt(0)&&(u="#"+u),{_normalized:!0,path:m,query:c,hash:u}}var Ko,$o=function(){},er={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(e){var n=this,t=this.$router,a=this.$route,i=t.resolve(this.to,a,this.append),o=i.location,r=i.route,s=i.href,l={},d=t.options.linkActiveClass,m=t.options.linkExactActiveClass,c=null==d?"router-link-active":d,u=null==m?"router-link-exact-active":m,h=null==this.activeClass?c:this.activeClass,y=null==this.exactActiveClass?u:this.exactActiveClass,w=r.redirectedFrom?fo(null,Po(r.redirectedFrom),null,t):r;l[y]=_o(a,w,this.exactPath),l[h]=this.exact||this.exactPath?l[y]:function(e,n){return 0===e.path.replace(bo,"/").indexOf(n.path.replace(bo,"/"))&&(!n.hash||e.hash===n.hash)&&function(e,n){for(var t in n)if(!(t in e))return!1;return!0}(e.query,n.query)}(a,w);var z=l[y]?this.ariaCurrentValue:null,p=function(e){nr(e)&&(n.replace?t.replace(o,$o):t.push(o,$o))},g={click:nr};Array.isArray(this.event)?this.event.forEach((function(e){g[e]=p})):g[this.event]=p;var j={class:l},b=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:s,route:r,navigate:p,isActive:l[h],isExactActive:l[y]});if(b){if(1===b.length)return b[0];if(b.length>1||!b.length)return 0===b.length?e():e("span",{},b)}if("a"===this.tag)j.on=g,j.attrs={href:s,"aria-current":z};else{var f=function e(n){var t;if(n)for(var a=0;a-1&&(s.params[u]=t.params[u]);return s.path=Ho(m.path,s.params),l(m,s,r)}if(s.path){s.params={};for(var h=0;h-1}function Yr(e,n){return Tr(e)&&e._isRouter&&(null==n||e.type===n)}function Ar(e,n,t){var a=function(i){i>=e.length?t():e[i]?n(e[i],(function(){a(i+1)})):a(i+1)};a(0)}function Wr(e){return function(n,t,a){var i=!1,o=0,r=null;Or(e,(function(e,n,t,s){if("function"==typeof e&&void 0===e.cid){i=!0,o++;var l,d=Ur((function(n){var i;((i=n).__esModule||Rr&&"Module"===i[Symbol.toStringTag])&&(n=n.default),e.resolved="function"==typeof n?n:Ko.extend(n),t.components[s]=n,--o<=0&&a()})),m=Ur((function(e){var n="Failed to resolve async component "+s+": "+e;r||(r=Tr(e)?e:new Error(n),a(r))}));try{l=e(d,m)}catch(e){m(e)}if(l)if("function"==typeof l.then)l.then(d,m);else{var c=l.component;c&&"function"==typeof c.then&&c.then(d,m)}}})),i||a()}}function Or(e,n){return Dr(e.map((function(e){return Object.keys(e.components).map((function(t){return n(e.components[t],e.instances[t],e,t)}))})))}function Dr(e){return Array.prototype.concat.apply([],e)}var Rr="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Ur(e){var n=!1;return function(){for(var t=[],a=arguments.length;a--;)t[a]=arguments[a];if(!n)return n=!0,e.apply(this,t)}}var Er=function(e,n){this.router=e,this.base=function(e){if(!e)if(tr){var n=document.querySelector("base");e=(e=n&&n.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else e="/";"/"!==e.charAt(0)&&(e="/"+e);return e.replace(/\/$/,"")}(n),this.current=ko,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Vr(e,n,t,a){var i=Or(e,(function(e,a,i,o){var r=function(e,n){"function"!=typeof e&&(e=Ko.extend(e));return e.options[n]}(e,n);if(r)return Array.isArray(r)?r.map((function(e){return t(e,a,i,o)})):t(r,a,i,o)}));return Dr(a?i.reverse():i)}function Gr(e,n){if(n)return function(){return e.apply(n,arguments)}}Er.prototype.listen=function(e){this.cb=e},Er.prototype.onReady=function(e,n){this.ready?e():(this.readyCbs.push(e),n&&this.readyErrorCbs.push(n))},Er.prototype.onError=function(e){this.errorCbs.push(e)},Er.prototype.transitionTo=function(e,n,t){var a,i=this;try{a=this.router.match(e,this.current)}catch(e){throw this.errorCbs.forEach((function(n){n(e)})),e}var o=this.current;this.confirmTransition(a,(function(){i.updateRoute(a),n&&n(a),i.ensureURL(),i.router.afterHooks.forEach((function(e){e&&e(a,o)})),i.ready||(i.ready=!0,i.readyCbs.forEach((function(e){e(a)})))}),(function(e){t&&t(e),e&&!i.ready&&(Yr(e,_r.redirected)&&o===ko||(i.ready=!0,i.readyErrorCbs.forEach((function(n){n(e)}))))}))},Er.prototype.confirmTransition=function(e,n,t){var a=this,i=this.current;this.pending=e;var o,r,s=function(e){!Yr(e)&&Tr(e)&&(a.errorCbs.length?a.errorCbs.forEach((function(n){n(e)})):console.error(e)),t&&t(e)},l=e.matched.length-1,d=i.matched.length-1;if(_o(e,i)&&l===d&&e.matched[l]===i.matched[d])return this.ensureURL(),e.hash&&yr(this.router,i,e,!1),s(((r=Mr(o=i,e,_r.duplicated,'Avoided redundant navigation to current location: "'+o.fullPath+'".')).name="NavigationDuplicated",r));var m=function(e,n){var t,a=Math.max(e.length,n.length);for(t=0;t0)){var n=this.router,t=n.options.scrollBehavior,a=kr&&t;a&&this.listeners.push(hr());var i=function(){var t=e.current,i=Qr(e.base);e.current===ko&&i===e._startLocation||e.transitionTo(i,(function(e){a&&yr(n,e,t,!0)}))};window.addEventListener("popstate",i),this.listeners.push((function(){window.removeEventListener("popstate",i)}))}},n.prototype.go=function(e){window.history.go(e)},n.prototype.push=function(e,n,t){var a=this,i=this.current;this.transitionTo(e,(function(e){xr(Yo(a.base+e.fullPath)),yr(a.router,e,i,!1),n&&n(e)}),t)},n.prototype.replace=function(e,n,t){var a=this,i=this.current;this.transitionTo(e,(function(e){qr(Yo(a.base+e.fullPath)),yr(a.router,e,i,!1),n&&n(e)}),t)},n.prototype.ensureURL=function(e){if(Qr(this.base)!==this.current.fullPath){var n=Yo(this.base+this.current.fullPath);e?xr(n):qr(n)}},n.prototype.getCurrentLocation=function(){return Qr(this.base)},n}(Er);function Qr(e){var n=window.location.pathname,t=n.toLowerCase(),a=e.toLowerCase();return!e||t!==a&&0!==t.indexOf(Yo(a+"/"))||(n=n.slice(e.length)),(n||"/")+window.location.search+window.location.hash}var Jr=function(e){function n(n,t,a){e.call(this,n,t),a&&function(e){var n=Qr(e);if(!/^\/#/.test(n))return window.location.replace(Yo(e+"/#"+n)),!0}(this.base)||Sr()}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.setupListeners=function(){var e=this;if(!(this.listeners.length>0)){var n=this.router.options.scrollBehavior,t=kr&&n;t&&this.listeners.push(hr());var a=function(){var n=e.current;Sr()&&e.transitionTo(Xr(),(function(a){t&&yr(e.router,a,n,!0),kr||Lr(a.fullPath)}))},i=kr?"popstate":"hashchange";window.addEventListener(i,a),this.listeners.push((function(){window.removeEventListener(i,a)}))}},n.prototype.push=function(e,n,t){var a=this,i=this.current;this.transitionTo(e,(function(e){Cr(e.fullPath),yr(a.router,e,i,!1),n&&n(e)}),t)},n.prototype.replace=function(e,n,t){var a=this,i=this.current;this.transitionTo(e,(function(e){Lr(e.fullPath),yr(a.router,e,i,!1),n&&n(e)}),t)},n.prototype.go=function(e){window.history.go(e)},n.prototype.ensureURL=function(e){var n=this.current.fullPath;Xr()!==n&&(e?Cr(n):Lr(n))},n.prototype.getCurrentLocation=function(){return Xr()},n}(Er);function Sr(){var e=Xr();return"/"===e.charAt(0)||(Lr("/"+e),!1)}function Xr(){var e=window.location.href,n=e.indexOf("#");return n<0?"":e=e.slice(n+1)}function Br(e){var n=window.location.href,t=n.indexOf("#");return(t>=0?n.slice(0,t):n)+"#"+e}function Cr(e){kr?xr(Br(e)):window.location.hash=e}function Lr(e){kr?qr(Br(e)):window.location.replace(Br(e))}var Hr=function(e){function n(n,t){e.call(this,n,t),this.stack=[],this.index=-1}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.push=function(e,n,t){var a=this;this.transitionTo(e,(function(e){a.stack=a.stack.slice(0,a.index+1).concat(e),a.index++,n&&n(e)}),t)},n.prototype.replace=function(e,n,t){var a=this;this.transitionTo(e,(function(e){a.stack=a.stack.slice(0,a.index).concat(e),n&&n(e)}),t)},n.prototype.go=function(e){var n=this,t=this.index+e;if(!(t<0||t>=this.stack.length)){var a=this.stack[t];this.confirmTransition(a,(function(){var e=n.current;n.index=t,n.updateRoute(a),n.router.afterHooks.forEach((function(n){n&&n(a,e)}))}),(function(e){Yr(e,_r.duplicated)&&(n.index=t)}))}},n.prototype.getCurrentLocation=function(){var e=this.stack[this.stack.length-1];return e?e.fullPath:"/"},n.prototype.ensureURL=function(){},n}(Er),Pr=function(e){void 0===e&&(e={}),this.app=null,this.apps=[],this.options=e,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=or(e.routes||[],this);var n=e.mode||"hash";switch(this.fallback="history"===n&&!kr&&!1!==e.fallback,this.fallback&&(n="hash"),tr||(n="abstract"),this.mode=n,n){case"history":this.history=new Fr(this,e.base);break;case"hash":this.history=new Jr(this,e.base,this.fallback);break;case"abstract":this.history=new Hr(this,e.base);break;default:0}},Kr={currentRoute:{configurable:!0}};Pr.prototype.match=function(e,n,t){return this.matcher.match(e,n,t)},Kr.currentRoute.get=function(){return this.history&&this.history.current},Pr.prototype.init=function(e){var n=this;if(this.apps.push(e),e.$once("hook:destroyed",(function(){var t=n.apps.indexOf(e);t>-1&&n.apps.splice(t,1),n.app===e&&(n.app=n.apps[0]||null),n.app||n.history.teardown()})),!this.app){this.app=e;var t=this.history;if(t instanceof Fr||t instanceof Jr){var a=function(e){t.setupListeners(),function(e){var a=t.current,i=n.options.scrollBehavior;kr&&i&&"fullPath"in e&&yr(n,e,a,!1)}(e)};t.transitionTo(t.getCurrentLocation(),a,a)}t.listen((function(e){n.apps.forEach((function(n){n._route=e}))}))}},Pr.prototype.beforeEach=function(e){return es(this.beforeHooks,e)},Pr.prototype.beforeResolve=function(e){return es(this.resolveHooks,e)},Pr.prototype.afterEach=function(e){return es(this.afterHooks,e)},Pr.prototype.onReady=function(e,n){this.history.onReady(e,n)},Pr.prototype.onError=function(e){this.history.onError(e)},Pr.prototype.push=function(e,n,t){var a=this;if(!n&&!t&&"undefined"!=typeof Promise)return new Promise((function(n,t){a.history.push(e,n,t)}));this.history.push(e,n,t)},Pr.prototype.replace=function(e,n,t){var a=this;if(!n&&!t&&"undefined"!=typeof Promise)return new Promise((function(n,t){a.history.replace(e,n,t)}));this.history.replace(e,n,t)},Pr.prototype.go=function(e){this.history.go(e)},Pr.prototype.back=function(){this.go(-1)},Pr.prototype.forward=function(){this.go(1)},Pr.prototype.getMatchedComponents=function(e){var n=e?e.matched?e:this.resolve(e).route:this.currentRoute;return n?[].concat.apply([],n.matched.map((function(e){return Object.keys(e.components).map((function(n){return e.components[n]}))}))):[]},Pr.prototype.resolve=function(e,n,t){var a=Po(e,n=n||this.history.current,t,this),i=this.match(a,n),o=i.redirectedFrom||i.fullPath;return{location:a,route:i,href:function(e,n,t){var a="hash"===t?"#"+n:n;return e?Yo(e+"/"+a):a}(this.history.base,o,this.mode),normalizedTo:a,resolved:i}},Pr.prototype.getRoutes=function(){return this.matcher.getRoutes()},Pr.prototype.addRoute=function(e,n){this.matcher.addRoute(e,n),this.history.current!==ko&&this.history.transitionTo(this.history.getCurrentLocation())},Pr.prototype.addRoutes=function(e){this.matcher.addRoutes(e),this.history.current!==ko&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Pr.prototype,Kr);var $r=Pr;function es(e,n){return e.push(n),function(){var t=e.indexOf(n);t>-1&&e.splice(t,1)}}Pr.install=function e(n){if(!e.installed||Ko!==n){e.installed=!0,Ko=n;var t=function(e){return void 0!==e},a=function(e,n){var a=e.$options._parentVnode;t(a)&&t(a=a.data)&&t(a=a.registerRouteInstance)&&a(e,n)};n.mixin({beforeCreate:function(){t(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),n.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,a(this,this)},destroyed:function(){a(this)}}),Object.defineProperty(n.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(n.prototype,"$route",{get:function(){return this._routerRoot._route}}),n.component("RouterView",Mo),n.component("RouterLink",er);var i=n.config.optionMergeStrategies;i.beforeRouteEnter=i.beforeRouteLeave=i.beforeRouteUpdate=i.created}},Pr.version="3.6.5",Pr.isNavigationFailure=Yr,Pr.NavigationFailureType=_r,Pr.START_LOCATION=ko,tr&&window.Vue&&window.Vue.use(Pr);t(104);t(126),t(90);var ns={"components/AlgoliaSearchBox":()=>Promise.all([t.e(0),t.e(14)]).then(t.bind(null,322)),"components/DropdownLink":()=>Promise.all([t.e(0),t.e(15)]).then(t.bind(null,259)),"components/DropdownTransition":()=>Promise.all([t.e(0),t.e(22)]).then(t.bind(null,247)),"components/Home":()=>Promise.all([t.e(0),t.e(17)]).then(t.bind(null,295)),"components/NavLink":()=>t.e(25).then(t.bind(null,246)),"components/NavLinks":()=>Promise.all([t.e(0),t.e(13)]).then(t.bind(null,273)),"components/Navbar":()=>Promise.all([t.e(0),t.e(1)]).then(t.bind(null,318)),"components/Page":()=>Promise.all([t.e(0),t.e(12)]).then(t.bind(null,296)),"components/PageEdit":()=>Promise.all([t.e(0),t.e(18)]).then(t.bind(null,276)),"components/PageNav":()=>Promise.all([t.e(0),t.e(16)]).then(t.bind(null,277)),"components/Sidebar":()=>Promise.all([t.e(0),t.e(11)]).then(t.bind(null,297)),"components/SidebarButton":()=>Promise.all([t.e(0),t.e(21)]).then(t.bind(null,300)),"components/SidebarGroup":()=>Promise.all([t.e(0),t.e(4)]).then(t.bind(null,274)),"components/SidebarLink":()=>Promise.all([t.e(0),t.e(20)]).then(t.bind(null,260)),"components/SidebarLinks":()=>Promise.all([t.e(0),t.e(4)]).then(t.bind(null,258)),"global-components/Badge":()=>Promise.all([t.e(0),t.e(5)]).then(t.bind(null,327)),"global-components/CodeBlock":()=>Promise.all([t.e(0),t.e(6)]).then(t.bind(null,323)),"global-components/CodeGroup":()=>Promise.all([t.e(0),t.e(7)]).then(t.bind(null,324)),"layouts/404":()=>t.e(26).then(t.bind(null,325)),"layouts/Layout":()=>Promise.all([t.e(0),t.e(2),t.e(1),t.e(3)]).then(t.bind(null,319)),NotFound:()=>Promise.all([t.e(0),t.e(2),t.e(1),t.e(3),t.e(8)]).then(t.bind(null,326)),Layout:()=>Promise.all([t.e(0),t.e(2),t.e(1),t.e(3)]).then(t.bind(null,319)),"components/Footer":()=>Promise.all([t.e(0),t.e(23)]).then(t.bind(null,299)),"components/SearchBox":()=>Promise.all([t.e(0),t.e(24)]).then(t.bind(null,294)),"components/SearchModal":()=>Promise.all([t.e(0),t.e(2),t.e(19)]).then(t.bind(null,298)),"layouts/NotFound":()=>Promise.all([t.e(0),t.e(2),t.e(1),t.e(3),t.e(8)]).then(t.bind(null,326))},ts={"v-c0a4944c":()=>t.e(27).then(t.bind(null,328)),"v-038b01fa":()=>t.e(28).then(t.bind(null,329)),"v-b8cb630c":()=>t.e(29).then(t.bind(null,330)),"v-aaa9b6f4":()=>t.e(30).then(t.bind(null,331)),"v-d6cbe5b8":()=>t.e(32).then(t.bind(null,332)),"v-0a39d43a":()=>t.e(31).then(t.bind(null,333)),"v-4c2c563a":()=>t.e(34).then(t.bind(null,334)),"v-c0082a28":()=>t.e(33).then(t.bind(null,335)),"v-db3ac7ec":()=>t.e(35).then(t.bind(null,336)),"v-ecd6cf40":()=>t.e(36).then(t.bind(null,337)),"v-48851acc":()=>t.e(38).then(t.bind(null,338)),"v-90d4f50c":()=>t.e(37).then(t.bind(null,339)),"v-9172688c":()=>t.e(39).then(t.bind(null,340)),"v-172dfc5a":()=>t.e(40).then(t.bind(null,341)),"v-30ab1e90":()=>t.e(41).then(t.bind(null,342)),"v-d314c1cc":()=>t.e(42).then(t.bind(null,343)),"v-3f2c877a":()=>t.e(43).then(t.bind(null,344)),"v-b292638c":()=>t.e(45).then(t.bind(null,345)),"v-2fa5878c":()=>t.e(44).then(t.bind(null,346)),"v-e0d70ecc":()=>t.e(46).then(t.bind(null,347)),"v-6e1e3488":()=>t.e(47).then(t.bind(null,348)),"v-2151a890":()=>t.e(48).then(t.bind(null,349)),"v-4222367a":()=>t.e(52).then(t.bind(null,350)),"v-79f5d88c":()=>t.e(51).then(t.bind(null,351)),"v-ad4931e0":()=>t.e(50).then(t.bind(null,352)),"v-0cbb8c5a":()=>t.e(53).then(t.bind(null,353)),"v-68d9087a":()=>t.e(54).then(t.bind(null,354)),"v-2aed10ba":()=>t.e(55).then(t.bind(null,355)),"v-d8e9780c":()=>t.e(56).then(t.bind(null,356)),"v-37cd1c0a":()=>t.e(57).then(t.bind(null,357)),"v-657f8880":()=>t.e(59).then(t.bind(null,358)),"v-401d6fcc":()=>t.e(61).then(t.bind(null,359)),"v-bf3acddc":()=>t.e(60).then(t.bind(null,360)),"v-332240f8":()=>t.e(58).then(t.bind(null,361)),"v-598bd946":()=>t.e(63).then(t.bind(null,362)),"v-0d0949e4":()=>t.e(62).then(t.bind(null,363)),"v-c8f0091c":()=>t.e(64).then(t.bind(null,364)),"v-e8e2a6fc":()=>t.e(66).then(t.bind(null,365)),"v-6c1fe4b4":()=>t.e(65).then(t.bind(null,366)),"v-a40710da":()=>t.e(67).then(t.bind(null,367)),"v-4d71a012":()=>t.e(68).then(t.bind(null,368)),"v-3798e78c":()=>t.e(69).then(t.bind(null,369)),"v-fc9b918c":()=>t.e(70).then(t.bind(null,370)),"v-2c88928c":()=>t.e(49).then(t.bind(null,371))};function as(e){const n=Object.create(null);return function(t){return n[t]||(n[t]=e(t))}}const is=/-(\w)/g,os=as(e=>e.replace(is,(e,n)=>n?n.toUpperCase():"")),rs=/\B([A-Z])/g,ss=as(e=>e.replace(rs,"-$1").toLowerCase()),ls=as(e=>e.charAt(0).toUpperCase()+e.slice(1));function ds(e,n){if(!n)return;if(e(n))return e(n);return n.includes("-")?e(ls(os(n))):e(ls(n))||e(ss(n))}const ms=Object.assign({},ns,ts),cs=e=>ms[e],us=e=>ts[e],hs=e=>ns[e],ys=e=>na.component(e);function ws(e){return ds(us,e)}function zs(e){return ds(hs,e)}function ps(e){return ds(cs,e)}function gs(e){return ds(ys,e)}function js(...e){return Promise.all(e.filter(e=>e).map(async e=>{if(!gs(e)&&ps(e)){const n=await ps(e)();na.component(e,n.default)}}))}function bs(e,n){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[e]=n)}var fs=t(87),vs=t.n(fs),ks=t(88),xs=t.n(ks),qs={created(){if(this.siteMeta=this.$site.headTags.filter(([e])=>"meta"===e).map(([e,n])=>n),this.$ssrContext){const n=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(e=n)?e.map(e=>{let n="{n+=` ${t}="${xs()(e[t])}"`}),n+">"}).join("\n "):"",this.$ssrContext.canonicalLink=Ns(this.$canonicalUrl)}var e},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const e=this.getMergedMetaTags();this.currentMetaTags=Zs(e,this.currentMetaTags)},getMergedMetaTags(){const e=this.$page.frontmatter.meta||[];return vs()([{name:"description",content:this.$description}],e,this.siteMeta,Ms)},updateCanonicalLink(){_s(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",Ns(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){Zs(null,this.currentMetaTags),_s()}};function _s(){const e=document.querySelector("link[rel='canonical']");e&&e.remove()}function Ns(e=""){return e?``:""}function Zs(e,n){if(n&&[...n].filter(e=>e.parentNode===document.head).forEach(e=>document.head.removeChild(e)),e)return e.map(e=>{const n=document.createElement("meta");return Object.keys(e).forEach(t=>{n.setAttribute(t,e[t])}),document.head.appendChild(n),n})}function Ms(e){for(const n of["name","property","itemprop"])if(e.hasOwnProperty(n))return e[n]+n;return JSON.stringify(e)}var Is=t(89),Ts={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:t.n(Is)()((function(){this.setActiveHash()}),300),setActiveHash(){const e=[].slice.call(document.querySelectorAll(".sidebar-link")),n=[].slice.call(document.querySelectorAll(".header-anchor")).filter(n=>e.some(e=>e.hash===n.hash)),t=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),i=window.innerHeight+t;for(let e=0;e=o.parentElement.offsetTop+10&&(!r||t{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},Ys=t(22),As=t.n(Ys),Ws={mounted(){As.a.configure({showSpinner:!1}),this.$router.beforeEach((e,n,t)=>{e.path===n.path||na.component(e.name)||As.a.start(),t()}),this.$router.afterEach(()=>{As.a.done(),this.isSidebarOpen=!1})}},Os={props:{parent:Object,code:String,options:{align:String,color:String,backgroundTransition:Boolean,backgroundColor:String,successText:String,staticIcon:Boolean}},data:()=>({success:!1,originalBackground:null,originalTransition:null}),computed:{alignStyle(){let e={};return e[this.options.align]="7.5px",e},iconClass(){return this.options.staticIcon?"":"hover"}},mounted(){this.originalTransition=this.parent.style.transition,this.originalBackground=this.parent.style.background},beforeDestroy(){this.parent.style.transition=this.originalTransition,this.parent.style.background=this.originalBackground},methods:{hexToRgb(e){let n=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return n?{r:parseInt(n[1],16),g:parseInt(n[2],16),b:parseInt(n[3],16)}:null},copyToClipboard(e){if(navigator.clipboard)navigator.clipboard.writeText(this.code).then(()=>{this.setSuccessTransitions()},()=>{});else{let e=document.createElement("textarea");document.body.appendChild(e),e.value=this.code,e.select(),document.execCommand("Copy"),e.remove(),this.setSuccessTransitions()}},setSuccessTransitions(){if(clearTimeout(this.successTimeout),this.options.backgroundTransition){this.parent.style.transition="background 350ms";let e=this.hexToRgb(this.options.backgroundColor);this.parent.style.background=`rgba(${e.r}, ${e.g}, ${e.b}, 0.1)`}this.success=!0,this.successTimeout=setTimeout(()=>{this.options.backgroundTransition&&(this.parent.style.background=this.originalBackground,this.parent.style.transition=this.originalTransition),this.success=!1},500)}}},Ds=(t(237),t(10)),Rs=Object(Ds.a)(Os,(function(){var e=this,n=e._self._c;return n("div",{staticClass:"code-copy"},[n("svg",{class:e.iconClass,style:e.alignStyle,attrs:{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},on:{click:e.copyToClipboard}},[n("path",{attrs:{fill:"none",d:"M0 0h24v24H0z"}}),e._v(" "),n("path",{attrs:{fill:e.options.color,d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z"}})]),e._v(" "),n("span",{class:e.success?"success":"",style:e.alignStyle},[e._v("\n "+e._s(e.options.successText)+"\n ")])])}),[],!1,null,"49140617",null).exports,Us=(t(238),[qs,Ts,Ws,{updated(){this.update()},methods:{update(){setTimeout(()=>{document.querySelectorAll('div[class*="language-"] pre').forEach(e=>{if(e.classList.contains("code-copy-added"))return;let n=new(na.extend(Rs));n.options={align:"bottom",color:"#27b1ff",backgroundTransition:!0,backgroundColor:"#0075b8",successText:"Copied!",staticIcon:!1},n.code=e.innerText,n.parent=e,n.$mount(),e.classList.add("code-copy-added"),e.appendChild(n.$el)})},100)}}}]),Es={name:"GlobalLayout",computed:{layout(){const e=this.getLayout();return bs("layout",e),na.component(e)}},methods:{getLayout(){if(this.$page.path){const e=this.$page.frontmatter.layout;return e&&(this.$vuepress.getLayoutAsyncComponent(e)||this.$vuepress.getVueComponent(e))?e:"Layout"}return"NotFound"}}},Vs=Object(Ds.a)(Es,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(e,n,t){switch(n){case"components":e[n]||(e[n]={}),Object.assign(e[n],t);break;case"mixins":e[n]||(e[n]=[]),e[n].push(...t);break;default:throw new Error("Unknown option name.")}}(Vs,"mixins",Us);const Gs=[{name:"v-c0a4944c",path:"/arns/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-c0a4944c").then(t)}},{path:"/arns/index.html",redirect:"/arns/"},{path:"/arns.html",redirect:"/arns/"},{name:"v-038b01fa",path:"/arweave/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-038b01fa").then(t)}},{path:"/arweave/index.html",redirect:"/arweave/"},{path:"/arweave.html",redirect:"/arweave/"},{name:"v-b8cb630c",path:"/community-resources.html",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-b8cb630c").then(t)}},{name:"v-aaa9b6f4",path:"/manifests/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-aaa9b6f4").then(t)}},{path:"/manifests/index.html",redirect:"/manifests/"},{path:"/concepts/manifests.html",redirect:"/manifests/"},{name:"v-d6cbe5b8",path:"/wayfinder/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-d6cbe5b8").then(t)}},{path:"/wayfinder/index.html",redirect:"/wayfinder/"},{path:"/concepts/wayfinder.html",redirect:"/wayfinder/"},{name:"v-0a39d43a",path:"/concepts/sandboxing.html",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-0a39d43a").then(t)}},{name:"v-4c2c563a",path:"/guides/experimental/ao-ant/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-4c2c563a").then(t)}},{path:"/guides/experimental/ao-ant/index.html",redirect:"/guides/experimental/ao-ant/"},{path:"/experimental/ao-ant.html",redirect:"/guides/experimental/ao-ant/"},{name:"v-c0082a28",path:"/contribute.html",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-c0082a28").then(t)}},{name:"v-db3ac7ec",path:"/guides/experimental/ao-resolver/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-db3ac7ec").then(t)}},{path:"/guides/experimental/ao-resolver/index.html",redirect:"/guides/experimental/ao-resolver/"},{path:"/experimental/ao-resolver.html",redirect:"/guides/experimental/ao-resolver/"},{name:"v-ecd6cf40",path:"/foundation/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-ecd6cf40").then(t)}},{path:"/foundation/index.html",redirect:"/foundation/"},{path:"/foundation.html",redirect:"/foundation/"},{name:"v-48851acc",path:"/gateways/ar-io-node/admin/admin-api.html",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-48851acc").then(t)}},{name:"v-90d4f50c",path:"/gateway-network/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-90d4f50c").then(t)}},{path:"/gateway-network/index.html",redirect:"/gateway-network/"},{path:"/gateway-network.html",redirect:"/gateway-network/"},{name:"v-9172688c",path:"/gateways/ar-io-node/advanced-config.html",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-9172688c").then(t)}},{name:"v-172dfc5a",path:"/gateways/ar-io-node/api.html",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-172dfc5a").then(t)}},{name:"v-30ab1e90",path:"/gateways/ar-io-node/arnsoip/observer/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-30ab1e90").then(t)}},{path:"/gateways/ar-io-node/arnsoip/observer/index.html",redirect:"/gateways/ar-io-node/arnsoip/observer/"},{path:"/gateways/ar-io-node/arnsoip/observer.html",redirect:"/gateways/ar-io-node/arnsoip/observer/"},{name:"v-d314c1cc",path:"/gateways/bundler/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-d314c1cc").then(t)}},{path:"/gateways/bundler/index.html",redirect:"/gateways/bundler/"},{path:"/gateways/ar-io-node/bundler.html",redirect:"/gateways/bundler/"},{name:"v-3f2c877a",path:"/gateways/delegated-staking/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-3f2c877a").then(t)}},{path:"/gateways/delegated-staking/index.html",redirect:"/gateways/delegated-staking/"},{path:"/gateways/ar-io-node/delegated-staking.html",redirect:"/gateways/delegated-staking/"},{name:"v-b292638c",path:"/experimental/frames/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-b292638c").then(t)}},{path:"/experimental/frames/index.html",redirect:"/experimental/frames/"},{path:"/gateways/ar-io-node/experimental/frames.html",redirect:"/experimental/frames/"},{name:"v-2fa5878c",path:"/gateways/ar-io-node/env.html",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-2fa5878c").then(t)}},{name:"v-e0d70ecc",path:"/gateways/ar-io-node/linux-setup/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-e0d70ecc").then(t)}},{path:"/gateways/ar-io-node/linux-setup/index.html",redirect:"/gateways/ar-io-node/linux-setup/"},{path:"/gateways/ar-io-node/linux-setup.html",redirect:"/gateways/ar-io-node/linux-setup/"},{name:"v-6e1e3488",path:"/troubleshooting-observer/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-6e1e3488").then(t)}},{path:"/troubleshooting-observer/index.html",redirect:"/troubleshooting-observer/"},{path:"/gateways/ar-io-node/observer-troubleshooting.html",redirect:"/troubleshooting-observer/"},{name:"v-2151a890",path:"/gateways/ar-io-node/observer-upgrade.html",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-2151a890").then(t)}},{name:"v-4222367a",path:"/gateways/testnet/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-4222367a").then(t)}},{path:"/gateways/testnet/index.html",redirect:"/gateways/testnet/"},{path:"/gateways/ar-io-node/testnet.html",redirect:"/gateways/testnet/"},{name:"v-79f5d88c",path:"/gateways/ar-io-node/release-notes.html",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-79f5d88c").then(t)}},{name:"v-ad4931e0",path:"/gateways/ar-io-node/overview/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-ad4931e0").then(t)}},{path:"/gateways/ar-io-node/overview/index.html",redirect:"/gateways/ar-io-node/overview/"},{path:"/gateways/ar-io-node/overview.html",redirect:"/gateways/ar-io-node/overview/"},{name:"v-0cbb8c5a",path:"/troubleshooting/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-0cbb8c5a").then(t)}},{path:"/troubleshooting/index.html",redirect:"/troubleshooting/"},{path:"/gateways/ar-io-node/troubleshooting.html",redirect:"/troubleshooting/"},{name:"v-68d9087a",path:"/gateways/upgrade/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-68d9087a").then(t)}},{path:"/gateways/upgrade/index.html",redirect:"/gateways/upgrade/"},{path:"/gateways/ar-io-node/upgrading.html",redirect:"/gateways/upgrade/"},{name:"v-2aed10ba",path:"/gateways/ar-io-node/windows-setup/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-2aed10ba").then(t)}},{path:"/gateways/ar-io-node/windows-setup/index.html",redirect:"/gateways/ar-io-node/windows-setup/"},{path:"/gateways/ar-io-node/windows-setup.html",redirect:"/gateways/ar-io-node/windows-setup/"},{name:"v-d8e9780c",path:"/gateways/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-d8e9780c").then(t)}},{path:"/gateways/index.html",redirect:"/gateways/"},{path:"/gateways/gateways.html",redirect:"/gateways/"},{name:"v-37cd1c0a",path:"/glossary.html",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-37cd1c0a").then(t)}},{name:"v-657f8880",path:"/guides/arns/managing.html",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-657f8880").then(t)}},{name:"v-401d6fcc",path:"/guides/arns/registering.html",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-401d6fcc").then(t)}},{name:"v-bf3acddc",path:"/guides/arns/overview.html",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-bf3acddc").then(t)}},{name:"v-332240f8",path:"/guides/ants-on-bazar/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-332240f8").then(t)}},{path:"/guides/ants-on-bazar/index.html",redirect:"/guides/ants-on-bazar/"},{path:"/guides/ants-on-bazar.html",redirect:"/guides/ants-on-bazar/"},{name:"v-598bd946",path:"/guides/perma-deploy/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-598bd946").then(t)}},{path:"/guides/perma-deploy/index.html",redirect:"/guides/perma-deploy/"},{path:"/guides/github-flow.html",redirect:"/guides/perma-deploy/"},{name:"v-0d0949e4",path:"/delegated-staking/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-0d0949e4").then(t)}},{path:"/delegated-staking/index.html",redirect:"/delegated-staking/"},{path:"/guides/delegated-staking.html",redirect:"/delegated-staking/"},{name:"v-c8f0091c",path:"/guides/graphql/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-c8f0091c").then(t)}},{path:"/guides/graphql/index.html",redirect:"/guides/graphql/"},{path:"/guides/gql.html",redirect:"/guides/graphql/"},{name:"v-e8e2a6fc",path:"/sdk/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-e8e2a6fc").then(t)}},{path:"/sdk/index.html",redirect:"/sdk/"},{path:"/guides/sdk.html",redirect:"/sdk/"},{name:"v-6c1fe4b4",path:"/guides/sdk-release-notes.html",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-6c1fe4b4").then(t)}},{name:"v-a40710da",path:"/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-a40710da").then(t)}},{path:"/index.html",redirect:"/"},{name:"v-4d71a012",path:"/introduction/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-4d71a012").then(t)}},{path:"/introduction/index.html",redirect:"/introduction/"},{path:"/introduction.html",redirect:"/introduction/"},{name:"v-3798e78c",path:"/labs/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-3798e78c").then(t)}},{path:"/labs/index.html",redirect:"/labs/"},{path:"/labs.html",redirect:"/labs/"},{name:"v-fc9b918c",path:"/token/",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-fc9b918c").then(t)}},{path:"/token/index.html",redirect:"/token/"},{path:"/token.html",redirect:"/token/"},{name:"v-2c88928c",path:"/gateways/ar-io-node/operation.html",component:Vs,beforeEnter:(e,n,t)=>{js("Layout","v-2c88928c").then(t)}},{path:"*",component:Vs}],Fs={title:"ar.io Docs",description:"Documentation, guides, and other resources for ar.io developers and gateway operators.",base:"/docs/",headTags:[["link",{rel:"icon",href:"/docs/images/logo.png"}],["meta",{property:"og:title",content:"ar.io Network Docs"}],["meta",{name:"twitter:title",content:"ar.io Network Docs"}],["meta",{property:"og:image",content:"https://res.cloudinary.com/dopbvlqgc/image/upload/v1706802732/ario_v2nv53.png"}],["meta",{name:"twitter:card",content:"summary_large_image"}],["meta",{name:"twitter:image",content:"https://res.cloudinary.com/dopbvlqgc/image/upload/v1706802732/ario_v2nv53.png"}],["meta",{name:"twitter:site",content:"@ar_io_network"}],["meta",{name:"theme-color",content:"#3eaf7c"}],["meta",{name:"apple-mobile-web-app-capable",content:"yes"}],["meta",{name:"apple-mobile-web-app-status-bar-style",content:"black"}],["script",{src:"https://plausible.io/js/script.js",defer:!0,"data-domain":"docs.ar.io"}],["link",{rel:"stylesheet",href:"https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap"}],["link",{rel:"stylesheet",href:"https://fonts.googleapis.com/css2?family=Dancing+Script:wght@400;500;600;700&display=swap"}]],pages:[{title:"Arweave Name System (ArNS)",frontmatter:{permalink:"/arns/"},regularPath:"/arns.html",relativePath:"arns.md",key:"v-c0a4944c",path:"/arns/",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:33},{level:2,title:"Name Registry",slug:"name-registry",normalizedTitle:"name registry",charIndex:2257},{level:3,title:"Name Validation Rules",slug:"name-validation-rules",normalizedTitle:"name validation rules",charIndex:4001},{level:2,title:"Arweave Name Token (ANT)",slug:"arweave-name-token-ant",normalizedTitle:"arweave name token (ant)",charIndex:1263},{level:3,title:"Under_Names",slug:"under-names",normalizedTitle:"under_names",charIndex:6568},{level:2,title:"Addressing Variable Market Conditions",slug:"addressing-variable-market-conditions",normalizedTitle:"addressing variable market conditions",charIndex:8254},{level:2,title:"Dynamic Pricing Model",slug:"dynamic-pricing-model",normalizedTitle:"dynamic pricing model",charIndex:9155},{level:3,title:"Pricing Scenarios",slug:"pricing-scenarios",normalizedTitle:"pricing scenarios",charIndex:10311},{level:3,title:"Dynamic Pricing Mechanics",slug:"dynamic-pricing-mechanics",normalizedTitle:"dynamic pricing mechanics",charIndex:10649},{level:3,title:"Step Pricing Mechanics",slug:"step-pricing-mechanics",normalizedTitle:"step pricing mechanics",charIndex:12539}],headersStr:"Overview Name Registry Name Validation Rules Arweave Name Token (ANT) Under_Names Addressing Variable Market Conditions Dynamic Pricing Model Pricing Scenarios Dynamic Pricing Mechanics Step Pricing Mechanics",content:"# Arweave Name System (ArNS)\n\n\n# Overview\n\nArweave URLs and Transaction IDs are long, difficult to remember, and occasionally miscategorized as spam. The Arweave Name System (ArNS) aims to resolve these problems in a decentralized manner. ArNS is a censorship-resistant naming system stored on Arweave, purchased with IO tokens, enabled through AR.IO gateway domains, and used to connect friendly domain names to permaweb dApps, web pages, data, and identities.\n\nIt's like an open, permissionless address book for anything on the permaweb, powered by the aoComputer.\n\nThis system works similarly to traditional DNS services, where users can purchase a name in a registry and DNS Name servers resolve these names to IP addresses. The system shall be flexible and allow users to purchase names permanently or lease them for a defined period based on their use case. With ArNS, the registry is decentralized, permanent, and stored on Arweave (through the aoComputer). This means that apps and infrastructure cannot just read the latest state of the registry but can also check any point in time in the past, creating a “Wayback Machine” of permanent data.\n\nUsers can register a name, like ardrive, within the ArNS Registry. Before owning a name, they must create an Arweave Name Token (ANT), an aoCOmputer process and open-source protocol used by ArNS to track the ownership and control over the name. ANTs allow the owner to set a pointer to any type of permaweb data, like a page, dApp or file, via its Arweave Transaction ID.\n\nEach AR.IO gateway acts as both a smart contract cache and an ArNS Name resolver. They will generate the latest state of both the ArNS Registry and its related ANTs and serve this information rapidly for apps and users. AR.IO gateways will also resolve that name as one of their own subdomains, e.g., https://ardrive.arweave.net and proxy all requests to the associated Arweave Transaction ID. This means that ANTs work across all AR.IO gateways that support them: https://ardrive.ar-io.dev, https://ardrive.g8way.io/, etc.\n\nUsers can easily reference these friendly names in their browsers, and other applications and infrastructure can build rich solutions on top of these ArNS primitives.\n\nArweave Name System Interactions\n\n\n# Name Registry\n\nThe ArNS Registry is a list of all the registered names and their associated ANT AO process Ids. Registering a name requires spending IO tokens based upon the name length and purchase type. The system shall allow users to either lease a name on a yearly basis (maximum up to 5 years) or purchase that name permanently.\n\nThe registry uses the following key rules, embedded within the AR.IO AO process:\n\n * The genesis prices of names are set within the contract itself; these are the starting conditions.\n * Name prices vary based on name length, purchase type (lease vs buy), lease duration, and the current Demand Factor. See the Dynamic Pricing section for more details.\n * Name records in the registry each include a pointer to its Arweave Name Token Smart Contract process address, its lease end time, and undername allocation.\n * Anyone with available IO Tokens can extend any name’s active lease.\n * Anyone with available IO Tokens can purchase undername space for any name.\n * When a lease expires, there is a grace period where it can still be extended before anyone else can repurchase the name with a new ANT.\n\nOnce added, name records cannot be removed from the registry. A leased name’s associated ANT smart contract address cannot be changed until the lease has expired and a new one is purchased. Care must be taken by the owners of permanent name purchases to ensure that their ANT supports an evolve ability should it be desired to add or modify functionality in the future as these name purchases are permanently tied to the associated ANT. Owners of permanently purchased names must understand the consequences of private key loss, which results in not being able to update any data pointers for this name.\n\n\n# Name Validation Rules\n\nAll names registered shall meet the following criteria:\n\n 1. Valid names include only numbers 0-9, characters a-z and dashes.\n 2. Dashes cannot be leading or trailing characters.\n 3. Dashes cannot be used in single character domains.\n 4. 1 character minimum, 51 characters maximum.\n 5. Shall not be an invalid name predesignated to prevent unintentional use/abuse such as www.\n\n\n# Arweave Name Token (ANT)\n\nTo establish ownership of a record in the ArNS Registry, each record contains both a friendly name and a reference to an Arweave Name Token, ANT. Name Tokens are unique aoComputer process tokens that give their owners the ability to update the Arweave Transaction IDs that their associated friendly names point to.\n\nThe ANT process is a standardized contract that contains the specific ArNS Record specification required by AR.IO gateways who resolve ArNS names and their Arweave Transaction IDs. It also contains other basic functionality to establish ownership and the ability to transfer ownership and update the Arweave Transaction ID.\n\nName Tokens have an owner, who can transfer the token and control all of its modifiable settings. These settings include modifying the time to live (ttl) for each name contained in the ANT, and other settings like the ANT Name, Ticker, and an ANT Controller. The controller can only manage the ANT and set and update records, name, and the ticker, but cannot transfer the ANT. Note that ANTs are initially created by an end user, in accordance with network standards, who then has to ability to transfer its ownership or assign a controller as they see fit.\n\nSecondary markets could be created by ecosystem partners that facilitate the trade of Name Tokens. Additionally, tertiary markets could be created that support the leasing of these friendly names to other users. Such markets, if any, would be created by third parties unrelated to and outside of the scope of this paper or control of the Foundation.\n\nThe table below indicates some of the possible interactions with an ANT and who can perform them:\n\nANT INTERACTIONS\nTYPE ANT OWNER ANT CONTROLLER ANY IO TOKEN HOLDER\nTransfer ANT ✔ \nAdd / remove controllers ✔ \nSet records (pointers) ✔ ✔ \nUpdate records, name, ticker ✔ ✔ \nExtend / renew lease ✔ ✔ ✔\nIncrease undernames ✔ ✔ ✔\n\nANT Interactions\n\n\n# Under_Names\n\nANT owners and controllers can configure multiple subdomains for their registered ArNS name known as “under_names” or more easily written “undernames”. These undernames are assigned individually at the time of registration or can be added on to any registered name at any time.\n\nUndernames use an underscore “_” in place of a more typically used dot “.“ to separate the subdomain from the main ArNS domain.\n\nThis means users can trust dapp_ardrive just like you would trust ardrive since the owner of ardrive is the only one who can configure dapp_ardrive.\n\nSome other features that undernames allow include:\n\n * Undernames are configured in the ANT that is referenced for a given name. ANT owners can add more undernames as subDomains in the ANT’s records object, each of which can point to a different Arweave Transaction ID.\n * Each registered name is provided with an allocation of 10 undernames by default. Additional undername space can be purchased individually and as needed.\n * Other users could never register a name that resembles an undername on ardrive since “_” is not allowed to be registered in the ArNS registry.\n * Another user can register dapp-ardrive but this is a separate ArNS domain altogether. In traditional DNS, it’s like the difference in trusting dapp-ardrive.io(suspicious!) over the legitimate dapp.ardrive.io\n * Undernames can go multiple levels deep, like version_dapp_ardrive but must not be longer than the total MAX_NAME_LENGTH of an ArNS name. The total amount of characters for a name string consisting of undernames and underscore separators is 63 characters.\n\nUndernames give more versatility and utility to owning an ArNS name.\n\n\n# Addressing Variable Market Conditions\n\nThe future market landscape is unpredictable, and the AR.IO Network smart contract is designed to be immutable, operating without governance or mechanisms for manual intervention. In addition, the traditional method of employing a pricing oracle to fix prices relative to a stable currency is not viable due to the infancy of the network as well as the inherent reliance on outside dependencies. Considering this, ArNS is designed to be self-contained and adaptive, ensuring that name prices always mirror network activity and market conditions.\n\nTo achieve this, ArNS incorporates a dynamic pricing model that utilizes a “Demand Factor” to adjust fees in line with ArNS purchase activity.\n\nArNS is designed to ensure that name valuations are always in sync with their true market worth, despite the unchangeable nature of the smart contract it operates on.\n\n\n# Dynamic Pricing Model\n\nThe Arweave Name System (ArNS) introduces an adaptive pricing model for registering names within the AR.IO Network. The core objective is to strike a balance between market demand and pricing fairness, leveraging both static and dynamic pricing elements. The system differentiates prices based on character lengths of names and offers varied purchasing options such as leasing, permanent acquisition, and undernames.\n\nA unique feature of the ArNS pricing mechanism is the integration of a Demand Factor (DF), a dynamic multiplier that adjusts name prices in response to market demand. The DF is determined by comparing the total revenue in IO tokens from the current period to a moving average of revenues from the preceding period window. Depending on whether revenue is above, below, or equal to this average, the DF can increase or decrease. These adjustments are contained within boundaries to prevent extreme pricing variations.\n\nThis comprehensive approach ensures that ArNS names are accessible and reasonably priced, adapting to market trends while maintaining an equitable and maintenance-free registration environment.\n\n\n# Pricing Scenarios\n\nThere are several pricing models for leasing and purchasing names:\n\n * Leased Name: Allows a user to lease a name for a certain duration and have it available for use immediately by the lessee.\n\n * Permanent Name: Allows a user to purchase a name permanently and have it available for use immediately by the owner.\n\n\n# Dynamic Pricing Mechanics\n\nNames are initially priced according to the Genesis Registration Fee (GRF), as set in the AR.IO smart contract, with prices varying based on the length of the name. As the network's activity progresses, these fees give way to Base Registration Fees (BRF), which are modified by periodic step adjustments. The Demand Factor (DF) is a crucial component that dynamically scales prices, fluctuating with the network’s revenue trends.\n\nRevenue in the network accumulates within the Protocol Balance through various streams, such as instant name leases or purchases, lease extensions, and under_name transactions. This cumulative revenue impacts the Demand Factor, which in turn influences the current name prices.\n\nThe DF is adjusted by comparing the recent period’s revenue against a Revenue Moving Average (RMA) from the preceding seven periods. Based on this comparison, the DF can either increase, to reflect greater demand, or decrease, in response to diminished revenue, all within predetermined limits to prevent drastic fluctuations in pricing\n\nThe pricing system articulates various fees:\n\n * The Adjusted Registration Fee (ARF) is the BRF modified by the DF.\n\n * The Annual Fee is set as a proportion of the ARF.\n\n * Instant Lease Registration and Permabuy prices are derived from the ARF, adding the calculated annual fees over the desired years.\n\nThe DF’s modifications are controlled by the network's recent performance against the RMA. An increase in revenue leads to a DF rise, signifying a thriving market demand, while a decrease indicates the opposite. This responsive adjustment mechanism ensures that the pricing model remains aligned with actual market activity.\n\nUnder_names are bundled with name registrations with additional ones available for purchase. The cost for extra under_names is a percentage of the current BRF, altered by the DF.\n\n\n# Step Pricing Mechanics\n\nThe dynamic model shall utilize a “Step Pricing” concept that acts as a stabilizing mechanism to counteract swift and dramatic market shifts, ensuring registration costs remain aligned and predictable. Step pricing adjusts the Base Registration Fees when the Demand Factor reaches its minimum value for an extended period, updating the BRF to align with the current ARF, and resetting the DF to a neutral value. This allows for base prices to lower in extended droughts of low demand or high token value resulting in lower revenue generated to the protocol balance.\n\nThe below chart represents Step Pricing in action:\n\nStep Pricing Action - Declining Demand",normalizedContent:"# arweave name system (arns)\n\n\n# overview\n\narweave urls and transaction ids are long, difficult to remember, and occasionally miscategorized as spam. the arweave name system (arns) aims to resolve these problems in a decentralized manner. arns is a censorship-resistant naming system stored on arweave, purchased with io tokens, enabled through ar.io gateway domains, and used to connect friendly domain names to permaweb dapps, web pages, data, and identities.\n\nit's like an open, permissionless address book for anything on the permaweb, powered by the aocomputer.\n\nthis system works similarly to traditional dns services, where users can purchase a name in a registry and dns name servers resolve these names to ip addresses. the system shall be flexible and allow users to purchase names permanently or lease them for a defined period based on their use case. with arns, the registry is decentralized, permanent, and stored on arweave (through the aocomputer). this means that apps and infrastructure cannot just read the latest state of the registry but can also check any point in time in the past, creating a “wayback machine” of permanent data.\n\nusers can register a name, like ardrive, within the arns registry. before owning a name, they must create an arweave name token (ant), an aocomputer process and open-source protocol used by arns to track the ownership and control over the name. ants allow the owner to set a pointer to any type of permaweb data, like a page, dapp or file, via its arweave transaction id.\n\neach ar.io gateway acts as both a smart contract cache and an arns name resolver. they will generate the latest state of both the arns registry and its related ants and serve this information rapidly for apps and users. ar.io gateways will also resolve that name as one of their own subdomains, e.g., https://ardrive.arweave.net and proxy all requests to the associated arweave transaction id. this means that ants work across all ar.io gateways that support them: https://ardrive.ar-io.dev, https://ardrive.g8way.io/, etc.\n\nusers can easily reference these friendly names in their browsers, and other applications and infrastructure can build rich solutions on top of these arns primitives.\n\narweave name system interactions\n\n\n# name registry\n\nthe arns registry is a list of all the registered names and their associated ant ao process ids. registering a name requires spending io tokens based upon the name length and purchase type. the system shall allow users to either lease a name on a yearly basis (maximum up to 5 years) or purchase that name permanently.\n\nthe registry uses the following key rules, embedded within the ar.io ao process:\n\n * the genesis prices of names are set within the contract itself; these are the starting conditions.\n * name prices vary based on name length, purchase type (lease vs buy), lease duration, and the current demand factor. see the dynamic pricing section for more details.\n * name records in the registry each include a pointer to its arweave name token smart contract process address, its lease end time, and undername allocation.\n * anyone with available io tokens can extend any name’s active lease.\n * anyone with available io tokens can purchase undername space for any name.\n * when a lease expires, there is a grace period where it can still be extended before anyone else can repurchase the name with a new ant.\n\nonce added, name records cannot be removed from the registry. a leased name’s associated ant smart contract address cannot be changed until the lease has expired and a new one is purchased. care must be taken by the owners of permanent name purchases to ensure that their ant supports an evolve ability should it be desired to add or modify functionality in the future as these name purchases are permanently tied to the associated ant. owners of permanently purchased names must understand the consequences of private key loss, which results in not being able to update any data pointers for this name.\n\n\n# name validation rules\n\nall names registered shall meet the following criteria:\n\n 1. valid names include only numbers 0-9, characters a-z and dashes.\n 2. dashes cannot be leading or trailing characters.\n 3. dashes cannot be used in single character domains.\n 4. 1 character minimum, 51 characters maximum.\n 5. shall not be an invalid name predesignated to prevent unintentional use/abuse such as www.\n\n\n# arweave name token (ant)\n\nto establish ownership of a record in the arns registry, each record contains both a friendly name and a reference to an arweave name token, ant. name tokens are unique aocomputer process tokens that give their owners the ability to update the arweave transaction ids that their associated friendly names point to.\n\nthe ant process is a standardized contract that contains the specific arns record specification required by ar.io gateways who resolve arns names and their arweave transaction ids. it also contains other basic functionality to establish ownership and the ability to transfer ownership and update the arweave transaction id.\n\nname tokens have an owner, who can transfer the token and control all of its modifiable settings. these settings include modifying the time to live (ttl) for each name contained in the ant, and other settings like the ant name, ticker, and an ant controller. the controller can only manage the ant and set and update records, name, and the ticker, but cannot transfer the ant. note that ants are initially created by an end user, in accordance with network standards, who then has to ability to transfer its ownership or assign a controller as they see fit.\n\nsecondary markets could be created by ecosystem partners that facilitate the trade of name tokens. additionally, tertiary markets could be created that support the leasing of these friendly names to other users. such markets, if any, would be created by third parties unrelated to and outside of the scope of this paper or control of the foundation.\n\nthe table below indicates some of the possible interactions with an ant and who can perform them:\n\nant interactions\ntype ant owner ant controller any io token holder\ntransfer ant ✔ \nadd / remove controllers ✔ \nset records (pointers) ✔ ✔ \nupdate records, name, ticker ✔ ✔ \nextend / renew lease ✔ ✔ ✔\nincrease undernames ✔ ✔ ✔\n\nant interactions\n\n\n# under_names\n\nant owners and controllers can configure multiple subdomains for their registered arns name known as “under_names” or more easily written “undernames”. these undernames are assigned individually at the time of registration or can be added on to any registered name at any time.\n\nundernames use an underscore “_” in place of a more typically used dot “.“ to separate the subdomain from the main arns domain.\n\nthis means users can trust dapp_ardrive just like you would trust ardrive since the owner of ardrive is the only one who can configure dapp_ardrive.\n\nsome other features that undernames allow include:\n\n * undernames are configured in the ant that is referenced for a given name. ant owners can add more undernames as subdomains in the ant’s records object, each of which can point to a different arweave transaction id.\n * each registered name is provided with an allocation of 10 undernames by default. additional undername space can be purchased individually and as needed.\n * other users could never register a name that resembles an undername on ardrive since “_” is not allowed to be registered in the arns registry.\n * another user can register dapp-ardrive but this is a separate arns domain altogether. in traditional dns, it’s like the difference in trusting dapp-ardrive.io(suspicious!) over the legitimate dapp.ardrive.io\n * undernames can go multiple levels deep, like version_dapp_ardrive but must not be longer than the total max_name_length of an arns name. the total amount of characters for a name string consisting of undernames and underscore separators is 63 characters.\n\nundernames give more versatility and utility to owning an arns name.\n\n\n# addressing variable market conditions\n\nthe future market landscape is unpredictable, and the ar.io network smart contract is designed to be immutable, operating without governance or mechanisms for manual intervention. in addition, the traditional method of employing a pricing oracle to fix prices relative to a stable currency is not viable due to the infancy of the network as well as the inherent reliance on outside dependencies. considering this, arns is designed to be self-contained and adaptive, ensuring that name prices always mirror network activity and market conditions.\n\nto achieve this, arns incorporates a dynamic pricing model that utilizes a “demand factor” to adjust fees in line with arns purchase activity.\n\narns is designed to ensure that name valuations are always in sync with their true market worth, despite the unchangeable nature of the smart contract it operates on.\n\n\n# dynamic pricing model\n\nthe arweave name system (arns) introduces an adaptive pricing model for registering names within the ar.io network. the core objective is to strike a balance between market demand and pricing fairness, leveraging both static and dynamic pricing elements. the system differentiates prices based on character lengths of names and offers varied purchasing options such as leasing, permanent acquisition, and undernames.\n\na unique feature of the arns pricing mechanism is the integration of a demand factor (df), a dynamic multiplier that adjusts name prices in response to market demand. the df is determined by comparing the total revenue in io tokens from the current period to a moving average of revenues from the preceding period window. depending on whether revenue is above, below, or equal to this average, the df can increase or decrease. these adjustments are contained within boundaries to prevent extreme pricing variations.\n\nthis comprehensive approach ensures that arns names are accessible and reasonably priced, adapting to market trends while maintaining an equitable and maintenance-free registration environment.\n\n\n# pricing scenarios\n\nthere are several pricing models for leasing and purchasing names:\n\n * leased name: allows a user to lease a name for a certain duration and have it available for use immediately by the lessee.\n\n * permanent name: allows a user to purchase a name permanently and have it available for use immediately by the owner.\n\n\n# dynamic pricing mechanics\n\nnames are initially priced according to the genesis registration fee (grf), as set in the ar.io smart contract, with prices varying based on the length of the name. as the network's activity progresses, these fees give way to base registration fees (brf), which are modified by periodic step adjustments. the demand factor (df) is a crucial component that dynamically scales prices, fluctuating with the network’s revenue trends.\n\nrevenue in the network accumulates within the protocol balance through various streams, such as instant name leases or purchases, lease extensions, and under_name transactions. this cumulative revenue impacts the demand factor, which in turn influences the current name prices.\n\nthe df is adjusted by comparing the recent period’s revenue against a revenue moving average (rma) from the preceding seven periods. based on this comparison, the df can either increase, to reflect greater demand, or decrease, in response to diminished revenue, all within predetermined limits to prevent drastic fluctuations in pricing\n\nthe pricing system articulates various fees:\n\n * the adjusted registration fee (arf) is the brf modified by the df.\n\n * the annual fee is set as a proportion of the arf.\n\n * instant lease registration and permabuy prices are derived from the arf, adding the calculated annual fees over the desired years.\n\nthe df’s modifications are controlled by the network's recent performance against the rma. an increase in revenue leads to a df rise, signifying a thriving market demand, while a decrease indicates the opposite. this responsive adjustment mechanism ensures that the pricing model remains aligned with actual market activity.\n\nunder_names are bundled with name registrations with additional ones available for purchase. the cost for extra under_names is a percentage of the current brf, altered by the df.\n\n\n# step pricing mechanics\n\nthe dynamic model shall utilize a “step pricing” concept that acts as a stabilizing mechanism to counteract swift and dramatic market shifts, ensuring registration costs remain aligned and predictable. step pricing adjusts the base registration fees when the demand factor reaches its minimum value for an extended period, updating the brf to align with the current arf, and resetting the df to a neutral value. this allows for base prices to lower in extended droughts of low demand or high token value resulting in lower revenue generated to the protocol balance.\n\nthe below chart represents step pricing in action:\n\nstep pricing action - declining demand",charsets:{}},{title:"Arweave",frontmatter:{permalink:"/arweave/"},regularPath:"/arweave.html",relativePath:"arweave.md",key:"v-038b01fa",path:"/arweave/",headers:[{level:2,title:"The Permanence Pie",slug:"the-permanence-pie",normalizedTitle:"the permanence pie",charIndex:14},{level:2,title:"What Is Arweave",slug:"what-is-arweave",normalizedTitle:"what is arweave",charIndex:1451},{level:2,title:"Gateways",slug:"gateways",normalizedTitle:"gateways",charIndex:3775},{level:2,title:"aoComputer",slug:"aocomputer",normalizedTitle:"aocomputer",charIndex:5703},{level:2,title:"The Permaweb",slug:"the-permaweb",normalizedTitle:"the permaweb",charIndex:6659},{level:2,title:"References and Further Reading",slug:"references-and-further-reading",normalizedTitle:"references and further reading",charIndex:7195}],headersStr:"The Permanence Pie What Is Arweave Gateways aoComputer The Permaweb References and Further Reading",content:'# Arweave\n\n\n# The Permanence Pie\n\nThe permanent data storage ecosystem can be thought of as a three-tiered arrangement of protocols, services, and applications – dubbed here as “The Permanence Pie”.\n\nDiagram 1: The Shell of Permanence Pie\n\nThe base layer of that pie is the Arweave protocol and network, which is the backbone of the permanent data storage ecosystem. It provides the infrastructure for data to be stored on the network in a decentralized manner and incentivizes nodes to keep the data stored for long periods of time.\n\nThe second layer is made up of services that sit on top of the Arweave protocol and network. These services include gateways, data retrieval services, and computation that help to provide a seamless and functional experience for users, creators, and developers.\n\nFinally, the top layer of the pie consists of applications that utilize the data stored on the Arweave network. This includes everything from simple applications that allow users to access and view their data to complex, decentralized applications that use the Arweave network as their backbone.\n\nEach layer of the Permanence Pie is crucial to the overall success and growth of the permanent data storage ecosystem. The Arweave protocol and network provide the foundation for data storage, the services layer helps to facilitate data retrieval and usage, and the application layer brings the benefits of the ecosystem to users and developers alike.\n\n\n# What Is Arweave\n\nArweave is a decentralized Layer 1 data storage protocol optimized for long-term permanent storage through its unique proof of access mechanism and tokenomic endowment model. It can be thought of as a global, permissionless hard drive.\n\nThe information stored on Arweave is immutable and globally replicated by miner nodes. Instead of a traditional blockchain ledger which links blocks of transactions together in linear sequence, Arweave arranges blocks in a web known as the blockweave. These miner nodes secure the blockweave by operating the Succinct Proof of Random Access (SPoRA) algorithm. SPoRA requires miners to prove that they have access to recall randomly selected bits of weave data in order to produce and share a block. If successful, miners are rewarded in Arweave’s native AR token. These token rewards are derived from transaction fees as well as the network’s storage endowment. The endowment is a protocol-controlled pool of tokens designed to fund the projected cost of storage for 200+ years.\n\nDiagram 2: Arweave - The Base Storage Layer\n\nArweave is file type agnostic – any type of file ranging from simple text files to family photos to complex web applications and archival databases can be stored on the network. To upload data, users must pay an amount of AR proportional to the size of the files being uploaded. Arweave is unique when compared with other decentralized storage solutions in that users only pay once to upload their files, then that is it – the files will be stored in perpetuity without any additional upkeep or subscription fees paid by the user.\n\nThe Arweave protocol is designed to handle 1,000 base layer transactions per block with new blocks being mined roughly every two minutes. Each transaction may also store an unbounded number of signed, non-AR-transacting data items assembled into a bundle (i.e., a bundled data item). Since its launch in 2018, this scalable architecture has allowed the network\'s weave size (total data stored on the network) to grow to 140.8 TB with approximately 1.5 billion base layer transactions and bundled data items submitted from over 181k unique wallets. The Arweave protocol endowment has received 60.7k AR to cover the projected storage costs with a cost of storage 0.858 AR/GiB. *\n\n* data as of November 20, 2023\n\n\n# Gateways\n\nGateways act as the front door to the permaweb. They are infrastructure utilities that sit above the base storage layer and allow users to write, access, and query the information stored on Arweave. Gateways are specialized nodes responsible for data ingest (data "in") and data egress (data "out").\n\nFor access / egress, gateways allow for data retrieval, caching, and serving as well as indexing transactions into a database that can be easily queried at scale. With bundling functionality, gateways can act as services allowing users to write and seed new data the Arweave network.\n\nThese "in and out" functions are not performed by the Arweave mining nodes which are optimized for securing the Layer 1 blockweave and replicating information throughout the network through a mechanism known as Wildfire.\n\nDiagram 3: Gateways - The Ingest and Access Component\n\nBy taking on these responsibilities, gateways allow low cost and maintenance free hosting of static and dynamic content for users, creators, and developers. But there are costs associated with operating a gateway and Arweave does not offer any tokenomic incentives to offset these expenses. As the permaweb grows, these costs can become very significant.\n\nArweave.net, the primary community gateway, has scaled to meet the needs of the entire Arweave ecosystem and stored the entire weave. Over the last 6 months, this gateway indexed and cached approximately 3.4 million base layer transactions and bundled data items per day, served 233 million requests for data and node information per day, and responded to 3.2 million GQL queries per day. *\n\nGateway use cases, and the types of administrators who operate them, can range from at-home projects hosted by hobbyists to larger decentralized platforms and dApps run by small teams, all the way up to scaled out environments capable of supporting enterprise offerings.\n\n* data as of November 20, 2023\n\n\n# aoComputer\n\nAO is a global supercomputer built on Arweave. This actor-oriented machine is a single, unified computing environment, hosted on a heterogenous set of nodes in a distributed network. AO is designed to offer an environment in which an arbitrary number of parallel processes can be resident, coordinating through an open message passing layer. This message passing standard connects the machine\'s independently operating processes together into a \'web\' -- in the same way that websites operate on independent servers but are conjoined into a cohesive, unified experience via hyperlinks.\n\nDiagram 4: AO - The Supercomputer and Smart Contract Protocol\n\nWith AO, developers can create processes that act as smart contracts with token-like properties which can then be used to incorporate incentive structures into applications and infrastructure. The AR.IO Network leverages this technology for development of its network protocol and IO token.\n\n\n# The Permaweb\n\nThe permaweb is the third and final layer of the permanence pie. The permaweb stands for the permanent web, a collection of all the webpages, apps, and files stored on top of the Arweave network and enlivened with the functionality of the AR.IO Network. For users and builders, the permaweb offers low-cost, zero maintenance, permanent hosting of their web apps, files, and web pages.\n\nDiagram 5: The Permanence Pie\n\nAR.IO is a global network, protocol, and currency built on top of Arweave that enables the permaweb.\n\n\n# References and Further Reading\n\nThe following resources were used as reference material for this section and can provide the interested reader with additional information:\n\n * The ArWiki\n\n * Arweave GitHub repository\n\n * aoComputer',normalizedContent:'# arweave\n\n\n# the permanence pie\n\nthe permanent data storage ecosystem can be thought of as a three-tiered arrangement of protocols, services, and applications – dubbed here as “the permanence pie”.\n\ndiagram 1: the shell of permanence pie\n\nthe base layer of that pie is the arweave protocol and network, which is the backbone of the permanent data storage ecosystem. it provides the infrastructure for data to be stored on the network in a decentralized manner and incentivizes nodes to keep the data stored for long periods of time.\n\nthe second layer is made up of services that sit on top of the arweave protocol and network. these services include gateways, data retrieval services, and computation that help to provide a seamless and functional experience for users, creators, and developers.\n\nfinally, the top layer of the pie consists of applications that utilize the data stored on the arweave network. this includes everything from simple applications that allow users to access and view their data to complex, decentralized applications that use the arweave network as their backbone.\n\neach layer of the permanence pie is crucial to the overall success and growth of the permanent data storage ecosystem. the arweave protocol and network provide the foundation for data storage, the services layer helps to facilitate data retrieval and usage, and the application layer brings the benefits of the ecosystem to users and developers alike.\n\n\n# what is arweave\n\narweave is a decentralized layer 1 data storage protocol optimized for long-term permanent storage through its unique proof of access mechanism and tokenomic endowment model. it can be thought of as a global, permissionless hard drive.\n\nthe information stored on arweave is immutable and globally replicated by miner nodes. instead of a traditional blockchain ledger which links blocks of transactions together in linear sequence, arweave arranges blocks in a web known as the blockweave. these miner nodes secure the blockweave by operating the succinct proof of random access (spora) algorithm. spora requires miners to prove that they have access to recall randomly selected bits of weave data in order to produce and share a block. if successful, miners are rewarded in arweave’s native ar token. these token rewards are derived from transaction fees as well as the network’s storage endowment. the endowment is a protocol-controlled pool of tokens designed to fund the projected cost of storage for 200+ years.\n\ndiagram 2: arweave - the base storage layer\n\narweave is file type agnostic – any type of file ranging from simple text files to family photos to complex web applications and archival databases can be stored on the network. to upload data, users must pay an amount of ar proportional to the size of the files being uploaded. arweave is unique when compared with other decentralized storage solutions in that users only pay once to upload their files, then that is it – the files will be stored in perpetuity without any additional upkeep or subscription fees paid by the user.\n\nthe arweave protocol is designed to handle 1,000 base layer transactions per block with new blocks being mined roughly every two minutes. each transaction may also store an unbounded number of signed, non-ar-transacting data items assembled into a bundle (i.e., a bundled data item). since its launch in 2018, this scalable architecture has allowed the network\'s weave size (total data stored on the network) to grow to 140.8 tb with approximately 1.5 billion base layer transactions and bundled data items submitted from over 181k unique wallets. the arweave protocol endowment has received 60.7k ar to cover the projected storage costs with a cost of storage 0.858 ar/gib. *\n\n* data as of november 20, 2023\n\n\n# gateways\n\ngateways act as the front door to the permaweb. they are infrastructure utilities that sit above the base storage layer and allow users to write, access, and query the information stored on arweave. gateways are specialized nodes responsible for data ingest (data "in") and data egress (data "out").\n\nfor access / egress, gateways allow for data retrieval, caching, and serving as well as indexing transactions into a database that can be easily queried at scale. with bundling functionality, gateways can act as services allowing users to write and seed new data the arweave network.\n\nthese "in and out" functions are not performed by the arweave mining nodes which are optimized for securing the layer 1 blockweave and replicating information throughout the network through a mechanism known as wildfire.\n\ndiagram 3: gateways - the ingest and access component\n\nby taking on these responsibilities, gateways allow low cost and maintenance free hosting of static and dynamic content for users, creators, and developers. but there are costs associated with operating a gateway and arweave does not offer any tokenomic incentives to offset these expenses. as the permaweb grows, these costs can become very significant.\n\narweave.net, the primary community gateway, has scaled to meet the needs of the entire arweave ecosystem and stored the entire weave. over the last 6 months, this gateway indexed and cached approximately 3.4 million base layer transactions and bundled data items per day, served 233 million requests for data and node information per day, and responded to 3.2 million gql queries per day. *\n\ngateway use cases, and the types of administrators who operate them, can range from at-home projects hosted by hobbyists to larger decentralized platforms and dapps run by small teams, all the way up to scaled out environments capable of supporting enterprise offerings.\n\n* data as of november 20, 2023\n\n\n# aocomputer\n\nao is a global supercomputer built on arweave. this actor-oriented machine is a single, unified computing environment, hosted on a heterogenous set of nodes in a distributed network. ao is designed to offer an environment in which an arbitrary number of parallel processes can be resident, coordinating through an open message passing layer. this message passing standard connects the machine\'s independently operating processes together into a \'web\' -- in the same way that websites operate on independent servers but are conjoined into a cohesive, unified experience via hyperlinks.\n\ndiagram 4: ao - the supercomputer and smart contract protocol\n\nwith ao, developers can create processes that act as smart contracts with token-like properties which can then be used to incorporate incentive structures into applications and infrastructure. the ar.io network leverages this technology for development of its network protocol and io token.\n\n\n# the permaweb\n\nthe permaweb is the third and final layer of the permanence pie. the permaweb stands for the permanent web, a collection of all the webpages, apps, and files stored on top of the arweave network and enlivened with the functionality of the ar.io network. for users and builders, the permaweb offers low-cost, zero maintenance, permanent hosting of their web apps, files, and web pages.\n\ndiagram 5: the permanence pie\n\nar.io is a global network, protocol, and currency built on top of arweave that enables the permaweb.\n\n\n# references and further reading\n\nthe following resources were used as reference material for this section and can provide the interested reader with additional information:\n\n * the arwiki\n\n * arweave github repository\n\n * aocomputer',charsets:{}},{title:"Community Resources",frontmatter:{prev:!1,next:!1},regularPath:"/community-resources.html",relativePath:"community-resources.md",key:"v-b8cb630c",path:"/community-resources.html",headersStr:null,content:"# Community Resources\n\nar.io Github\n\nar.io Twitter\n\nar.io Discord\n\nContact Us Directly",normalizedContent:"# community resources\n\nar.io github\n\nar.io twitter\n\nar.io discord\n\ncontact us directly",charsets:{}},{title:"Manifests",frontmatter:{permalink:"/manifests",sidebarDepth:3},regularPath:"/concepts/manifests.html",relativePath:"concepts/manifests.md",key:"v-aaa9b6f4",path:"/manifests/",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:16},{level:2,title:"What is a Manifest",slug:"what-is-a-manifest",normalizedTitle:"what is a manifest",charIndex:2339},{level:3,title:"Sample Manifest",slug:"sample-manifest",normalizedTitle:"sample manifest",charIndex:2731},{level:3,title:"How it Works",slug:"how-it-works",normalizedTitle:"how it works",charIndex:3566},{level:3,title:"Example Usage",slug:"example-usage",normalizedTitle:"example usage",charIndex:3832},{level:2,title:"Specifications",slug:"specifications",normalizedTitle:"specifications",charIndex:4872},{level:3,title:"Transaction Tags",slug:"transaction-tags",normalizedTitle:"transaction tags",charIndex:4891},{level:3,title:"Transaction Data",slug:"transaction-data",normalizedTitle:"transaction data",charIndex:5605}],headersStr:"Overview What is a Manifest Sample Manifest How it Works Example Usage Specifications Transaction Tags Transaction Data",content:'# Manifests\n\n\n# Overview\n\nar.io Gateways support friendly-path-name routing for data on Arweave via Manifests. This greatly improves the programmability of data relationships. Consider an illustrative example where data stored on Arweave and accessed like this:\n\nhttp:///cG7Hdi_iTQPoEYgQJFqJ8NMpN4KoZ-vH_j7pG4iP7NI (txID of a website\'s index.html)\nhttp:///3zFsd7bkCAUtXUKBQ4XiPiQvpLVKfZ6kiLNt2XVSfoV (txID of its js/style.css)\nhttp:///or0_fRYFcQYWh-QsozygI5Zoamw_fUsYu2w8_X1RkYZ (txID of its assets/img/logo.png)\n\n\ncan instead be accessed like this:\n\nhttp:/// (resolves to the txID of index.html)\nhttp:////js/style.css\nhttp:////assets/img/logo.png\n\n\nNFT collections also benefit from manifest-based routing:\n\nhttp:////0.png\nhttp:////1.png\nhttp:////2.png\n... and so on.\n\n\nar.io gateways are capable of resolving manifest paths in a relative manner. An HTML page loading assets from Arweave would be very difficult to develop, maintain, and harden against hosting domains leaving existence if assets had to be linked to by a fully qualified domain name and an Arweave data item ID as the path. For example:\n\n\n\n\nManifests allow HTML pages to use relative paths to assets with friendly names so that the document is easy to read, maintain, and host across any ar.io domain. For example:\n\n\n\n\nRelative routing eliminates the need for every link to contain the full Arweave transaction ID and fully qualified domain name. This makes the HTML more readable and ensures that links remain valid even if the hosting domain changes. If index.html needed to access js/style.css, the relative link ./js/style.css could be used instead of /js/style.css. This relative routing is incredibly useful for linking together files in a way that allows functional websites to be hosted entirely on Arweave.\n\nLearn more about relative path routing and structuring files into a permanently hosted website in ArDrive\'s decentralized app guide\n\n\n# What is a Manifest\n\nManifests, also known as "Path Manifests" or "Arweave Manifests," are JSON objects that connect various Arweave data items and define relational paths for easy navigation. A common use case for manifests is permanently hosting websites on Arweave by linking all necessary files together. An ar.io gateway can then resolve the manifest into a fully functional website.\n\n\n# Sample Manifest\n\n{\n "manifest": "arweave/paths",\n "version": "0.2.0",\n "index": {\n "path": "index.html"\n },\n "fallback": {\n "id": "iXo3LSfVKVtXUKBzfZ4d7bkCAp6kiLNt2XVUFsPiQvQ"\n },\n "paths": {\n "index.html": {\n "id": "cG7Hdi_iTQPoEYgQJFqJ8NMpN4KoZ-vH_j7pG4iP7NI"\n },\n "404.html": {\n "id": "iXo3LSfVKVtXUKBzfZ4d7bkCAp6kiLNt2XVUFsPiQvQ"\n },\n "js/style.css": {\n "id": "3zFsd7bkCAUtXUKBQ4XiPiQvpLVKfZ6kiLNt2XVSfoV"\n },\n "css/style.css": {\n "id": "sPiQvpAUXLVK3zF6iXSfo7bkCVQkiLNt24dVtXUKBfZ"\n },\n "css/mobile.css": {\n "id": "fZ4d7bkCAUiXSfo3zFsPiQvpLVKVtXUKB6kiLNt2XVQ"\n },\n "assets/img/logo.png": {\n "id": "or0_fRYFcQYWh-QsozygI5Zoamw_fUsYu2w8_X1RkYZ"\n },\n "assets/img/icon.png": {\n "id": "0543SMRGYuGKTaqLzmpOyK4AxAB96Fra2guHzYxjRGo"\n }\n }\n}\n\n\n\n# How it Works\n\nA resolver, typically an ar.io gateway, resolves URLs requesting content based on a manifest transaction ID to the corresponding path key in the paths object. The URL schema for this type of request is https:////.\n\n\n# Example Usage\n\nAssume the manifest above is uploaded to Arweave with the transaction ID UyC5P5qKPZaltMmmZAWdakhlDXsBF6qmyrbWYFchRTk. The below table shows https requests to the ar.io gateway arweave.dev requesting various endpoints on the manifest transaction Id, the manifest path where the gateway will find the data to return, and the resulting Arweave txId.\n\nREQUEST PATH MANIFEST PATH DATA SERVED FROM TXID\nhttps://arweave.dev/UyC5P5qKPZaltMmmZAWdakhlDXsBF6qmyrbWYFchRTk index cG7Hdi_iTQPoEYgQJFqJ8NMpN4KoZ-vH_j7pG4iP7NI\nhttps://arweave.dev/UyC5P5qKPZaltMmmZAWdakhlDXsBF6qmyrbWYFchRTk/index.html index.html cG7Hdi_iTQPoEYgQJFqJ8NMpN4KoZ-vH_j7pG4iP7NI\nhttps://arweave.dev/UyC5P5qKPZaltMmmZAWdakhlDXsBF6qmyrbWYFchRTk/js/style.css js/style.css 3zFsd7bkCAUtXUKBQ4XiPiQvpLVKfZ6kiLNt2XVSfoV\nhttps://arweave.dev/UyC5P5qKPZaltMmmZAWdakhlDXsBF6qmyrbWYFchRTk/foobar fallback iXo3LSfVKVtXUKBzfZ4d7bkCAp6kiLNt2XVUFsPiQvQ\n\n\n# Specifications\n\n\n# Transaction Tags\n\nManifest are uploaded to Arweave in the same manner as any other data item. A specific content type tag must be added while uploading so that resolvers like the ar.io gateways can recognize a manifest and properly resolve the paths. Tags must be attached to the manifest at the time of upload. They cannot be added later without uploading a new manifest, and they must be attached to the upload transaction, NOT placed inside the json object.\n\nFailure to provide this tag will result in resolvers not recognizing the manifest, so they will only return the raw json instead of the linked data items.\n\n# Content-Type\n\n{ "name": "Content-Type", "value": "application/x.arweave-manifest+json" }\n\n\n\n# Transaction Data\n\nBeing a json object, there are several attributes that make up the structure of a manifest. The json object must be fully defined and uploaded to Arweave as a data item.\n\n# manifest\n\n"manifest": "arweave/paths"\n\n\nThe manifest attribute serves as an additional validation layer. It must have the value arweave/paths in order for a gateway to resolve the manifest.\n\n# version\n\n"version": "0.2.0"\n\n\nThe version attribute defines the version of manifest schema a manifest is using.\n\n# index\n\n"index": {\n "id": "cG7Hdi_iTQPoEYgQJFqJ8NMpN4KoZ-vH_j7pG4iP7NI"\n }\n\n\nor\n\n"index": {\n "path": "index.html",\n }\n\n\nThe index attribute is an object that defines the base, or \'starting\' data item. It is similar to the / endpoint on a website. When resolving the manifest with no additional path definition, this is the data item that will be returned.\n\nindex accepts either path or id as sub attributes. path represents the key of a defined path in the manifest, while id represents a specific Arweave data item transaction Id.\n\nIf both path and id are defined in index, id will override path.\n\n# fallback\n\n"fallback": {\n "id": "iXo3LSfVKVtXUKBzfZ4d7bkCAp6kiLNt2XVUFsPiQvQ"\n }\n\n\nThe fallback attribute is an object that defines an Arweave data item transaction Id for the resolver to fall back to if it fails to correctly resolve a requested path. For example, it can act as a 404 page if a user requests manifest/non-existent-page\n\nfallback accepts id as a sub attribute, representing an Arweave data item transaction Id.\n\n# paths\n\n"paths": {\n "index.html": {\n "id": "cG7Hdi_iTQPoEYgQJFqJ8NMpN4KoZ-vH_j7pG4iP7NI"\n },\n "404.html": {\n "id": "iXo3LSfVKVtXUKBzfZ4d7bkCAp6kiLNt2XVUFsPiQvQ"\n },\n "js/style.css": {\n "id": "3zFsd7bkCAUtXUKBQ4XiPiQvpLVKfZ6kiLNt2XVSfoV"\n },\n "css/style.css": {\n "id": "sPiQvpAUXLVK3zF6iXSfo7bkCVQkiLNt24dVtXUKBfZ"\n },\n "css/mobile.css": {\n "id": "fZ4d7bkCAUiXSfo3zFsPiQvpLVKVtXUKB6kiLNt2XVQ"\n },\n "assets/img/logo.png": {\n "id": "or0_fRYFcQYWh-QsozygI5Zoamw_fUsYu2w8_X1RkYZ"\n },\n "assets/img/icon.png": {\n "id": "0543SMRGYuGKTaqLzmpOyK4AxAB96Fra2guHzYxjRGo"\n }\n }\n\n\nThe paths attribute is an object that defines the url paths that a manifest can resolve to. If a user navigates to manifest/index.html the resolver will look for index.html as a key in the paths object and return the corresponding id. (cG7Hdi_iTQPoEYgQJFqJ8NMpN4KoZ-vH_j7pG4iP7NI)',normalizedContent:'# manifests\n\n\n# overview\n\nar.io gateways support friendly-path-name routing for data on arweave via manifests. this greatly improves the programmability of data relationships. consider an illustrative example where data stored on arweave and accessed like this:\n\nhttp:///cg7hdi_itqpoeygqjfqj8nmpn4koz-vh_j7pg4ip7ni (txid of a website\'s index.html)\nhttp:///3zfsd7bkcautxukbq4xipiqvplvkfz6kilnt2xvsfov (txid of its js/style.css)\nhttp:///or0_fryfcqywh-qsozygi5zoamw_fusyu2w8_x1rkyz (txid of its assets/img/logo.png)\n\n\ncan instead be accessed like this:\n\nhttp:/// (resolves to the txid of index.html)\nhttp:////js/style.css\nhttp:////assets/img/logo.png\n\n\nnft collections also benefit from manifest-based routing:\n\nhttp:////0.png\nhttp:////1.png\nhttp:////2.png\n... and so on.\n\n\nar.io gateways are capable of resolving manifest paths in a relative manner. an html page loading assets from arweave would be very difficult to develop, maintain, and harden against hosting domains leaving existence if assets had to be linked to by a fully qualified domain name and an arweave data item id as the path. for example:\n\n\n\n\nmanifests allow html pages to use relative paths to assets with friendly names so that the document is easy to read, maintain, and host across any ar.io domain. for example:\n\n\n\n\nrelative routing eliminates the need for every link to contain the full arweave transaction id and fully qualified domain name. this makes the html more readable and ensures that links remain valid even if the hosting domain changes. if index.html needed to access js/style.css, the relative link ./js/style.css could be used instead of /js/style.css. this relative routing is incredibly useful for linking together files in a way that allows functional websites to be hosted entirely on arweave.\n\nlearn more about relative path routing and structuring files into a permanently hosted website in ardrive\'s decentralized app guide\n\n\n# what is a manifest\n\nmanifests, also known as "path manifests" or "arweave manifests," are json objects that connect various arweave data items and define relational paths for easy navigation. a common use case for manifests is permanently hosting websites on arweave by linking all necessary files together. an ar.io gateway can then resolve the manifest into a fully functional website.\n\n\n# sample manifest\n\n{\n "manifest": "arweave/paths",\n "version": "0.2.0",\n "index": {\n "path": "index.html"\n },\n "fallback": {\n "id": "ixo3lsfvkvtxukbzfz4d7bkcap6kilnt2xvufspiqvq"\n },\n "paths": {\n "index.html": {\n "id": "cg7hdi_itqpoeygqjfqj8nmpn4koz-vh_j7pg4ip7ni"\n },\n "404.html": {\n "id": "ixo3lsfvkvtxukbzfz4d7bkcap6kilnt2xvufspiqvq"\n },\n "js/style.css": {\n "id": "3zfsd7bkcautxukbq4xipiqvplvkfz6kilnt2xvsfov"\n },\n "css/style.css": {\n "id": "spiqvpauxlvk3zf6ixsfo7bkcvqkilnt24dvtxukbfz"\n },\n "css/mobile.css": {\n "id": "fz4d7bkcauixsfo3zfspiqvplvkvtxukb6kilnt2xvq"\n },\n "assets/img/logo.png": {\n "id": "or0_fryfcqywh-qsozygi5zoamw_fusyu2w8_x1rkyz"\n },\n "assets/img/icon.png": {\n "id": "0543smrgyugktaqlzmpoyk4axab96fra2guhzyxjrgo"\n }\n }\n}\n\n\n\n# how it works\n\na resolver, typically an ar.io gateway, resolves urls requesting content based on a manifest transaction id to the corresponding path key in the paths object. the url schema for this type of request is https:////.\n\n\n# example usage\n\nassume the manifest above is uploaded to arweave with the transaction id uyc5p5qkpzaltmmmzawdakhldxsbf6qmyrbwyfchrtk. the below table shows https requests to the ar.io gateway arweave.dev requesting various endpoints on the manifest transaction id, the manifest path where the gateway will find the data to return, and the resulting arweave txid.\n\nrequest path manifest path data served from txid\nhttps://arweave.dev/uyc5p5qkpzaltmmmzawdakhldxsbf6qmyrbwyfchrtk index cg7hdi_itqpoeygqjfqj8nmpn4koz-vh_j7pg4ip7ni\nhttps://arweave.dev/uyc5p5qkpzaltmmmzawdakhldxsbf6qmyrbwyfchrtk/index.html index.html cg7hdi_itqpoeygqjfqj8nmpn4koz-vh_j7pg4ip7ni\nhttps://arweave.dev/uyc5p5qkpzaltmmmzawdakhldxsbf6qmyrbwyfchrtk/js/style.css js/style.css 3zfsd7bkcautxukbq4xipiqvplvkfz6kilnt2xvsfov\nhttps://arweave.dev/uyc5p5qkpzaltmmmzawdakhldxsbf6qmyrbwyfchrtk/foobar fallback ixo3lsfvkvtxukbzfz4d7bkcap6kilnt2xvufspiqvq\n\n\n# specifications\n\n\n# transaction tags\n\nmanifest are uploaded to arweave in the same manner as any other data item. a specific content type tag must be added while uploading so that resolvers like the ar.io gateways can recognize a manifest and properly resolve the paths. tags must be attached to the manifest at the time of upload. they cannot be added later without uploading a new manifest, and they must be attached to the upload transaction, not placed inside the json object.\n\nfailure to provide this tag will result in resolvers not recognizing the manifest, so they will only return the raw json instead of the linked data items.\n\n# content-type\n\n{ "name": "content-type", "value": "application/x.arweave-manifest+json" }\n\n\n\n# transaction data\n\nbeing a json object, there are several attributes that make up the structure of a manifest. the json object must be fully defined and uploaded to arweave as a data item.\n\n# manifest\n\n"manifest": "arweave/paths"\n\n\nthe manifest attribute serves as an additional validation layer. it must have the value arweave/paths in order for a gateway to resolve the manifest.\n\n# version\n\n"version": "0.2.0"\n\n\nthe version attribute defines the version of manifest schema a manifest is using.\n\n# index\n\n"index": {\n "id": "cg7hdi_itqpoeygqjfqj8nmpn4koz-vh_j7pg4ip7ni"\n }\n\n\nor\n\n"index": {\n "path": "index.html",\n }\n\n\nthe index attribute is an object that defines the base, or \'starting\' data item. it is similar to the / endpoint on a website. when resolving the manifest with no additional path definition, this is the data item that will be returned.\n\nindex accepts either path or id as sub attributes. path represents the key of a defined path in the manifest, while id represents a specific arweave data item transaction id.\n\nif both path and id are defined in index, id will override path.\n\n# fallback\n\n"fallback": {\n "id": "ixo3lsfvkvtxukbzfz4d7bkcap6kilnt2xvufspiqvq"\n }\n\n\nthe fallback attribute is an object that defines an arweave data item transaction id for the resolver to fall back to if it fails to correctly resolve a requested path. for example, it can act as a 404 page if a user requests manifest/non-existent-page\n\nfallback accepts id as a sub attribute, representing an arweave data item transaction id.\n\n# paths\n\n"paths": {\n "index.html": {\n "id": "cg7hdi_itqpoeygqjfqj8nmpn4koz-vh_j7pg4ip7ni"\n },\n "404.html": {\n "id": "ixo3lsfvkvtxukbzfz4d7bkcap6kilnt2xvufspiqvq"\n },\n "js/style.css": {\n "id": "3zfsd7bkcautxukbq4xipiqvplvkfz6kilnt2xvsfov"\n },\n "css/style.css": {\n "id": "spiqvpauxlvk3zf6ixsfo7bkcvqkilnt24dvtxukbfz"\n },\n "css/mobile.css": {\n "id": "fz4d7bkcauixsfo3zfspiqvplvkvtxukb6kilnt2xvq"\n },\n "assets/img/logo.png": {\n "id": "or0_fryfcqywh-qsozygi5zoamw_fusyu2w8_x1rkyz"\n },\n "assets/img/icon.png": {\n "id": "0543smrgyugktaqlzmpoyk4axab96fra2guhzyxjrgo"\n }\n }\n\n\nthe paths attribute is an object that defines the url paths that a manifest can resolve to. if a user navigates to manifest/index.html the resolver will look for index.html as a key in the paths object and return the corresponding id. (cg7hdi_itqpoeygqjfqj8nmpn4koz-vh_j7pg4ip7ni)',charsets:{}},{title:"Wayfinder Protocol",frontmatter:{permalink:"/wayfinder",prev:!1},regularPath:"/concepts/wayfinder.html",relativePath:"concepts/wayfinder.md",key:"v-d6cbe5b8",path:"/wayfinder/",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:25},{level:2,title:"Browser Integration",slug:"browser-integration",normalizedTitle:"browser integration",charIndex:613},{level:2,title:"Internal Application Integration",slug:"internal-application-integration",normalizedTitle:"internal application integration",charIndex:1081},{level:2,title:"Benefits of Wayfinder Over Hardcoded Gateway Links",slug:"benefits-of-wayfinder-over-hardcoded-gateway-links",normalizedTitle:"benefits of wayfinder over hardcoded gateway links",charIndex:2032},{level:2,title:"Use Cases",slug:"use-cases",normalizedTitle:"use cases",charIndex:2851},{level:3,title:"Decentralized Web Hosting with Flexible Access",slug:"decentralized-web-hosting-with-flexible-access",normalizedTitle:"decentralized web hosting with flexible access",charIndex:2865},{level:3,title:"Digital Archives and Preservation with Enhanced Sharing",slug:"digital-archives-and-preservation-with-enhanced-sharing",normalizedTitle:"digital archives and preservation with enhanced sharing",charIndex:3247},{level:3,title:"Media Sharing Platforms with Consistent Content Delivery",slug:"media-sharing-platforms-with-consistent-content-delivery",normalizedTitle:"media sharing platforms with consistent content delivery",charIndex:3693},{level:3,title:"Decentralized Applications (DApps) with Reliable Front-End Accessibility",slug:"decentralized-applications-dapps-with-reliable-front-end-accessibility",normalizedTitle:"decentralized applications (dapps) with reliable front-end accessibility",charIndex:4092},{level:2,title:"How it Works",slug:"how-it-works",normalizedTitle:"how it works",charIndex:4496},{level:3,title:"Transaction ID",slug:"transaction-id",normalizedTitle:"transaction id",charIndex:1168},{level:3,title:"ArNS",slug:"arns",normalizedTitle:"arns",charIndex:4836},{level:2,title:"Wayfinder App",slug:"wayfinder-app",normalizedTitle:"wayfinder app",charIndex:5200},{level:3,title:"v0.0.10",slug:"v0-0-10",normalizedTitle:"v0.0.10",charIndex:5318},{level:3,title:"Key Features",slug:"key-features",normalizedTitle:"key features",charIndex:6615},{level:3,title:"Use Cases",slug:"use-cases-2",normalizedTitle:"use cases",charIndex:2851}],headersStr:"Overview Browser Integration Internal Application Integration Benefits of Wayfinder Over Hardcoded Gateway Links Use Cases Decentralized Web Hosting with Flexible Access Digital Archives and Preservation with Enhanced Sharing Media Sharing Platforms with Consistent Content Delivery Decentralized Applications (DApps) with Reliable Front-End Accessibility How it Works Transaction ID ArNS Wayfinder App v0.0.10 Key Features Use Cases",content:"# Wayfinder Protocol\n\n\n# Overview\n\nThe Wayfinder protocol is a URI scheme designed to translate requests for Arweave content into https:// requests. Essentially, Wayfinder allows for transforming traditional Arweave URLs like https://arweave.net/long-txid into more concise and user-friendly forms such as ar://txid or ar://arns-name. When combined with the AR.IO WayFinder browser extension, the request can be directed to any number of functional AR.IO Gateways to serve the content.\n\nAn early technical breakdown of Wayfinder, formerly \"ARCSS\", created by Arweave community member DMac, can be found here.\n\n\n# Browser Integration\n\nThe Wayfinder Protocol is currently facilitated via the WayFinder App or internal application integration. The intention is to lead popular web browsers like Chrome and Brave towards a direct integration of the Wayfinder Protocol, similar to recent integrations of the ipfs:// protocol. Such integration would remove the need for a client-side extension and boost developers' confidence in embedding Wayfinder Protocol URLs in their websites.\n\n\n# Internal Application Integration\n\nCertain websites or apps may want to resolve Arweave Transaction ID's (TxId) internally. In these scenarios, they can process the Wayfinder Protocol internally without depending on browser support or the WayFinder App. A prime example is opensea.io. Opensea, an NFT marketplace, frequently imports NFT metadata from external sources. If metadata employs the Wayfinder Protocol, Opensea internally resolves these, presenting content without redirecting users through an https:// link.\n\nThere are two main approaches to resolving Wayfinder Protocol URLs:\n\n 1. Convert Wayfinder into a request directed at a predefined Arweave gateway.\n 2. Retrieve a list of active AR.IO Gateways from the GAR by reading the contract state, or other available resources, and then fetch content from a gateway on the list.\n\nEach strategy has its benefits and challenges, necessitating careful evaluation based on specific use cases.\n\n\n# Benefits of Wayfinder Over Hardcoded Gateway Links\n\nUsing the Wayfinder Protocol offers several advantages over hardcoded links to a specific gateway:\n\n 1. Flexibility: Wayfinder links can be routed through any available AR.IO Gateway, ensuring content remains accessible even if a specific gateway is down or congested.\n 2. Decentralization: By not being tied to a single gateway, the Wayfinder Protocol embodies the decentralized spirit of the web, reducing potential censorship points.\n 3. Ease of Maintenance: Developers and content creators don't need to modify links if a gateway changes its URL or becomes unavailable. The WayFinder extension handles routing to an active gateway.\n 4. Consistency: Users always receive the same content, regardless of the gateway used, ensuring a consistent user experience.\n\n\n# Use Cases\n\n\n# Decentralized Web Hosting with Flexible Access\n\nWith Wayfinder, not only can websites be hosted on the Arweave network, but their accessibility is also enhanced. By using the Wayfinder Protocol, web developers can ensure that if a specific AR.IO Gateway is down, the content can still be accessed through another gateway, offering a more reliable and resilient user experience.\n\n\n# Digital Archives and Preservation with Enhanced Sharing\n\nDigitally archiving public domain works, especially in light of events like \"banned books week\", becomes more efficient with Wayfinder. Historical institutions or enthusiasts can easily share specific Wayfinder links to documents or media. Unlike hardcoded links which might break if a specific gateway goes offline, Wayfinder ensures that the content remains consistently accessible.\n\n\n# Media Sharing Platforms with Consistent Content Delivery\n\nFor platforms hosting user-generated content, the Wayfinder Protocol provides not just decentralized hosting but also a guarantee of content delivery. Even if a content piece becomes viral and one gateway gets congested, Wayfinder ensures that users can still access the content through another gateway, providing a seamless experience.\n\n\n# Decentralized Applications (DApps) with Reliable Front-End Accessibility\n\nDApps, while benefiting from Arweave's permanent hosting, can further ensure their front-end remains consistently accessible to users by using Wayfinder. If a DApp's front-end is accessed frequently, causing strain on one gateway, Wayfinder can help ensure the load is distributed, and the DApp remains online and functional.\n\n\n# How it Works\n\n\n# Transaction ID\n\nTo access content tied to an Arweave Transaction ID (TxId), simply append the TxId to ar://:\n\nar://qI19W6spw-kzOGl4qUMNp2gwFH2EBfDXOFsjkcNyK9A\n\n\nInputting this into a WayFinder-equipped browser will route your request through the right AR.IO Gateway, translating it as per your Routing Method settings.\n\n\n# ArNS\n\nFetching content via an Arweave Name System (ArNS) name is straightforward. Attach the ArNS name to ar://:\n\nar://good-morning\n\n\nThe Wayfinder protocol, along with the WayFinder App, discerns between TxIds and ArNS names. Once the suitable https:// request is formulated, the chosen gateway translates the ArNS name based on the ArNS aoComputer contract.\n\n\n# Wayfinder App\n\nThe AR.IO WayFinder App is a browser extension designed to facilitate the resolving of ar:// urls.\n\n\n# v0.0.10\n\nAs of v0.0.10, Wayfinder supports the resolution of TXT records to Arweave content on top level domains. This innovative feature leverages DNS TXT records to associate Arweave transaction IDs with human-readable domain names, facilitating intuitive and memorable access to permaweb content. By simply entering an ar:// URL with a domain name, the Wayfinder App resolves the corresponding Arweave transaction ID through DNS TXT records, redirecting users directly to the content hosted on the Arweave network.\n\nSetup: Owners of a domain can set a TXT record for that domain following the format ARTX .\n\nWayfinder Redirection: With a TXT record set properly, whenever a user (who has Wayfinder installed) enters an ar:// URL containing a domain name (e.g., ar://example.com), the Wayfinder App performs a DNS lookup for that TXT record in order to redirect to the Arweave content. The lookup is completed through a secure DNS-over-HTTPS query to ensure privacy and integrity.\n\nDynamic Content Resolution: After retrieving the TXT record, the Wayfinder App extracts that Arweave transaction ID and dynamically redirects the user to the content on the permaweb. This process is transparent to the user, providing a seamless experience as if accessing a traditional website.\n\n\n# Key Features\n\n * Gasless: TXT records can be set without any onchain transactions that would require gas fees.\n * Easy Integration: Domain owners can easily link their permaweb content to their domains, making it accessible through a simple ar:// URL.\n * Dyncamic Content Access: Content links can be updated in real-time through DNS TXT records, without requiring any changes to the ar:// URL itself.\n * Enhanced User Experience: Offers users a familiar and easy-to-remember way to access permaweb content, leveraging standard web domain names.\n * Security and Privacy: Secure DNS-over-HTTPS queries for DNS lookups protect user privacy and enhances security.\n\n\n# Use Cases\n\n * Branded Content Access: Companies and individuals can brand their permaweb content, making it accessible through their domain, enhancing brand visibility and user trust.\n * Dynamic Content Updates: Domain owners can easily update what Permaweb content their AR:// URL resolves to, which is ideal for frequently updated resources like documents, blogs, and application interfaces.\n * Educational and Informational Resources: Educational institutions and information providers can make their resources permanently available on the permaweb, accessible through simple, memorable URLs.\n\nThis feature marks a significant advancement in making decentralized content more accessible and user-friendly, bridging the gap between traditional internet usability and the permaweb’s permanence and censorship-resistant nature.",normalizedContent:"# wayfinder protocol\n\n\n# overview\n\nthe wayfinder protocol is a uri scheme designed to translate requests for arweave content into https:// requests. essentially, wayfinder allows for transforming traditional arweave urls like https://arweave.net/long-txid into more concise and user-friendly forms such as ar://txid or ar://arns-name. when combined with the ar.io wayfinder browser extension, the request can be directed to any number of functional ar.io gateways to serve the content.\n\nan early technical breakdown of wayfinder, formerly \"arcss\", created by arweave community member dmac, can be found here.\n\n\n# browser integration\n\nthe wayfinder protocol is currently facilitated via the wayfinder app or internal application integration. the intention is to lead popular web browsers like chrome and brave towards a direct integration of the wayfinder protocol, similar to recent integrations of the ipfs:// protocol. such integration would remove the need for a client-side extension and boost developers' confidence in embedding wayfinder protocol urls in their websites.\n\n\n# internal application integration\n\ncertain websites or apps may want to resolve arweave transaction id's (txid) internally. in these scenarios, they can process the wayfinder protocol internally without depending on browser support or the wayfinder app. a prime example is opensea.io. opensea, an nft marketplace, frequently imports nft metadata from external sources. if metadata employs the wayfinder protocol, opensea internally resolves these, presenting content without redirecting users through an https:// link.\n\nthere are two main approaches to resolving wayfinder protocol urls:\n\n 1. convert wayfinder into a request directed at a predefined arweave gateway.\n 2. retrieve a list of active ar.io gateways from the gar by reading the contract state, or other available resources, and then fetch content from a gateway on the list.\n\neach strategy has its benefits and challenges, necessitating careful evaluation based on specific use cases.\n\n\n# benefits of wayfinder over hardcoded gateway links\n\nusing the wayfinder protocol offers several advantages over hardcoded links to a specific gateway:\n\n 1. flexibility: wayfinder links can be routed through any available ar.io gateway, ensuring content remains accessible even if a specific gateway is down or congested.\n 2. decentralization: by not being tied to a single gateway, the wayfinder protocol embodies the decentralized spirit of the web, reducing potential censorship points.\n 3. ease of maintenance: developers and content creators don't need to modify links if a gateway changes its url or becomes unavailable. the wayfinder extension handles routing to an active gateway.\n 4. consistency: users always receive the same content, regardless of the gateway used, ensuring a consistent user experience.\n\n\n# use cases\n\n\n# decentralized web hosting with flexible access\n\nwith wayfinder, not only can websites be hosted on the arweave network, but their accessibility is also enhanced. by using the wayfinder protocol, web developers can ensure that if a specific ar.io gateway is down, the content can still be accessed through another gateway, offering a more reliable and resilient user experience.\n\n\n# digital archives and preservation with enhanced sharing\n\ndigitally archiving public domain works, especially in light of events like \"banned books week\", becomes more efficient with wayfinder. historical institutions or enthusiasts can easily share specific wayfinder links to documents or media. unlike hardcoded links which might break if a specific gateway goes offline, wayfinder ensures that the content remains consistently accessible.\n\n\n# media sharing platforms with consistent content delivery\n\nfor platforms hosting user-generated content, the wayfinder protocol provides not just decentralized hosting but also a guarantee of content delivery. even if a content piece becomes viral and one gateway gets congested, wayfinder ensures that users can still access the content through another gateway, providing a seamless experience.\n\n\n# decentralized applications (dapps) with reliable front-end accessibility\n\ndapps, while benefiting from arweave's permanent hosting, can further ensure their front-end remains consistently accessible to users by using wayfinder. if a dapp's front-end is accessed frequently, causing strain on one gateway, wayfinder can help ensure the load is distributed, and the dapp remains online and functional.\n\n\n# how it works\n\n\n# transaction id\n\nto access content tied to an arweave transaction id (txid), simply append the txid to ar://:\n\nar://qi19w6spw-kzogl4qumnp2gwfh2ebfdxofsjkcnyk9a\n\n\ninputting this into a wayfinder-equipped browser will route your request through the right ar.io gateway, translating it as per your routing method settings.\n\n\n# arns\n\nfetching content via an arweave name system (arns) name is straightforward. attach the arns name to ar://:\n\nar://good-morning\n\n\nthe wayfinder protocol, along with the wayfinder app, discerns between txids and arns names. once the suitable https:// request is formulated, the chosen gateway translates the arns name based on the arns aocomputer contract.\n\n\n# wayfinder app\n\nthe ar.io wayfinder app is a browser extension designed to facilitate the resolving of ar:// urls.\n\n\n# v0.0.10\n\nas of v0.0.10, wayfinder supports the resolution of txt records to arweave content on top level domains. this innovative feature leverages dns txt records to associate arweave transaction ids with human-readable domain names, facilitating intuitive and memorable access to permaweb content. by simply entering an ar:// url with a domain name, the wayfinder app resolves the corresponding arweave transaction id through dns txt records, redirecting users directly to the content hosted on the arweave network.\n\nsetup: owners of a domain can set a txt record for that domain following the format artx .\n\nwayfinder redirection: with a txt record set properly, whenever a user (who has wayfinder installed) enters an ar:// url containing a domain name (e.g., ar://example.com), the wayfinder app performs a dns lookup for that txt record in order to redirect to the arweave content. the lookup is completed through a secure dns-over-https query to ensure privacy and integrity.\n\ndynamic content resolution: after retrieving the txt record, the wayfinder app extracts that arweave transaction id and dynamically redirects the user to the content on the permaweb. this process is transparent to the user, providing a seamless experience as if accessing a traditional website.\n\n\n# key features\n\n * gasless: txt records can be set without any onchain transactions that would require gas fees.\n * easy integration: domain owners can easily link their permaweb content to their domains, making it accessible through a simple ar:// url.\n * dyncamic content access: content links can be updated in real-time through dns txt records, without requiring any changes to the ar:// url itself.\n * enhanced user experience: offers users a familiar and easy-to-remember way to access permaweb content, leveraging standard web domain names.\n * security and privacy: secure dns-over-https queries for dns lookups protect user privacy and enhances security.\n\n\n# use cases\n\n * branded content access: companies and individuals can brand their permaweb content, making it accessible through their domain, enhancing brand visibility and user trust.\n * dynamic content updates: domain owners can easily update what permaweb content their ar:// url resolves to, which is ideal for frequently updated resources like documents, blogs, and application interfaces.\n * educational and informational resources: educational institutions and information providers can make their resources permanently available on the permaweb, accessible through simple, memorable urls.\n\nthis feature marks a significant advancement in making decentralized content more accessible and user-friendly, bridging the gap between traditional internet usability and the permaweb’s permanence and censorship-resistant nature.",charsets:{}},{title:"Browser Sandboxing",frontmatter:{next:!1},regularPath:"/concepts/sandboxing.html",relativePath:"concepts/sandboxing.md",key:"v-0a39d43a",path:"/concepts/sandboxing.html",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:25},{level:2,title:"TLS and its Role in Browser Sandboxing",slug:"tls-and-its-role-in-browser-sandboxing",normalizedTitle:"tls and its role in browser sandboxing",charIndex:1362},{level:2,title:"Deriving Sandbox Value",slug:"deriving-sandbox-value",normalizedTitle:"deriving sandbox value",charIndex:3477}],headersStr:"Overview TLS and its Role in Browser Sandboxing Deriving Sandbox Value",content:"# Browser Sandboxing\n\n\n# Overview\n\nBrowser sandboxing allows data requests to a gateway node to benefit from the security advantages of using a browser's same-origin policy by redirecting the requests to a pseudo-unique subdomain of the gateway's apex domain. For example, an attempt to access https://arweave.net/gnWKBqFXMJrrksEWrXLQRUQQQeFhv4uVxesHBcT8i6o would redirect to https://qj2yubvbk4yjv24syelk24wqivcbaqpbmg7yxfof5mdqlrh4rova.arweave.net/gnWKBqFXMJrrksEWrXLQRUQQQeFhv4uVxesHBcT8i6o\n\nTwo DNS records are required to link a domain to an Arweave transaction on a gateway node. For example, www.mycustomsite.com would need the following records to link it to www.arweave-gateway.net:\n\n * A DNS CNAME record pointing to an Arweave gateway: www CNAME arweave-gateway.net,\n * A DNS TXT record linking the domain with a specific transaction ID: arweavetx TXT kTv4OkVtmc0NAsqIcnHfudKjykJeQ83qXXrxf8hrh0S\n\nWhen a browser requests www.mycustomsite.com the user's machine will (through the usual DNS processes) resolve this to the IP address for the gateway node arweave-gateway.net. When the gateway receives an HTTP request with a non-default hostname, e.g. www.mycustomsite.com instead of www.arweave-gateway.net, the gateway will query the DNS records for www.mycustomsite.com and the 'arweavetx' TXT record will tell the node which transaction to serve.\n\n\n# TLS and its Role in Browser Sandboxing\n\nTransport Layer Security (TLS) is a cryptographic protocol designed to provide communications security over a computer network. In the context of Arweave applications and browser sandboxing, TLS plays a critical role in ensuring secure data transmission and enabling the effective use of browser security features.\n\nWhen Arweave applications are accessed without TLS, most browsers restrict the use of native cryptographic functions. These functions, which include hashing, signing, and verification, are essential for the secure operation of Arweave permaweb apps. Without TLS, not only are these functions unavailable, but the applications also become susceptible to various security threats, notably man-in-the-middle (MITM) attacks. Although Arweave transactions are signed, making direct MITM attacks challenging, the absence of encryption can expose other vulnerabilities. For instance, attackers could intercept and alter the /price endpoint, potentially causing transaction failures or leading to overcharging.\n\nTo address these concerns, gateway operators are responsible for generating and maintaining TLS certificates for their gateways. This can be achieved through various systems, such as ACME for Let's Encrypt. An important step in setting up a gateway is obtaining a wildcard TLS certificate for the gateway's domain. This certificate secures traffic on both the apex domain and its single-level subdomains (e.g., gateway.com and subdomain.gateway.com).\n\nThe integration of TLS is crucial for the implementation of browser sandboxing. When a browser requests a transaction from a gateway, the gateway issues a 301 redirect to a subdomain of the gateway, using a Base32 pseudo-unique address derived from the transaction ID. This redirection, secured by TLS, invokes the browser's same-origin policy. As a result, the requested web page is confined within a secure sandbox environment, isolated from other domains. This isolation is vital for maintaining the integrity and security of transactions and interactions within Arweave's permaweb applications.\n\n\n# Deriving Sandbox Value\n\nar.io nodes generate browser sandbox values deterministically. Because of this, it is possible to calculate ahead of time what that value will be for a particular transaction id.\n\nSandbox values are a Base32 encoding of the transaction ID. ar.io gateways use the following code snippet to accomplish the encoding:\n\nconst expectedTxSandbox = (id: string): string => {\n return toB32(fromB64Url(id));\n};\n\n\nExample:\n\nconst id = 'gnWKBqFXMJrrksEWrXLQRUQQQeFhv4uVxesHBcT8i6o';\nconst expectedTxSandbox = (id): string => {\n return toB32(fromB64Url(id));\n};\nconsole.log(expectedTxSandbox);\n\n\nExample Output:\n\nqj2yubvbk4yjv24syelk24wqivcbaqpbmg7yxfof5mdqlrh4rova\n\n\nView the full code for generating browser sandbox values here.",normalizedContent:"# browser sandboxing\n\n\n# overview\n\nbrowser sandboxing allows data requests to a gateway node to benefit from the security advantages of using a browser's same-origin policy by redirecting the requests to a pseudo-unique subdomain of the gateway's apex domain. for example, an attempt to access https://arweave.net/gnwkbqfxmjrrksewrxlqruqqqefhv4uvxeshbct8i6o would redirect to https://qj2yubvbk4yjv24syelk24wqivcbaqpbmg7yxfof5mdqlrh4rova.arweave.net/gnwkbqfxmjrrksewrxlqruqqqefhv4uvxeshbct8i6o\n\ntwo dns records are required to link a domain to an arweave transaction on a gateway node. for example, www.mycustomsite.com would need the following records to link it to www.arweave-gateway.net:\n\n * a dns cname record pointing to an arweave gateway: www cname arweave-gateway.net,\n * a dns txt record linking the domain with a specific transaction id: arweavetx txt ktv4okvtmc0nasqicnhfudkjykjeq83qxxrxf8hrh0s\n\nwhen a browser requests www.mycustomsite.com the user's machine will (through the usual dns processes) resolve this to the ip address for the gateway node arweave-gateway.net. when the gateway receives an http request with a non-default hostname, e.g. www.mycustomsite.com instead of www.arweave-gateway.net, the gateway will query the dns records for www.mycustomsite.com and the 'arweavetx' txt record will tell the node which transaction to serve.\n\n\n# tls and its role in browser sandboxing\n\ntransport layer security (tls) is a cryptographic protocol designed to provide communications security over a computer network. in the context of arweave applications and browser sandboxing, tls plays a critical role in ensuring secure data transmission and enabling the effective use of browser security features.\n\nwhen arweave applications are accessed without tls, most browsers restrict the use of native cryptographic functions. these functions, which include hashing, signing, and verification, are essential for the secure operation of arweave permaweb apps. without tls, not only are these functions unavailable, but the applications also become susceptible to various security threats, notably man-in-the-middle (mitm) attacks. although arweave transactions are signed, making direct mitm attacks challenging, the absence of encryption can expose other vulnerabilities. for instance, attackers could intercept and alter the /price endpoint, potentially causing transaction failures or leading to overcharging.\n\nto address these concerns, gateway operators are responsible for generating and maintaining tls certificates for their gateways. this can be achieved through various systems, such as acme for let's encrypt. an important step in setting up a gateway is obtaining a wildcard tls certificate for the gateway's domain. this certificate secures traffic on both the apex domain and its single-level subdomains (e.g., gateway.com and subdomain.gateway.com).\n\nthe integration of tls is crucial for the implementation of browser sandboxing. when a browser requests a transaction from a gateway, the gateway issues a 301 redirect to a subdomain of the gateway, using a base32 pseudo-unique address derived from the transaction id. this redirection, secured by tls, invokes the browser's same-origin policy. as a result, the requested web page is confined within a secure sandbox environment, isolated from other domains. this isolation is vital for maintaining the integrity and security of transactions and interactions within arweave's permaweb applications.\n\n\n# deriving sandbox value\n\nar.io nodes generate browser sandbox values deterministically. because of this, it is possible to calculate ahead of time what that value will be for a particular transaction id.\n\nsandbox values are a base32 encoding of the transaction id. ar.io gateways use the following code snippet to accomplish the encoding:\n\nconst expectedtxsandbox = (id: string): string => {\n return tob32(fromb64url(id));\n};\n\n\nexample:\n\nconst id = 'gnwkbqfxmjrrksewrxlqruqqqefhv4uvxeshbct8i6o';\nconst expectedtxsandbox = (id): string => {\n return tob32(fromb64url(id));\n};\nconsole.log(expectedtxsandbox);\n\n\nexample output:\n\nqj2yubvbk4yjv24syelk24wqivcbaqpbmg7yxfof5mdqlrh4rova\n\n\nview the full code for generating browser sandbox values here.",charsets:{}},{title:"AO ANT",frontmatter:{permalink:"/guides/experimental/ao-ant",next:!1},regularPath:"/experimental/ao-ant.html",relativePath:"experimental/ao-ant.md",key:"v-4c2c563a",path:"/guides/experimental/ao-ant/",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:13},{level:2,title:"Installation",slug:"installation",normalizedTitle:"installation",charIndex:256},{level:2,title:"Usage",slug:"usage",normalizedTitle:"usage",charIndex:882},{level:3,title:"Set Controller",slug:"set-controller",normalizedTitle:"set controller",charIndex:1109},{level:3,title:"Initiate Record Sync and Update",slug:"initiate-record-sync-and-update",normalizedTitle:"initiate record sync and update",charIndex:1363}],headersStr:"Overview Installation Usage Set Controller Initiate Record Sync and Update",content:'# AO ANT\n\n\n# Overview\n\nArweave Name Tokens, or ANTs, are the aoComputer contracts that control each ArNS name. You can easily set up an ao process to function as an ANT by loading the ant.lua file from the ao-pilot github repository into your process.\n\n\n# Installation\n\nThe ao ANT code is a single file within the ao-pilot Github repository from ar.io. The specific file is located here.\n\nYou can install the ao-pilot repo on your computer with\n\ngit clone https://github.com/ar-io/ao-pilot\n\nNavigating the file system inside of ao is not as straightforward as it is in a regular terminal, so opening ao directly in the same folder as the file you are going to load can make things significantly easier.\n\ncd ao-pilot/src\naos\n\n\nFrom here, simply load the arns-resolver file into your process.\n\n.load ant.lua\n\nIf things work successfully, your aos terminal will print "undefined".\n\n\n# Usage\n\nSimply loading the script into your process will set variables and handlers to make your process conform to the ant standard, but you will still need to send an initiate request to add your ANT into the ao registry.\n\n\n# Set Controller\n\nOnly authorized people can make updates to your ArNS name. Because of this, you will need to add your process ID as a \'controller\' under your ArNS name at arns.app. This will give your process permissions needed to make these updates\n\n\n# Initiate Record Sync and Update\n\nWhen you purchase an ArNS name on arns.app, that name is not automatically synced to the ao-ArNS registry. Anyone can initiate a sync, which loads the data of an ArNS name from the aoComputer contract into the ao-ArNS registry:\n\nSend({ Target = "TyduW6spZTr3gkdIsdktduJhgtilaR_ex5JukK8gI9o", Tags = { Action = "Initiate-Record-Sync", Name = "" }})\n\n\nBe sure to replace with the correct ArNS name.\n\nOnce your process is a controller, and you have loaded the ANT script, you can initiate an update to the ao-ArNS registry by running the following command:\n\nSend({ Target = ARNS_PROCESS_ID, Tags = { Action = "Initiate-Record-Update", Name = "", ProcessId = ao.id }})\n\n\nMake sure to change with the correct arns name.\n\nonce your process is a controller, and you have loaded the ant script, you can initiate an update to the ao-arns registry by running the following command:\n\nsend({ target = arns_process_id, tags = { action = "initiate-record-update", name = "", processid = ao.id }})\n\n\nmake sure to change \n\n\nReplace with a short, descriptive name for what you are changing. Do not reuse branches for future edits, you should always create a fresh branch based on the most up to date version of the main branch.\n\n\n# What is Markdown?\n\nMarkdown is a lightweight markup language that allows you to format plain text documents with simple syntax. It\'s commonly used for creating documentation, README files, and web content. Markdown files are easy to read, write, and convert into various formats, such as HTML.\n\nHere are some commonly used Markdown syntax elements:\n\n 1. Headings: Use hash symbols (#) to denote headings. The number of hashes determines the heading level (e.g., # Heading 1, ## Heading 2).\n\n 2. Emphasis: Surround text with asterisks (*) or underscores (_) for emphasis. For example, *italic\\*or_italic_renders as italic, and**bold**or**bold** renders as bold.\n\n 3. Lists: Create unordered lists by starting lines with hyphens (-), plus signs (+), or asterisks (*). Ordered lists use numbers (1., 2., etc.).\n\n 4. Links: Enclose the linked text in square brackets [] and the URL in parentheses (). For example, AR.IO creates a link to AR.IO\'s Public website.\n\n 5. Images: Similar to links, but with an exclamation mark (!) at the beginning. For example, ![Alt Text](image.jpg) embeds an image.\n\n 6. Code: Use backticks ( ` ) to denote inline code . For code blocks, indent each line with four spaces or use triple backticks (```) before and after the code block.\n\n 7. Horizontal Rule: To create a horizontal rule, use three or more hyphens (-), asterisks (*), or underscores (_).\n\nTo denote a Markdown file, save it with the .md extension (e.g., document.md).\n\nWhen used in a VuePress app, Markdown files are rendered into HTML by VuePress\'s built-in Markdown compiler, which supports most standard html tags as well. This includes the ability to assign css classes for additional styling.\n\n\n# Frontmatter\n\nVuepress supports injecting certain options into your markdown files. These options, collectively, are known as frontmatter. There are 5 items that you will primarily use for these docs. All of them may be omitted without issue, or included for additional customization. These are:\n\n 1. title: This sets the title for the page. It will be displayed on the left side of the browser tab when a user accesses that page. If omitted, the title will be pulled from the sidebar for that page.\n\n 2. permalink: Vuepress sets urls based on the filestructure of the project. This can be overridden using permalink, and a custom url can be assigned to a specific page.\n\n 3. prev: Sets the value for the “previous page” button that appears at the bottom of the page. If omitted, this will be pulled from the sidebar. The button can be removed from the page by setting the value to “false”.\n\n 4. next: Similar to prev, this sets the “next page” button value.\n\n 5. tags: accepts a list of key words that can be accessed by the “search” function, as well as helping with SEO.\n\nFrontmatter uses YAML syntax, sandwiched inside two lines of three dashes --- , like so:\n\n---\ntitle: Frontmatter Instructions\npermalink: "/frontmatter/"\nprev: "./what-is-markdown"\nnext: false\ntags: ["frontmatter", "permalink", "other tags"]\n---\n\n\n\n# CSS\n\nIf you add html elements into your markdown file, you can assign custom css classes to them. The easiest way to customize a class is to add it to the primary global css file located at /docsGenerator/docs/src/.vuepress/theme/styles/index.styl\n\nThe file is written in stylus, but supports standard css syntax.\n\nNOTE: It is a good idea to be overly specific with your class names, as the content of the index.styl file will affect the entire docs portal.\n\n\n# Adding to the Sidebar\n\nThe sidebar is rendered from a JavaScript array of objects. It is possible to configure multiple different sidebars, and have them display depending on the filepath a user is currently viewing. The docs portal only uses a single default sidebar at the moment. The configuration file for the sidebar is located at /docs/src/.vuepress/theme/configs/default_sidebar_config.js\n\nTo add a new item to the sidebar, simply choose where you want the item to appear, and insert an object with the following format:\n\n{\ntitle: "Text you want to display",\npath: "Filepath to new file"\n}\n\n\nThe sidebar, when rendered, will find all the H2 tags (##) in the file, and automatically display them as sub-headers in the sidebar, which work as links to that specific section of the page.\n\nYou can also make a sidebar item into an expandable menu by adding a children attribute, which will be an array of objects similar to the parent:\n\n{\ntitle: "Label",\nchildren: [\n {\n title: "First Subtext",\n path: "Filepath to file"\n },\n {\n title: "Second Subtext",\n path: "Filepath to second file"\n }\n ]\n}\n\n\nChildren can be nested for several layers if desired.\n\nBelow is the current sidebar configuration to serve as an example:\n\nmodule.exports = [\n {\n title: "Welcome",\n path: "/",\n },\n {\n title: "Network Overview",\n children: [\n {\n title: "Introduction",\n path: "/introduction",\n },\n {\n title: "Arweave and the Permaweb",\n path: "/arweave",\n },\n {\n title: "The IO Token",\n path: "/token.md",\n },\n {\n title: "Gateway Architecture",\n path: "/gateways/gateways",\n },\n {\n title: "Network Protocols",\n path: "/network-protocols"\n },\n {\n title: "Arweave name System (ArNS)",\n path: "/arns.md",\n },\n ],\n },\n {\n title: "Gateway Operators",\n children: [\n {\n title: "Getting Started",\n children: [\n {\n title: "Overview",\n path: "/gateways/ar-io-node/overview"\n },\n {\n title: "Setting up on Windows",\n path: "/gateways/ar-io-node/windows-setup",\n },\n {\n title: "Setting up on Linux",\n path: "/gateways/ar-io-node/linux-setup",\n },\n {\n title: "Join the Network",\n path: "/gateways/ar-io-node/testnet"\n },\n {\n title: "Upgrading",\n path: "/gateways/ar-io-node/upgrading"\n }\n\n ],\n },\n {\n title: "Advanced Configurations",\n path: "/gateways/ar-io-node/advanced-config"\n },\n {\n title: "AR.IO HTTP API",\n path: "/gateways/ar-io-node/api",\n },\n {\n title: "AR.IO Admin API",\n path: "/gateways/ar-io-node/admin/admin-api"\n }\n ],\n },\n {\n title: "Ecosystem and Community",\n children: [\n {\n title: "AR.IO Foundation",\n path: "/foundation",\n },\n {\n title: "AR.IO Labs",\n path: "/labs",\n },\n {\n title: "Community Resources",\n path: "/community-resources",\n },\n ],\n },\n {\n title: "Glossary",\n path: "/glossary",\n },\n];\n\n\n\n# Development and Deployment\n\n\n# Launching Development Server\n\nFrom inside the docsGenerator/docs directory in your terminal, you can launch a development server in order to preview your edits. This will automatically update as you are making edits, but if some changes do not immediately appear you can shut the server down and restart it for a hard refresh:\n\nyarn dev\n\n\nThe development server will, by default, launch at localhost:8080. The server can be shut down with ctrl+c or by killing the terminal used to start it.\n\nThe most common error when attempting to launch the development server comes from not having a compatible version of Nodejs. If you get an error, try switching to Node version 16.15.1\n\n\n# Building Static Files\n\nThe Vuepress docs portal is nested inside a static html website. For ease of deployment, Vuepress can build the docs portal into static html files and place them in the docs/ folder in the root of the website. This is not necessary for submitting a pr, but it may be useful for local testing. You can do this by navigating your terminal inside the docs portal Vuepress app docsGenerator/docs and running the command:\n\nyarn build\n\n\n\n# Creating Your Pull Request\n\nOnce you have all of your local changes committed and synced to your github account, you can create a Pull Request and have the team review the changes for integration into the public site.\n\n 1. Ensure that all of your changes are committed to your own repository. All commits should follow the Conventional Commits standards.\n\n 2. Navigate to your forked repository\'s page on GitHub.\n\n 3. Switch to the branch you created for your changes.\n\n 4. You should see a banner indicating that you recently pushed a new branch. Click on the "Compare & pull request" button on that banner.\n\n 5. Make sure the base repository is set to the original AR.IO repository and the base branch is set to "staging".\n\n 6. Provide a brief description of your changes in the pull request form. Ensure your title adheres to the Conventional Commits standards.\n\n 7. Review the changes and confirm they appear as expected.\n\n 8. Once you\'re ready, click on the "Create pull request" button. The AR.IO team will review the request and, if approved, merge your changes into the staging branch of the repository. The changes will later be merged into the main branch for production deployment.',normalizedContent:'# contributing to ar.io docs\n\n\n# overview\n\nthe ar.io docs serve as a primary source of information and guidance for users, developers, and contributors interacting with the ar.io platform. as such, maintaining its clarity, accuracy, and comprehensiveness is paramount. this document outlines the standardized procedures and best practices for contributing to these docs. by following this guide, contributors can ensure that their additions and modifications align with the established documentation structure and conventions.\n\ncontributions can range from minor typographical corrections to the addition of entire new sections. regardless of the scale, every contribution is valuable. proper setup, understanding the file structure, and familiarity with the submission process are essential components of effective contribution. the sections that follow delve into each stage of the contribution process, from initial setup and local development to the submission of changes for review.\n\nby adhering to this guide, contributors can streamline the review and integration of their changes, ensuring that the ar.io docs remain a reliable and up-to-date resource for all its users.\n\n\n# prerequisites\n\n * github account\n * git installed on your computer\n * nodejs version 16.15.1\n * yarn installed on your computer\n\n\n# initial setup\n\n\n# fork the repository\n\nwhile logged into your github account, visit the repository for the ar.io public site\n\nnear the top right of the page, there will be a button labeled "fork".\n\nclicking this will begin the process of making a copy of the public-site repo under your own account.\n\non the next screen, make sure the box labeled "copy the main branch only" is not checked, then click "create fork"\n\nthis process only needs to be completed once, you will not need to create a new fork each time you want to submit an edit.\n\n\n# clone your fork\n\nonce you have your fork created, you\'ll need to clone it onto your computer in order to make your edits.\n\nnavigate the the location you want to clone the repo and open a terminal (or command prompt/powershell on windows)\n\nrun the command:\n\ngit clone -b main https://github.com/yourusernamehere/public-site\n\n\nbe sure to replace "yourusernamehere" with your github username\n\n\n# link upstream\n\nthe ar.io public site, and especially the docs portal, is constantly evolving. you are going to want to be able to pull updates from the ar.io repo into your fork without having to delete it and create a new fork. to do this, you can link the original repo to your fork as "upstream".\n\nfrom inside the fork on your computer, run the command:\n\ngit remote add upstream https://github.com/ar-io/public-site\n\n\nyou can then check to make sure the upstream source was added with:\n\ngit remote -v\n\n\n# pull updates\n\nperiodically, you should check if there have been updates to the original repo by using"\n\ngit fetch upstream\n\n\nif changes show up, you can merge them into your own repo by ensuring you are on the "main" branch, and then running the merge command:\n\ngit checkout main\ngit merge upstream/main\n\n\n\n# install dependencies for docs portal\n\nthe ar.io public site is primarily a static html website. there are no dependencies that need to be installed in order to launch and view the site as a whole. however, the docs portal is a vuepress app nested inside that html website. in order to launch the docs portal for review, or to build it into static html, you are going to need to install its dependencies.\n\nfrom in the root directory of the public site, navigate into the docs portal and run the install command:\n\ncd docsgenerator/docs\nyarn install\n\n\nnote: this repository uses yarn to manage dependency versions, installing dependencies with npm instead of yarn can lead to errors.\n\n\n# editing\n\nvuepress generates content using markdown (.md) files. each markdown file can be displayed as its own content page. the location (url) of each page is generally determined by the file\'s location in the file-structure of the vuepress app, though this can be overridden by using frontmatter. adding a new content page can be as simple as dropping a new file in the appropriate location in the file-structure and adding a reference to it in the sidebar configuration file.\n\n\n# branches\n\nyou should always ensure that you are starting from an up to date version of the main branch. see pull updates for instructions.\n\nonce you are up to date and on the main branch, you should always create a new branch specific to the changes you are making. this can be done with the command:\n\ngit checkout -b \n\n\nreplace with a short, descriptive name for what you are changing. do not reuse branches for future edits, you should always create a fresh branch based on the most up to date version of the main branch.\n\n\n# what is markdown?\n\nmarkdown is a lightweight markup language that allows you to format plain text documents with simple syntax. it\'s commonly used for creating documentation, readme files, and web content. markdown files are easy to read, write, and convert into various formats, such as html.\n\nhere are some commonly used markdown syntax elements:\n\n 1. headings: use hash symbols (#) to denote headings. the number of hashes determines the heading level (e.g., # heading 1, ## heading 2).\n\n 2. emphasis: surround text with asterisks (*) or underscores (_) for emphasis. for example, *italic\\*or_italic_renders as italic, and**bold**or**bold** renders as bold.\n\n 3. lists: create unordered lists by starting lines with hyphens (-), plus signs (+), or asterisks (*). ordered lists use numbers (1., 2., etc.).\n\n 4. links: enclose the linked text in square brackets [] and the url in parentheses (). for example, ar.io creates a link to ar.io\'s public website.\n\n 5. images: similar to links, but with an exclamation mark (!) at the beginning. for example, ![alt text](image.jpg) embeds an image.\n\n 6. code: use backticks ( ` ) to denote inline code . for code blocks, indent each line with four spaces or use triple backticks (```) before and after the code block.\n\n 7. horizontal rule: to create a horizontal rule, use three or more hyphens (-), asterisks (*), or underscores (_).\n\nto denote a markdown file, save it with the .md extension (e.g., document.md).\n\nwhen used in a vuepress app, markdown files are rendered into html by vuepress\'s built-in markdown compiler, which supports most standard html tags as well. this includes the ability to assign css classes for additional styling.\n\n\n# frontmatter\n\nvuepress supports injecting certain options into your markdown files. these options, collectively, are known as frontmatter. there are 5 items that you will primarily use for these docs. all of them may be omitted without issue, or included for additional customization. these are:\n\n 1. title: this sets the title for the page. it will be displayed on the left side of the browser tab when a user accesses that page. if omitted, the title will be pulled from the sidebar for that page.\n\n 2. permalink: vuepress sets urls based on the filestructure of the project. this can be overridden using permalink, and a custom url can be assigned to a specific page.\n\n 3. prev: sets the value for the “previous page” button that appears at the bottom of the page. if omitted, this will be pulled from the sidebar. the button can be removed from the page by setting the value to “false”.\n\n 4. next: similar to prev, this sets the “next page” button value.\n\n 5. tags: accepts a list of key words that can be accessed by the “search” function, as well as helping with seo.\n\nfrontmatter uses yaml syntax, sandwiched inside two lines of three dashes --- , like so:\n\n---\ntitle: frontmatter instructions\npermalink: "/frontmatter/"\nprev: "./what-is-markdown"\nnext: false\ntags: ["frontmatter", "permalink", "other tags"]\n---\n\n\n\n# css\n\nif you add html elements into your markdown file, you can assign custom css classes to them. the easiest way to customize a class is to add it to the primary global css file located at /docsgenerator/docs/src/.vuepress/theme/styles/index.styl\n\nthe file is written in stylus, but supports standard css syntax.\n\nnote: it is a good idea to be overly specific with your class names, as the content of the index.styl file will affect the entire docs portal.\n\n\n# adding to the sidebar\n\nthe sidebar is rendered from a javascript array of objects. it is possible to configure multiple different sidebars, and have them display depending on the filepath a user is currently viewing. the docs portal only uses a single default sidebar at the moment. the configuration file for the sidebar is located at /docs/src/.vuepress/theme/configs/default_sidebar_config.js\n\nto add a new item to the sidebar, simply choose where you want the item to appear, and insert an object with the following format:\n\n{\ntitle: "text you want to display",\npath: "filepath to new file"\n}\n\n\nthe sidebar, when rendered, will find all the h2 tags (##) in the file, and automatically display them as sub-headers in the sidebar, which work as links to that specific section of the page.\n\nyou can also make a sidebar item into an expandable menu by adding a children attribute, which will be an array of objects similar to the parent:\n\n{\ntitle: "label",\nchildren: [\n {\n title: "first subtext",\n path: "filepath to file"\n },\n {\n title: "second subtext",\n path: "filepath to second file"\n }\n ]\n}\n\n\nchildren can be nested for several layers if desired.\n\nbelow is the current sidebar configuration to serve as an example:\n\nmodule.exports = [\n {\n title: "welcome",\n path: "/",\n },\n {\n title: "network overview",\n children: [\n {\n title: "introduction",\n path: "/introduction",\n },\n {\n title: "arweave and the permaweb",\n path: "/arweave",\n },\n {\n title: "the io token",\n path: "/token.md",\n },\n {\n title: "gateway architecture",\n path: "/gateways/gateways",\n },\n {\n title: "network protocols",\n path: "/network-protocols"\n },\n {\n title: "arweave name system (arns)",\n path: "/arns.md",\n },\n ],\n },\n {\n title: "gateway operators",\n children: [\n {\n title: "getting started",\n children: [\n {\n title: "overview",\n path: "/gateways/ar-io-node/overview"\n },\n {\n title: "setting up on windows",\n path: "/gateways/ar-io-node/windows-setup",\n },\n {\n title: "setting up on linux",\n path: "/gateways/ar-io-node/linux-setup",\n },\n {\n title: "join the network",\n path: "/gateways/ar-io-node/testnet"\n },\n {\n title: "upgrading",\n path: "/gateways/ar-io-node/upgrading"\n }\n\n ],\n },\n {\n title: "advanced configurations",\n path: "/gateways/ar-io-node/advanced-config"\n },\n {\n title: "ar.io http api",\n path: "/gateways/ar-io-node/api",\n },\n {\n title: "ar.io admin api",\n path: "/gateways/ar-io-node/admin/admin-api"\n }\n ],\n },\n {\n title: "ecosystem and community",\n children: [\n {\n title: "ar.io foundation",\n path: "/foundation",\n },\n {\n title: "ar.io labs",\n path: "/labs",\n },\n {\n title: "community resources",\n path: "/community-resources",\n },\n ],\n },\n {\n title: "glossary",\n path: "/glossary",\n },\n];\n\n\n\n# development and deployment\n\n\n# launching development server\n\nfrom inside the docsgenerator/docs directory in your terminal, you can launch a development server in order to preview your edits. this will automatically update as you are making edits, but if some changes do not immediately appear you can shut the server down and restart it for a hard refresh:\n\nyarn dev\n\n\nthe development server will, by default, launch at localhost:8080. the server can be shut down with ctrl+c or by killing the terminal used to start it.\n\nthe most common error when attempting to launch the development server comes from not having a compatible version of nodejs. if you get an error, try switching to node version 16.15.1\n\n\n# building static files\n\nthe vuepress docs portal is nested inside a static html website. for ease of deployment, vuepress can build the docs portal into static html files and place them in the docs/ folder in the root of the website. this is not necessary for submitting a pr, but it may be useful for local testing. you can do this by navigating your terminal inside the docs portal vuepress app docsgenerator/docs and running the command:\n\nyarn build\n\n\n\n# creating your pull request\n\nonce you have all of your local changes committed and synced to your github account, you can create a pull request and have the team review the changes for integration into the public site.\n\n 1. ensure that all of your changes are committed to your own repository. all commits should follow the conventional commits standards.\n\n 2. navigate to your forked repository\'s page on github.\n\n 3. switch to the branch you created for your changes.\n\n 4. you should see a banner indicating that you recently pushed a new branch. click on the "compare & pull request" button on that banner.\n\n 5. make sure the base repository is set to the original ar.io repository and the base branch is set to "staging".\n\n 6. provide a brief description of your changes in the pull request form. ensure your title adheres to the conventional commits standards.\n\n 7. review the changes and confirm they appear as expected.\n\n 8. once you\'re ready, click on the "create pull request" button. the ar.io team will review the request and, if approved, merge your changes into the staging branch of the repository. the changes will later be merged into the main branch for production deployment.',charsets:{}},{title:"AO ArNS Resolver",frontmatter:{permalink:"/guides/experimental/ao-resolver",prev:!1},regularPath:"/experimental/ao-resolver.html",relativePath:"experimental/ao-resolver.md",key:"v-db3ac7ec",path:"/guides/experimental/ao-resolver/",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:23},{level:2,title:"Installation",slug:"installation",normalizedTitle:"installation",charIndex:560},{level:3,title:"From Blueprint",slug:"from-blueprint",normalizedTitle:"from blueprint",charIndex:577},{level:3,title:"From Source",slug:"from-source",normalizedTitle:"from source",charIndex:696},{level:2,title:"Usage",slug:"usage",normalizedTitle:"usage",charIndex:1430},{level:3,title:"Resolve",slug:"resolve",normalizedTitle:"resolve",charIndex:10},{level:3,title:"Data",slug:"data",normalizedTitle:"data",charIndex:5785},{level:3,title:"Owner",slug:"owner",normalizedTitle:"owner",charIndex:6961},{level:3,title:"ID",slug:"id",normalizedTitle:"id",charIndex:7141},{level:3,title:"Clear",slug:"clear",normalizedTitle:"clear",charIndex:8098},{level:3,title:"Sync",slug:"sync",normalizedTitle:"sync",charIndex:5620}],headersStr:"Overview Installation From Blueprint From Source Usage Resolve Data Owner ID Clear Sync",content:'# AO ArNS Resolver\n\n\n# Overview\n\nAO is in the early stages of development, with its infrastructure evolving quickly. Among the developments is the ArNS-resolver, a set of rules and commands that facilitate the integration of ArNS names from the ArNS registry contract into your ao process. Currently, the interaction with the ArNS registry contract is unidirectional; ao can receive updates but cannot modify the contract. As this feature is experimental, it is expected to undergo significant changes, but users are welcome to test the current iteration.\n\n\n# Installation\n\n\n# From Blueprint\n\nFrom inside aos, simply type .load-blueprint arns to load the ArNS resolver into your aos process.\n\n\n# From Source\n\nTo get access to the latest development version, you can install directly from the source code.\n\nThe ArNS-resolver is a single file within the ao-pilot Github repository from ar.io. The specific file is located here.\n\nYou can install the ao-pilot repo on your computer with\n\ngit clone https://github.com/ar-io/ao-pilot\n\nNavigating the file system inside of ao is not as straightforward as it is in a regular terminal, so opening ao directly in the same folder as the file you are going to load can make things significantly easier.\n\ncd ao-pilot/src\naos\n\n\nFrom here, simply load the arns-resolver file into your process.\n\n.load arns-resolver.lua\n\nIf things work successfully, your aos terminal will print "undefined".\n\n\n# Usage\n\n\n# Resolve\n\nYou can resolve an ArNS name with the ARNS.resolve command.\n\nARNS.resolve(\'ardrive\')\n\n\nThis will fetch all of the data related to the ArNS name ardrive and store it locally in your NAMES table. You can print that data by typing\n\nNAMES[\'ardrive\']\n\n\nand use that variable in other commands that need to reference any of the data.\n\nThe resolve command will first check the ao-ArNS registry for any information on the name. If there is a contractTxId field present, it will then make a request to the ArNS smartweave contract, using the Orbit Oracle, in order to try and get more information about the contract state for the underlying ANT. Then, if there is a processId field, a request will be made to that process to try and get ao specific information. This loads information into your local process at each step. For example, The first bit of information coming from the ao-Arns registry will look like this:\n\n ardrive = {\n contractTxId = "bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM",\n lastUpdated = 1710951400626,\n record = {\n type = "lease",\n contractTxId = "bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM",\n undernames = 100,\n startTimestamp = 1694101828,\n endTimestamp = 1711122739,\n purchasePrice = 0\n }\n }\n\n\nAfter Orbit returns the information from the ArNS smartweave contract, that data will be added under a contract key:\n\nardrive = {\n contractTxId = "bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM",\n contract = {\n controller = "6Z-ifqgVi1jOwMvSNwKWs6ewUEQ0gU9eo4aHYC3rN1M",\n ticker = "ANT-ARDRIVE",\n name = "ArDrive.io",\n lastUpdated = 1711118753890,\n owner = "QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ",\n balances = {\n QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ = 1\n },\n records = {\n @ = {\n ttlSeconds = 3600,\n transactionId = "nOXJjj_vk0Dc1yCgdWD8kti_1iHruGzLQLNNBHVpN0Y"\n },\n cn = {\n ttlSeconds = 3300,\n transactionId = "_HquerT6pfGFXrVxRxQTkJ7PV5RciZCqvMjLtUY0C1k"\n },\n og = {\n ttlSeconds = 3600,\n transactionId = "YzD_Pm5VAfYpMD3zQCgMUcKKuleGhEH7axlrnrDCKBo"\n },\n logo = {\n ttlSeconds = 3600,\n transactionId = "KKmRbIfrc7wiLcG0zvY1etlO0NBx1926dSCksxCIN3A"\n },\n og_logo = {\n ttlSeconds = 3600,\n transactionId = "TB2wJyKrPnkAW79DAwlJYwpgdHKpijEJWQfcwX715Co"\n },\n dapp = {\n ttlSeconds = 3600,\n transactionId = "qrWdhy_PxrniBUlYn0macF-YbNgbmnmV5OVSrVRxxV8"\n },\n og_dapp = {\n ttlSeconds = 3600,\n transactionId = "5iR4wBu4KUV1pUz1YpYE1ARXSRHUT5G2ptMuoN2JDlI"\n }\n }\n },\n lastUpdated = 1711118166407,\n record = {\n type = "lease",\n contractTxId = "bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM",\n undernames = 100,\n startTimestamp = 1694101828,\n endTimestamp = 1711122739,\n purchasePrice = 0\n }\n }\n\n\nand an ArNS name with ao process information could look like this:\n\nblackjack = {\n contractTxId = "ydbc4JLjKeurnbTBp15vlZX1Zz9StgfpZ7prVZOGA3I",\n process = {\n denomination = "1",\n lastUpdated = 1711049563689,\n ticker = "ANT-BlackJack",\n name = "BlackJack",\n logo = "Sie_26dvgyok0PZD_-iQAFOhOd5YxDTkczOLoqTTL_A",\n owner = "cF0H0SKdnaDTqWKY9iJKBktTpdEWgb3GnlndE7ABv0Q",\n controllers = "["iKryOeZQMONi2965nKz528htMMN_sBcjlhc-VncoRjA","w4AORX9fhPbICNgbgTzq-uLyAsut4pKw_TJSFS-K3Tc","oEy0Wkxod2DAngJby28dhyiaD150SAJLqAfFNrbbEbY"]",\n records = {\n @ = {\n ttlSeconds = 3600,\n transactionId = "Lt3pyCXSdM9R2_lxhnqj3rzzhuLszT8s-p8vM1fpeJc"\n }\n }\n },\n lastUpdated = 1711049561377,\n processId = "Vo7O7WJ2OPlKBtudjfeOdzjcjpi_-V_RLE27VpZP8jA",\n record = {\n type = "lease",\n contractTxId = "ydbc4JLjKeurnbTBp15vlZX1Zz9StgfpZ7prVZOGA3I",\n undernames = 10,\n processId = "Vo7O7WJ2OPlKBtudjfeOdzjcjpi_-V_RLE27VpZP8jA",\n startTimestamp = 1710964910,\n endTimestamp = 1742500910,\n purchasePrice = 875\n }\n }\n\n\nNOTE: Syncing data from the ArNS smartweave contract relies on the Orbit Oracle. ao and Orbit are still in early development, and may not perform exactly as expected.\n\n\n# Data\n\nThe data command ARNS.data will search through the names you have already resolved and try to find the process Id or transaction Id that the name has in its records. If the specified name isn\'t in your resolved list already, a request to resolve it will be sent.\n\nFor example:\n\nARNS.data(\'blackjack\')\n\n\nwould give the output Vo7O7WJ2OPlKBtudjfeOdzjcjpi_-V_RLE27VpZP8jA, which is the process id of an ao black jack game. The command ARNS.data(\'blackjack\') can be used in place of anywhere that you would normally have to input that process id.\n\nProcess Id information will be prioritized over contract information, so if an ArNS name has both, the process id will be returned instead of the contract id.\n\n# Undernames\n\nArNS supports undernames, which are subdomains that exist on an ArNS name. They are separated by underscores (_) instead of dots (.) like a subdomain on a traditional domain would be. the data method can return information about a specific undername on an ArNS name if you specify it.\n\nARNS.data(\'dapp_ardrive\')\n\n\nwill return qrWdhy_PxrniBUlYn0macF-YbNgbmnmV5OVSrVRxxV8, which is the transaction id for the dapp undername on the ardrive ArNS name.\n\n\n# Owner\n\nOwner will, as its name indicates, return the Arweave wallet address that owns an ArNS name. It also uses the same syntax as the other commands:\n\nARNS.owner(\'ardrive\')\n\n\n\n# ID\n\nID is another method of getting a processId or transactionId from an ArNS name. Unlike ARNS.data, ARNS.id doesn\'t rely on the "contract" or "process" fields of the name. Instead, it grabs the processId or ContractId from the top level. For example, the ardrive example shown above:\n\n ardrive = {\n contractTxId = "bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM",\n lastUpdated = 1710951400626,\n record = {\n type = "lease",\n contractTxId = "bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM",\n undernames = 100,\n startTimestamp = 1694101828,\n endTimestamp = 1711122739,\n purchasePrice = 0\n }\n }\n\n\ndoes not have the fields "contract" or "process", so if you tried to get ARNS.data(\'ardrive\') it would return nil (or undefined). Using\n\nARNS.id(\'ardrive\')\n\n\ninstead will get the contractTxId value from the top level, and return that value. Just like with data, a process id is prioritized over a contract id.\n\n\n# Clear\n\nARNS.clear will reset your NAMES table, emptying your locally saved cache of ARNS data.\n\n\n# Sync\n\nWhen someone purchases an ArNS name on arns.app, that name is not automatically synced to the ao-ArNS registry. Anyone can initiate a sync, which loads the data of an ArNS name from the smartweave contract into the ao-ArNS registry:\n\nSend({ Target = "TyduW6spZTr3gkdIsdktduJhgtilaR_ex5JukK8gI9o", Tags = { Action = "Initiate-Record-Sync", Name = "" }})\n\n\nBe sure to replace with the correct ArNS name.\n\nNOTE: Syncing data from the ArNS smartweave contract relies on the Orbit Oracle. ao and Orbit are still in early development, and may not perform exactly as expected.',normalizedContent:'# ao arns resolver\n\n\n# overview\n\nao is in the early stages of development, with its infrastructure evolving quickly. among the developments is the arns-resolver, a set of rules and commands that facilitate the integration of arns names from the arns registry contract into your ao process. currently, the interaction with the arns registry contract is unidirectional; ao can receive updates but cannot modify the contract. as this feature is experimental, it is expected to undergo significant changes, but users are welcome to test the current iteration.\n\n\n# installation\n\n\n# from blueprint\n\nfrom inside aos, simply type .load-blueprint arns to load the arns resolver into your aos process.\n\n\n# from source\n\nto get access to the latest development version, you can install directly from the source code.\n\nthe arns-resolver is a single file within the ao-pilot github repository from ar.io. the specific file is located here.\n\nyou can install the ao-pilot repo on your computer with\n\ngit clone https://github.com/ar-io/ao-pilot\n\nnavigating the file system inside of ao is not as straightforward as it is in a regular terminal, so opening ao directly in the same folder as the file you are going to load can make things significantly easier.\n\ncd ao-pilot/src\naos\n\n\nfrom here, simply load the arns-resolver file into your process.\n\n.load arns-resolver.lua\n\nif things work successfully, your aos terminal will print "undefined".\n\n\n# usage\n\n\n# resolve\n\nyou can resolve an arns name with the arns.resolve command.\n\narns.resolve(\'ardrive\')\n\n\nthis will fetch all of the data related to the arns name ardrive and store it locally in your names table. you can print that data by typing\n\nnames[\'ardrive\']\n\n\nand use that variable in other commands that need to reference any of the data.\n\nthe resolve command will first check the ao-arns registry for any information on the name. if there is a contracttxid field present, it will then make a request to the arns smartweave contract, using the orbit oracle, in order to try and get more information about the contract state for the underlying ant. then, if there is a processid field, a request will be made to that process to try and get ao specific information. this loads information into your local process at each step. for example, the first bit of information coming from the ao-arns registry will look like this:\n\n ardrive = {\n contracttxid = "bh9l1cy0aksil_x9m359fagzm_yjralachiuo8_nqxm",\n lastupdated = 1710951400626,\n record = {\n type = "lease",\n contracttxid = "bh9l1cy0aksil_x9m359fagzm_yjralachiuo8_nqxm",\n undernames = 100,\n starttimestamp = 1694101828,\n endtimestamp = 1711122739,\n purchaseprice = 0\n }\n }\n\n\nafter orbit returns the information from the arns smartweave contract, that data will be added under a contract key:\n\nardrive = {\n contracttxid = "bh9l1cy0aksil_x9m359fagzm_yjralachiuo8_nqxm",\n contract = {\n controller = "6z-ifqgvi1jowmvsnwkws6ewueq0gu9eo4ahyc3rn1m",\n ticker = "ant-ardrive",\n name = "ardrive.io",\n lastupdated = 1711118753890,\n owner = "qgwqtjdllgm2ehfwiipzmaofld50cnguzzipedodrgq",\n balances = {\n qgwqtjdllgm2ehfwiipzmaofld50cnguzzipedodrgq = 1\n },\n records = {\n @ = {\n ttlseconds = 3600,\n transactionid = "noxjjj_vk0dc1ycgdwd8kti_1ihrugzlqlnnbhvpn0y"\n },\n cn = {\n ttlseconds = 3300,\n transactionid = "_hquert6pfgfxrvxrxqtkj7pv5rcizcqvmjltuy0c1k"\n },\n og = {\n ttlseconds = 3600,\n transactionid = "yzd_pm5vafypmd3zqcgmuckkulegheh7axlrnrdckbo"\n },\n logo = {\n ttlseconds = 3600,\n transactionid = "kkmrbifrc7wilcg0zvy1etlo0nbx1926dscksxcin3a"\n },\n og_logo = {\n ttlseconds = 3600,\n transactionid = "tb2wjykrpnkaw79dawljywpgdhkpijejwqfcwx715co"\n },\n dapp = {\n ttlseconds = 3600,\n transactionid = "qrwdhy_pxrnibulyn0macf-ybngbmnmv5ovsrvrxxv8"\n },\n og_dapp = {\n ttlseconds = 3600,\n transactionid = "5ir4wbu4kuv1puz1ypye1arxsrhut5g2ptmuon2jdli"\n }\n }\n },\n lastupdated = 1711118166407,\n record = {\n type = "lease",\n contracttxid = "bh9l1cy0aksil_x9m359fagzm_yjralachiuo8_nqxm",\n undernames = 100,\n starttimestamp = 1694101828,\n endtimestamp = 1711122739,\n purchaseprice = 0\n }\n }\n\n\nand an arns name with ao process information could look like this:\n\nblackjack = {\n contracttxid = "ydbc4jljkeurnbtbp15vlzx1zz9stgfpz7prvzoga3i",\n process = {\n denomination = "1",\n lastupdated = 1711049563689,\n ticker = "ant-blackjack",\n name = "blackjack",\n logo = "sie_26dvgyok0pzd_-iqafohod5yxdtkczoloqttl_a",\n owner = "cf0h0skdnadtqwky9ijkbkttpdewgb3gnlnde7abv0q",\n controllers = "["ikryoezqmoni2965nkz528htmmn_sbcjlhc-vncorja","w4aorx9fhpbicngbgtzq-ulyasut4pkw_tjsfs-k3tc","oey0wkxod2dangjby28dhyiad150sajlqaffnrbbeby"]",\n records = {\n @ = {\n ttlseconds = 3600,\n transactionid = "lt3pycxsdm9r2_lxhnqj3rzzhulszt8s-p8vm1fpejc"\n }\n }\n },\n lastupdated = 1711049561377,\n processid = "vo7o7wj2oplkbtudjfeodzjcjpi_-v_rle27vpzp8ja",\n record = {\n type = "lease",\n contracttxid = "ydbc4jljkeurnbtbp15vlzx1zz9stgfpz7prvzoga3i",\n undernames = 10,\n processid = "vo7o7wj2oplkbtudjfeodzjcjpi_-v_rle27vpzp8ja",\n starttimestamp = 1710964910,\n endtimestamp = 1742500910,\n purchaseprice = 875\n }\n }\n\n\nnote: syncing data from the arns smartweave contract relies on the orbit oracle. ao and orbit are still in early development, and may not perform exactly as expected.\n\n\n# data\n\nthe data command arns.data will search through the names you have already resolved and try to find the process id or transaction id that the name has in its records. if the specified name isn\'t in your resolved list already, a request to resolve it will be sent.\n\nfor example:\n\narns.data(\'blackjack\')\n\n\nwould give the output vo7o7wj2oplkbtudjfeodzjcjpi_-v_rle27vpzp8ja, which is the process id of an ao black jack game. the command arns.data(\'blackjack\') can be used in place of anywhere that you would normally have to input that process id.\n\nprocess id information will be prioritized over contract information, so if an arns name has both, the process id will be returned instead of the contract id.\n\n# undernames\n\narns supports undernames, which are subdomains that exist on an arns name. they are separated by underscores (_) instead of dots (.) like a subdomain on a traditional domain would be. the data method can return information about a specific undername on an arns name if you specify it.\n\narns.data(\'dapp_ardrive\')\n\n\nwill return qrwdhy_pxrnibulyn0macf-ybngbmnmv5ovsrvrxxv8, which is the transaction id for the dapp undername on the ardrive arns name.\n\n\n# owner\n\nowner will, as its name indicates, return the arweave wallet address that owns an arns name. it also uses the same syntax as the other commands:\n\narns.owner(\'ardrive\')\n\n\n\n# id\n\nid is another method of getting a processid or transactionid from an arns name. unlike arns.data, arns.id doesn\'t rely on the "contract" or "process" fields of the name. instead, it grabs the processid or contractid from the top level. for example, the ardrive example shown above:\n\n ardrive = {\n contracttxid = "bh9l1cy0aksil_x9m359fagzm_yjralachiuo8_nqxm",\n lastupdated = 1710951400626,\n record = {\n type = "lease",\n contracttxid = "bh9l1cy0aksil_x9m359fagzm_yjralachiuo8_nqxm",\n undernames = 100,\n starttimestamp = 1694101828,\n endtimestamp = 1711122739,\n purchaseprice = 0\n }\n }\n\n\ndoes not have the fields "contract" or "process", so if you tried to get arns.data(\'ardrive\') it would return nil (or undefined). using\n\narns.id(\'ardrive\')\n\n\ninstead will get the contracttxid value from the top level, and return that value. just like with data, a process id is prioritized over a contract id.\n\n\n# clear\n\narns.clear will reset your names table, emptying your locally saved cache of arns data.\n\n\n# sync\n\nwhen someone purchases an arns name on arns.app, that name is not automatically synced to the ao-arns registry. anyone can initiate a sync, which loads the data of an arns name from the smartweave contract into the ao-arns registry:\n\nsend({ target = "tyduw6spztr3gkdisdktdujhgtilar_ex5jukk8gi9o", tags = { action = "initiate-record-sync", name = "" }})\n\n\nbe sure to replace with the correct arns name.\n\nnote: syncing data from the arns smartweave contract relies on the orbit oracle. ao and orbit are still in early development, and may not perform exactly as expected.',charsets:{}},{title:"AR.IO Foundation",frontmatter:{permalink:"/foundation",prev:!1},regularPath:"/foundation.html",relativePath:"foundation.md",key:"v-ecd6cf40",path:"/foundation/",headers:[{level:2,title:"What is the AR.IO Foundation?",slug:"what-is-the-ar-io-foundation",normalizedTitle:"what is the ar.io foundation?",charIndex:23},{level:2,title:"Guiding Philosophy",slug:"guiding-philosophy",normalizedTitle:"guiding philosophy",charIndex:686}],headersStr:"What is the AR.IO Foundation? Guiding Philosophy",content:"# AR.IO Foundation\n\n\n# What is the AR.IO Foundation?\n\nThe AR.IO Foundation is dedicated to the stewardship and prosperity of The AR.IO Network and its associated token ecosystem. It holds a non-revocable, exclusive license to promote the development of the network, prioritizing the ecosystem's wellbeing, particularly the users.\n\nKey strategies employed by the Foundation (with the assistance of third-party teams) in support of the network include:\n\n * Providing grants and incentive programs\n\n * Making strategic investments\n\n * Engaging in direct software development\n\n * Producing educational content\n\n * Conducting publicity and marketing initiatives\n\n * Forming partnerships\n\n\n# Guiding Philosophy\n\nThe AR.IO Foundation serves as a unifying force within the ecosystem, facilitating communication, fostering innovation, and driving overall progress. Its primary aim is to function as a supportive entity rather than exerting excessive control over the network or disrupting its economic processes.\n\nThe key objectives of the AR.IO Foundation are as follows:\n\n * Sustaining and advancing the AR.IO Network: The Foundation takes responsibility for the continued development and enhancement of the AR.IO Network. It works collaboratively with developers, contributors, and stakeholders to ensure the network remains robust, secure, and adaptable to evolving technological landscapes.\n\n * Allocating resources to promote ecosystem and community growth: The Foundation is entrusted with managing and allocating resources to fuel the growth and expansion of the AR.IO ecosystem. This includes funding research initiatives, supporting innovative projects, and encouraging community-driven initiatives that contribute to the network's overall health and vitality.\n\n * Managing the core development of the AR.IO Network: The Foundation oversees and coordinates the core development efforts of the AR.IO Network. This involves coordinating with developers and technical teams to implement upgrades, address vulnerabilities, and introduce new features that align with the network's vision and community consensus.\n\n * Fostering collaboration and inclusivity: The Foundation actively fosters a culture of collaboration and inclusivity within the AR.IO ecosystem. It encourages diverse perspectives and welcomes contributions from individuals and organizations, fostering an environment where all participants can thrive and collectively shape the network's future.\n\nBy diligently pursuing these objectives, the AR.IO Foundation aims to create an environment where the AR.IO Network can flourish as a decentralized, secure, and resilient platform, contributing positively to the broader permaweb and decentralized storage landscape.",normalizedContent:"# ar.io foundation\n\n\n# what is the ar.io foundation?\n\nthe ar.io foundation is dedicated to the stewardship and prosperity of the ar.io network and its associated token ecosystem. it holds a non-revocable, exclusive license to promote the development of the network, prioritizing the ecosystem's wellbeing, particularly the users.\n\nkey strategies employed by the foundation (with the assistance of third-party teams) in support of the network include:\n\n * providing grants and incentive programs\n\n * making strategic investments\n\n * engaging in direct software development\n\n * producing educational content\n\n * conducting publicity and marketing initiatives\n\n * forming partnerships\n\n\n# guiding philosophy\n\nthe ar.io foundation serves as a unifying force within the ecosystem, facilitating communication, fostering innovation, and driving overall progress. its primary aim is to function as a supportive entity rather than exerting excessive control over the network or disrupting its economic processes.\n\nthe key objectives of the ar.io foundation are as follows:\n\n * sustaining and advancing the ar.io network: the foundation takes responsibility for the continued development and enhancement of the ar.io network. it works collaboratively with developers, contributors, and stakeholders to ensure the network remains robust, secure, and adaptable to evolving technological landscapes.\n\n * allocating resources to promote ecosystem and community growth: the foundation is entrusted with managing and allocating resources to fuel the growth and expansion of the ar.io ecosystem. this includes funding research initiatives, supporting innovative projects, and encouraging community-driven initiatives that contribute to the network's overall health and vitality.\n\n * managing the core development of the ar.io network: the foundation oversees and coordinates the core development efforts of the ar.io network. this involves coordinating with developers and technical teams to implement upgrades, address vulnerabilities, and introduce new features that align with the network's vision and community consensus.\n\n * fostering collaboration and inclusivity: the foundation actively fosters a culture of collaboration and inclusivity within the ar.io ecosystem. it encourages diverse perspectives and welcomes contributions from individuals and organizations, fostering an environment where all participants can thrive and collectively shape the network's future.\n\nby diligently pursuing these objectives, the ar.io foundation aims to create an environment where the ar.io network can flourish as a decentralized, secure, and resilient platform, contributing positively to the broader permaweb and decentralized storage landscape.",charsets:{}},{title:"AR.IO HTTP API Admin Endpoints",frontmatter:{},regularPath:"/gateways/ar-io-node/admin/admin-api.html",relativePath:"gateways/ar-io-node/admin/admin-api.md",key:"v-48851acc",path:"/gateways/ar-io-node/admin/admin-api.html",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:37},{level:2,title:"Debug",slug:"debug",normalizedTitle:"debug",charIndex:648},{level:2,title:"Queue Transaction",slug:"queue-transaction",normalizedTitle:"queue transaction",charIndex:1756},{level:2,title:"Block Data",slug:"block-data",normalizedTitle:"block data",charIndex:2297}],headersStr:"Overview Debug Queue Transaction Block Data",content:'# AR.IO HTTP API Admin Endpoints\n\n\n# Overview\n\nThe AR.IO HTTP API offers several endpoints that allow access to internal information and the ability to make adjustments without restarting your Gateway. Each of these endpoints behind /ar-io/admin/ have access restricted, so you will need to have set up your ADMIN_API_KEY variable and include "Authorization: "Bearer ${ADMIN_API_KEY}" in the header of your request.\n\nWhen testing endpoints at /api-docs, you can enter your ADMIN_API_KEY using the green "Authorize" button near the top of the page, or by clicking any of the open lock icons next to a password protected end point.\n\n\n# Debug\n\nThe ar-io/admin/debug endpoint provides a comprehensive view of the current state of your Gateway. This endpoint has been designed to offer developers and administrators insights into the operational status of the gateway, including any errors or warnings that have occurred since the last startup.\n\nExample response\n\n{\n db: {\n counts: {\n wallets: 137,\n tagNames: 61,\n tagValues: 892,\n stableTxs: 0,\n stableBlocks: 0,\n stableBlockTxs: 0,\n missingStableBlocks: 0,\n missingStableTxs: 0,\n missingTxs: 0,\n newBlocks: 32,\n newTxs: 4436,\n bundleCount: 159,\n bundleDataItems: 0,\n matcheDataItems: 0,\n dataItems: 0,\n nestedDataItems: null\n },\n heights: { minStable: -1, maxStable: -1, minNew: 1000000, maxNew: 1000031 },\n timestamps: {\n now: 1692230403,\n maxBundleQueuedAt: -1,\n maxBundleSkippedAt: 1692230390,\n maxBundleUnbundledAt: -1,\n maxBundleFullyIndexedAt: -1,\n maxNewDataItemIndexedAt: -1,\n maxStableDataItemIndexedAt: -1\n },\n errors: [],\n warnings: []\n }\n}\n\n\n\n# Queue Transaction\n\nThe ar-io/admin/queue-tx endpoint allows you to prioritize processing of a specific transaction, based on that transaction\'s ID. The id key must be set in the body of your request, and a POST request should be used.\n\nThis endpoint will also enable you to prioritize opening and indexing bundles by providing the L1 TX ID for the bundle, but only if your Gateway is operating with the ANS104_UNBUNDLE_FILTER and ANS104_INDEX_FILTER keys set.\n\nYour Gateway will either respond with an error, or { message: \'TX queued\' }\n\n\n# Block Data\n\nThe ar-io/admin/block-data endpoint allows you to tell your Gateway to refuse to serve certain data. In order to add to this block list, make a PUT request to this endpoint with the following in the body:\n\n{\n "id": "",\n "notes": "Example notes",\n "source": "Example source"\n}\n\n\n * id: This should be the transaction id of the content you want to block.\n * notes: Notes regarding the reason this content was blocked. For documentation purposes only.\n * source: Identifier for the source of TX IDs you are blocking. For example, the name of a public block list. For documentation purposes only.\n\nYour Gateway will either respond with an error, or { message: \'Content blocked\' }',normalizedContent:'# ar.io http api admin endpoints\n\n\n# overview\n\nthe ar.io http api offers several endpoints that allow access to internal information and the ability to make adjustments without restarting your gateway. each of these endpoints behind /ar-io/admin/ have access restricted, so you will need to have set up your admin_api_key variable and include "authorization: "bearer ${admin_api_key}" in the header of your request.\n\nwhen testing endpoints at /api-docs, you can enter your admin_api_key using the green "authorize" button near the top of the page, or by clicking any of the open lock icons next to a password protected end point.\n\n\n# debug\n\nthe ar-io/admin/debug endpoint provides a comprehensive view of the current state of your gateway. this endpoint has been designed to offer developers and administrators insights into the operational status of the gateway, including any errors or warnings that have occurred since the last startup.\n\nexample response\n\n{\n db: {\n counts: {\n wallets: 137,\n tagnames: 61,\n tagvalues: 892,\n stabletxs: 0,\n stableblocks: 0,\n stableblocktxs: 0,\n missingstableblocks: 0,\n missingstabletxs: 0,\n missingtxs: 0,\n newblocks: 32,\n newtxs: 4436,\n bundlecount: 159,\n bundledataitems: 0,\n matchedataitems: 0,\n dataitems: 0,\n nesteddataitems: null\n },\n heights: { minstable: -1, maxstable: -1, minnew: 1000000, maxnew: 1000031 },\n timestamps: {\n now: 1692230403,\n maxbundlequeuedat: -1,\n maxbundleskippedat: 1692230390,\n maxbundleunbundledat: -1,\n maxbundlefullyindexedat: -1,\n maxnewdataitemindexedat: -1,\n maxstabledataitemindexedat: -1\n },\n errors: [],\n warnings: []\n }\n}\n\n\n\n# queue transaction\n\nthe ar-io/admin/queue-tx endpoint allows you to prioritize processing of a specific transaction, based on that transaction\'s id. the id key must be set in the body of your request, and a post request should be used.\n\nthis endpoint will also enable you to prioritize opening and indexing bundles by providing the l1 tx id for the bundle, but only if your gateway is operating with the ans104_unbundle_filter and ans104_index_filter keys set.\n\nyour gateway will either respond with an error, or { message: \'tx queued\' }\n\n\n# block data\n\nthe ar-io/admin/block-data endpoint allows you to tell your gateway to refuse to serve certain data. in order to add to this block list, make a put request to this endpoint with the following in the body:\n\n{\n "id": "",\n "notes": "example notes",\n "source": "example source"\n}\n\n\n * id: this should be the transaction id of the content you want to block.\n * notes: notes regarding the reason this content was blocked. for documentation purposes only.\n * source: identifier for the source of tx ids you are blocking. for example, the name of a public block list. for documentation purposes only.\n\nyour gateway will either respond with an error, or { message: \'content blocked\' }',charsets:{}},{title:"Gateway network",frontmatter:{permalink:"/gateway-network/"},regularPath:"/gateway-network.html",relativePath:"gateway-network.md",key:"v-90d4f50c",path:"/gateway-network/",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:22},{level:2,title:"Gateway Address Registry (GAR)",slug:"gateway-address-registry-gar",normalizedTitle:"gateway address registry (gar)",charIndex:235},{level:2,title:"Staking",slug:"staking",normalizedTitle:"staking",charIndex:2650},{level:2,title:"Schema",slug:"schema",normalizedTitle:"schema",charIndex:3834},{level:3,title:"Gateway Schema",slug:"gateway-schema",normalizedTitle:"gateway schema",charIndex:3845},{level:3,title:"Token Vault",slug:"token-vault",normalizedTitle:"token vault",charIndex:5414},{level:3,title:"Gateway Settings",slug:"gateway-settings",normalizedTitle:"gateway settings",charIndex:5706}],headersStr:"Overview Gateway Address Registry (GAR) Staking Schema Gateway Schema Token Vault Gateway Settings",content:'# Gateway network\n\n\n# Overview\n\nThe AR.IO Network consists of AR.IO Gateway nodes, which are identified by their registered Arweave wallet addresses and either their IP addresses or hostnames, as stored in the network\'s smart contract Gateway Address Registry (GAR).\n\nThese nodes adhere to the AR.IO Network Protocols, creating a collaborative environment of Gateway nodes that vary in scale and specialization. The network ensures a fundamental level of service quality and trust minimization among its participants.\n\nBeing part of the network grants AR.IO Gateways an array of advantages, such as:\n\n * Simplified advertising of services and end user discovery via the Gateway Address Registry.\n\n * More rapid bootstrapping of key Gateway operational data due to prioritized data request fulfillment among Gateways joined to the network.\n\n * Sharing of data processing results.\n\n * Access to support channels tailored for operators.\n\n * Enhanced trust and transparency through the use of AGPL-3 licenses, which mandate public disclosure of any software changes, thereby reinforcing the network\'s integrity and reliability.\n\n * Improved network reliability and performance through an incentive protocol, which uses a system of rewards and evaluations to encourage high-quality service from Gateways.\n\n\n# Gateway Address Registry (GAR)\n\nAny Gateway operator that whishes to join the AR.IO Network must register their node in the AR.IO smart contract\'s "Gateway Address Registry", known as the GAR. Registration involves staking a minimum amount of IO tokens and providing additional metadata describing the Gateway service offered.\n\nAfter joining the network, the operator\'s Gateway can be easily discovered by permaweb apps, its health can be observed, and it can participate in the AR.IO data sharing protocol.\n\nThe Gateway operator can modify their Gateway\'s GAR configuration as needed, which includes adding more tokens to their stake or removing them. Operators can completely remove their stake and leave the AR.IO Network following a minimum network exit wait time. This exit time ensures that Gateways cannot quickly escape from an anticipated penalty.\n\nThe GAR advertises the specific attributes of each Gateway including its stake and settings. This enables permaweb apps and users to discover which Gateways are currently available and meet their needs. Apps that read the GAR can sort and filter it using the Gateway metadata, for example, ranking Gateways with the highest stake at the top of the list. This would allow users to prefer the lower-trust, higher staked Gateways before settling on a higher-trust, lower staked Gateway.\n\n\n# Staking\n\nStaking tokens serves a dual purpose in the AR.IO Network:\n\n * It acts as a method of public commitment, and\n\n * It qualifies participants for reward distribution.\n\nIn the AR.IO Network, "staking" designates the act of locking a specified amount of IO tokens into a protocol-controlled vault. These tokens act as a form of collateral and public commitment, encouraging network participants to act in the network\'s best interests. Once tokens are deposited in the vault, they remain locked until either the participant triggers the "unstake" function or the vault\'s predetermined lock period expires.\n\nIt is important to note that unlike other protocols, the IO token is non-inflationary. Therefore, the staking mechanism in the AR.IO Network is not designed to function as a yield-generation tool. By staking their tokens, participants become eligible for potential rewards, fostering an atmosphere of mutual trust within the network. Specifically, Gateway operators stake tokens to facilitate their Gateway integration and establish public trust. Once connected, they become eligible for rewards driven by the protocol and gain access to the network\'s shared resources.\n\n\n# Schema\n\n\n# Gateway Schema\n\nGATEWAY\nNAME TYPE DESCRIPTION\nOPERATORSTAKE number The total stake of the Gateway\'s operator.\nSTART number Block number in which the Gateway joined the network.\nEND number Block number in which the Gateway can leave the network,\n setting to 0 means no end date.\nSTATUS string Participation status of the Gateway, "joined" -\n participating in the network, "hidden" - not leaving, but\n not participating, "leaving" - in the process of withdrawing\n from the network.\nVAULTS array of objects The locked tokens staked by the Gateway operator, view\n schema.\nSETTINGS object Additional configuration settings for the Gateway, view\n schema.\nDELEGATES object Wallets that have delegated a stake of IO tokens to the\n Gateway.\nTOTALDELEGATEDSTAKE number The total number of IO tokens delegated to the Gateway\nOBSERVERWALLET string The public address for the wallet being used to sign and\n upload Observer reports\nSTATS object Information about the Gateways Network performance\n\n\n# Token Vault\n\nTOKEN VAULT\nNAME TYPE DESCRIPTION\nBALANCE number Positive integer, the number of IO tokens locked.\nSTART number Block number in which locking starts.\nEND number Block number in which locking ends. Setting to 0 means no\n end date.\n\n\n# Gateway Settings\n\nGATEWAY SETTINGS\nNAME TYPE REQUIRED DESCRIPTION\nLABEL string yes The friendly name used to label the Gateway.\nFQDN string yes The fully qualified domain name at which the Gateway can be\n reached. e.g. arweave.net\nPORT number yes The port used by the Gateway. e.g. 443\nPROTOCOL string yes Web protocol used by this Gateway "https", or "http"\nPROPERTIES string no An Arweave transaction ID containing additional properties\n of the Gateway.\nNOTE string no An Arweave transaction ID containing additional notes the\n Gateway operator can set to include things like\n announcements, maintenance, or other operational updates.\nALLOWDELEGATEDSTAKING boolean no The Gateway Operator can allow or disallow other wallets to\n stake IO tokens on the Gateway.\nDELEGATEDREWARDSHARERATIO number no The percentage of Gateway rewards given to delegated stakers\nAUTOSTAKE boolean no If true, Gateway rewards will automatically be added to the\n Gateway\'s Operator stake',normalizedContent:'# gateway network\n\n\n# overview\n\nthe ar.io network consists of ar.io gateway nodes, which are identified by their registered arweave wallet addresses and either their ip addresses or hostnames, as stored in the network\'s smart contract gateway address registry (gar).\n\nthese nodes adhere to the ar.io network protocols, creating a collaborative environment of gateway nodes that vary in scale and specialization. the network ensures a fundamental level of service quality and trust minimization among its participants.\n\nbeing part of the network grants ar.io gateways an array of advantages, such as:\n\n * simplified advertising of services and end user discovery via the gateway address registry.\n\n * more rapid bootstrapping of key gateway operational data due to prioritized data request fulfillment among gateways joined to the network.\n\n * sharing of data processing results.\n\n * access to support channels tailored for operators.\n\n * enhanced trust and transparency through the use of agpl-3 licenses, which mandate public disclosure of any software changes, thereby reinforcing the network\'s integrity and reliability.\n\n * improved network reliability and performance through an incentive protocol, which uses a system of rewards and evaluations to encourage high-quality service from gateways.\n\n\n# gateway address registry (gar)\n\nany gateway operator that whishes to join the ar.io network must register their node in the ar.io smart contract\'s "gateway address registry", known as the gar. registration involves staking a minimum amount of io tokens and providing additional metadata describing the gateway service offered.\n\nafter joining the network, the operator\'s gateway can be easily discovered by permaweb apps, its health can be observed, and it can participate in the ar.io data sharing protocol.\n\nthe gateway operator can modify their gateway\'s gar configuration as needed, which includes adding more tokens to their stake or removing them. operators can completely remove their stake and leave the ar.io network following a minimum network exit wait time. this exit time ensures that gateways cannot quickly escape from an anticipated penalty.\n\nthe gar advertises the specific attributes of each gateway including its stake and settings. this enables permaweb apps and users to discover which gateways are currently available and meet their needs. apps that read the gar can sort and filter it using the gateway metadata, for example, ranking gateways with the highest stake at the top of the list. this would allow users to prefer the lower-trust, higher staked gateways before settling on a higher-trust, lower staked gateway.\n\n\n# staking\n\nstaking tokens serves a dual purpose in the ar.io network:\n\n * it acts as a method of public commitment, and\n\n * it qualifies participants for reward distribution.\n\nin the ar.io network, "staking" designates the act of locking a specified amount of io tokens into a protocol-controlled vault. these tokens act as a form of collateral and public commitment, encouraging network participants to act in the network\'s best interests. once tokens are deposited in the vault, they remain locked until either the participant triggers the "unstake" function or the vault\'s predetermined lock period expires.\n\nit is important to note that unlike other protocols, the io token is non-inflationary. therefore, the staking mechanism in the ar.io network is not designed to function as a yield-generation tool. by staking their tokens, participants become eligible for potential rewards, fostering an atmosphere of mutual trust within the network. specifically, gateway operators stake tokens to facilitate their gateway integration and establish public trust. once connected, they become eligible for rewards driven by the protocol and gain access to the network\'s shared resources.\n\n\n# schema\n\n\n# gateway schema\n\ngateway\nname type description\noperatorstake number the total stake of the gateway\'s operator.\nstart number block number in which the gateway joined the network.\nend number block number in which the gateway can leave the network,\n setting to 0 means no end date.\nstatus string participation status of the gateway, "joined" -\n participating in the network, "hidden" - not leaving, but\n not participating, "leaving" - in the process of withdrawing\n from the network.\nvaults array of objects the locked tokens staked by the gateway operator, view\n schema.\nsettings object additional configuration settings for the gateway, view\n schema.\ndelegates object wallets that have delegated a stake of io tokens to the\n gateway.\ntotaldelegatedstake number the total number of io tokens delegated to the gateway\nobserverwallet string the public address for the wallet being used to sign and\n upload observer reports\nstats object information about the gateways network performance\n\n\n# token vault\n\ntoken vault\nname type description\nbalance number positive integer, the number of io tokens locked.\nstart number block number in which locking starts.\nend number block number in which locking ends. setting to 0 means no\n end date.\n\n\n# gateway settings\n\ngateway settings\nname type required description\nlabel string yes the friendly name used to label the gateway.\nfqdn string yes the fully qualified domain name at which the gateway can be\n reached. e.g. arweave.net\nport number yes the port used by the gateway. e.g. 443\nprotocol string yes web protocol used by this gateway "https", or "http"\nproperties string no an arweave transaction id containing additional properties\n of the gateway.\nnote string no an arweave transaction id containing additional notes the\n gateway operator can set to include things like\n announcements, maintenance, or other operational updates.\nallowdelegatedstaking boolean no the gateway operator can allow or disallow other wallets to\n stake io tokens on the gateway.\ndelegatedrewardshareratio number no the percentage of gateway rewards given to delegated stakers\nautostake boolean no if true, gateway rewards will automatically be added to the\n gateway\'s operator stake',charsets:{}},{title:"Advanced Configuration",frontmatter:{},regularPath:"/gateways/ar-io-node/advanced-config.html",relativePath:"gateways/ar-io-node/advanced-config.md",key:"v-9172688c",path:"/gateways/ar-io-node/advanced-config.html",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:29},{level:2,title:"Data Storage Location",slug:"data-storage-location",normalizedTitle:"data storage location",charIndex:685},{level:2,title:"Admin API Key",slug:"admin-api-key",normalizedTitle:"admin api key",charIndex:1390},{level:2,title:"Wallet Association",slug:"wallet-association",normalizedTitle:"wallet association",charIndex:1867},{level:2,title:"Unbundling",slug:"unbundling",normalizedTitle:"unbundling",charIndex:2151},{level:2,title:"Content Moderation",slug:"content-moderation",normalizedTitle:"content moderation",charIndex:2814},{level:2,title:"Contiguous Data Cleanup",slug:"contiguous-data-cleanup",normalizedTitle:"contiguous data cleanup",charIndex:3918},{level:2,title:"ArNS Resolver",slug:"arns-resolver",normalizedTitle:"arns resolver",charIndex:4949}],headersStr:"Overview Data Storage Location Admin API Key Wallet Association Unbundling Content Moderation Contiguous Data Cleanup ArNS Resolver",content:'# Advanced Configuration\n\n\n# Overview\n\nThe Getting Started guides for windows and linux contain all the information needed to start your ar.io Gateway node successfully with basic configurations. There are also ever expanding advanced configuration options that allow you to run your node in a way that is customized to your specific use case.\n\nMost of the below options can be added to your .env file in order to customize its operation. Any changes made to your .env require you to stop the docker containers running your node, and restarting them with the --build flag in order for the changes to take effect. See ENV for a complete list of environmental variables you can set.\n\n\n# Data Storage Location\n\nYou can set a custom location for your AR.IO Gateway to save the data it pulls from the Arweave network. There are three primary types of data stored, and you can set a unique storage location for each of these independently. These are "chunks data", "contiguous data", and "headers data". The custom location for each of these can be set in your .env file like this:\n\nCHUNKS_DATA_PATH=\nCONTIGUOUS_DATA_PATH=\nHEADERS_DATA_PATH=\n\n\nBe sure to replace "" with the path to the location where you would like the data stored. If these values are omitted, the data will be stored in the "data" directory inside your Gateway code repository.\n\n\n# Admin API Key\n\nHTTP endpoints under "/ar-io/admin" are protected by an admin API key. These endpoints allow you to get certain analytics data or make adjustments to your node as it\'s running. When your node starts, it reads your environmental variables to see if a key is set. If not, a random key is generated. The key name is ADMIN_API_KEY and it should be set in your .env file like this:\n\nADMIN_API_KEY=SUPER_SECRET_PASSWORD\n\n\nView examples of the admin endpoints here\n\n\n# Wallet Association\n\nIn order to participate in the greater ar.io network, Gateway nodes need to associate themselves with an Arweave wallet. This can be configured by setting the AR_IO_WALLET key value in your .env file.\n\nAR_IO_WALLET=1seRanklLU_1VTGowDZdD7s_-7k1qowT6oeFZHUZiZo\n\n\n\n# Unbundling\n\nAR.IO Gateway nodes support unbundling and indexing ANS-104 bundle data. This is disabled by default, but can be turned on with several different configuration options. You can set these configurations with the ANS104_UNBUNDLE_FILTER and ANS104_INDEX_FILTER keys in your .env:\n\nANS104_UNBUNDLE_FILTER=""\nANS104_INDEX_FILTER=""\n\n\nThe following types of filters are supported:\n\n{ "never": true } # the default\n{ "always": true }\n{ "attributes": { "owner": , ... }}\n{ "tags": [{ "name": , "value": }, ...]}\n{ "and": [ , ... ]}\n{ "or": [ , ... ]}\n\n\n\n# Content Moderation\n\nYou are able to set your Gateway to block specific transactions or data-items you don\'t want to serve. Unlike previous configuration options in this list, blocking content can be achieved without the need to add to your .env file and rebuild your Gateway. Instead, make a PUT request to your Gateway at /ar-io/admin/block-data. As this is an admin endpoint, you will need to have configured your ADMIN_API_KEY. Using curl as an example, the request should be formatted as follows:\n\ncurl -X PUT -H "Authorization: Bearer " \\\n -H "Content-Type: application/json" \\\n "http://:/ar-io/admin/block-data" \\\n -d \'{ "id": "", "notes": "Example notes", "source": "Example source" }\'\n\n\n * id (string): This will be the transaction ID of the content you want to add to your block list.\n * notes (string): Internal notes regarding why a particular ID is blocked.\n * source (string): Identifier of a particular source of IDs to block. (e.g. the name of a block list)\n\nnotes and source are used for documentation only, and have no effect on your block list itself.\n\n\n# Contiguous Data Cleanup\n\nTransaction data on Arweave is stored in a chunked manner. It is commonly retrieved, however, in the the transaction data\'s original, contiguous form with all of its component chunks assembled end-to-end. Gateways cache contiguous representations of the transaction data to assist in various workloads, including serving transaction data to clients, allowing for efficient utilization of valuable system resources. Gateway operators will need to determine for themselves the best balance between disk space and other resource usage based on the size of their gateway and their particular use case.\n\nContiguous data cache cleanup can be enabled using the CONTIGUOUS_DATA_CACHE_CLEANUP_THRESHOLD environmental variable. This variable sets the number of seconds from the creation of a file in the contiguous data cache after which that file will be deleted. For example:\n\nCONTIGUOUS_DATA_CACHE_CLEANUP_THRESHOLD=10000\n\n\nwill clear items from the contiguous data cache after ten thousand (10,000) seconds.\n\n\n# ArNS Resolver\n\nGateways, by default, forward requests to resolve ArNS names to arweave.dev. Starting with Release 9 gateways can instead build and maintain their own local cache. Doing so removes external dependencies and allows faster resolution.\n\nView the code for the ArNS resolver service here: https://github.com/ar-io/arns-resolver\n\nNOTE: The ArNS resolver is still an experimental feature. It is possible it may behave in unexpected ways when presented with rare edge case scenarios.\n\nIn order to enable the local ArNS resolver, three environmental variables will need to be set:\n\nRUN_RESOLVER=true\nTRUSTED_ARNS_RESOLVER_TYPE=resolver\nTRUSTED_ARNS_RESOLVER_URL=http://resolver:6000\n\n\n * RUN_RESOLVER is a boolean representing an on/off switch for the local resolver.\n * TRUSTED_ARNS_RESOLVER_TYPE sets the method the gateway uses for resolving ArNS names. Use resolver for the local resolver, or gateway for default functionality.\n * TRUSTED_ARNS_RESOLVER_URL is the url a gateway will use to request ArNS name resolution.',normalizedContent:'# advanced configuration\n\n\n# overview\n\nthe getting started guides for windows and linux contain all the information needed to start your ar.io gateway node successfully with basic configurations. there are also ever expanding advanced configuration options that allow you to run your node in a way that is customized to your specific use case.\n\nmost of the below options can be added to your .env file in order to customize its operation. any changes made to your .env require you to stop the docker containers running your node, and restarting them with the --build flag in order for the changes to take effect. see env for a complete list of environmental variables you can set.\n\n\n# data storage location\n\nyou can set a custom location for your ar.io gateway to save the data it pulls from the arweave network. there are three primary types of data stored, and you can set a unique storage location for each of these independently. these are "chunks data", "contiguous data", and "headers data". the custom location for each of these can be set in your .env file like this:\n\nchunks_data_path=\ncontiguous_data_path=\nheaders_data_path=\n\n\nbe sure to replace "" with the path to the location where you would like the data stored. if these values are omitted, the data will be stored in the "data" directory inside your gateway code repository.\n\n\n# admin api key\n\nhttp endpoints under "/ar-io/admin" are protected by an admin api key. these endpoints allow you to get certain analytics data or make adjustments to your node as it\'s running. when your node starts, it reads your environmental variables to see if a key is set. if not, a random key is generated. the key name is admin_api_key and it should be set in your .env file like this:\n\nadmin_api_key=super_secret_password\n\n\nview examples of the admin endpoints here\n\n\n# wallet association\n\nin order to participate in the greater ar.io network, gateway nodes need to associate themselves with an arweave wallet. this can be configured by setting the ar_io_wallet key value in your .env file.\n\nar_io_wallet=1serankllu_1vtgowdzdd7s_-7k1qowt6oefzhuzizo\n\n\n\n# unbundling\n\nar.io gateway nodes support unbundling and indexing ans-104 bundle data. this is disabled by default, but can be turned on with several different configuration options. you can set these configurations with the ans104_unbundle_filter and ans104_index_filter keys in your .env:\n\nans104_unbundle_filter=""\nans104_index_filter=""\n\n\nthe following types of filters are supported:\n\n{ "never": true } # the default\n{ "always": true }\n{ "attributes": { "owner": , ... }}\n{ "tags": [{ "name": , "value": }, ...]}\n{ "and": [ , ... ]}\n{ "or": [ , ... ]}\n\n\n\n# content moderation\n\nyou are able to set your gateway to block specific transactions or data-items you don\'t want to serve. unlike previous configuration options in this list, blocking content can be achieved without the need to add to your .env file and rebuild your gateway. instead, make a put request to your gateway at /ar-io/admin/block-data. as this is an admin endpoint, you will need to have configured your admin_api_key. using curl as an example, the request should be formatted as follows:\n\ncurl -x put -h "authorization: bearer " \\\n -h "content-type: application/json" \\\n "http://:/ar-io/admin/block-data" \\\n -d \'{ "id": "", "notes": "example notes", "source": "example source" }\'\n\n\n * id (string): this will be the transaction id of the content you want to add to your block list.\n * notes (string): internal notes regarding why a particular id is blocked.\n * source (string): identifier of a particular source of ids to block. (e.g. the name of a block list)\n\nnotes and source are used for documentation only, and have no effect on your block list itself.\n\n\n# contiguous data cleanup\n\ntransaction data on arweave is stored in a chunked manner. it is commonly retrieved, however, in the the transaction data\'s original, contiguous form with all of its component chunks assembled end-to-end. gateways cache contiguous representations of the transaction data to assist in various workloads, including serving transaction data to clients, allowing for efficient utilization of valuable system resources. gateway operators will need to determine for themselves the best balance between disk space and other resource usage based on the size of their gateway and their particular use case.\n\ncontiguous data cache cleanup can be enabled using the contiguous_data_cache_cleanup_threshold environmental variable. this variable sets the number of seconds from the creation of a file in the contiguous data cache after which that file will be deleted. for example:\n\ncontiguous_data_cache_cleanup_threshold=10000\n\n\nwill clear items from the contiguous data cache after ten thousand (10,000) seconds.\n\n\n# arns resolver\n\ngateways, by default, forward requests to resolve arns names to arweave.dev. starting with release 9 gateways can instead build and maintain their own local cache. doing so removes external dependencies and allows faster resolution.\n\nview the code for the arns resolver service here: https://github.com/ar-io/arns-resolver\n\nnote: the arns resolver is still an experimental feature. it is possible it may behave in unexpected ways when presented with rare edge case scenarios.\n\nin order to enable the local arns resolver, three environmental variables will need to be set:\n\nrun_resolver=true\ntrusted_arns_resolver_type=resolver\ntrusted_arns_resolver_url=http://resolver:6000\n\n\n * run_resolver is a boolean representing an on/off switch for the local resolver.\n * trusted_arns_resolver_type sets the method the gateway uses for resolving arns names. use resolver for the local resolver, or gateway for default functionality.\n * trusted_arns_resolver_url is the url a gateway will use to request arns name resolution.',charsets:{}},{title:"AR.IO HTTP API",frontmatter:{},regularPath:"/gateways/ar-io-node/api.html",relativePath:"gateways/ar-io-node/api.md",key:"v-172dfc5a",path:"/gateways/ar-io-node/api.html",headersStr:null,content:"# AR.IO HTTP API\n\nUp to date documentation of endpoints for the AR.IO HTTP API used to access your Gateway can be found here.\n\nYou can also view endpoint documentation and test the endpoints against your own Gateway by going to /api-docs",normalizedContent:"# ar.io http api\n\nup to date documentation of endpoints for the ar.io http api used to access your gateway can be found here.\n\nyou can also view endpoint documentation and test the endpoints against your own gateway by going to /api-docs",charsets:{}},{title:"Observation and Incentives",frontmatter:{permalink:"/gateways/ar-io-node/arnsoip/observer/",next:!1},regularPath:"/gateways/ar-io-node/arnsoip/observer.html",relativePath:"gateways/ar-io-node/arnsoip/observer.md",key:"v-30ab1e90",path:"/gateways/ar-io-node/arnsoip/observer/",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:33},{level:2,title:"Observation Protocol",slug:"observation-protocol",normalizedTitle:"observation protocol",charIndex:1637},{level:2,title:"Onchain Reports",slug:"onchain-reports",normalizedTitle:"onchain reports",charIndex:3280},{level:2,title:"Selection of Observers",slug:"selection-of-observers",normalizedTitle:"selection of observers",charIndex:4861},{level:3,title:"Criteria for Selection",slug:"criteria-for-selection",normalizedTitle:"criteria for selection",charIndex:5247},{level:3,title:"Weight Calculation and Normalization",slug:"weight-calculation-and-normalization",normalizedTitle:"weight calculation and normalization",charIndex:6711},{level:3,title:"Random Selection Process",slug:"random-selection-process",normalizedTitle:"random selection process",charIndex:7303},{level:2,title:"Performance Evaluation",slug:"performance-evaluation",normalizedTitle:"performance evaluation",charIndex:7827},{level:2,title:"Reward Distribution",slug:"reward-distribution",normalizedTitle:"reward distribution",charIndex:9101},{level:3,title:"Distribution Based on Performance",slug:"distribution-based-on-performance",normalizedTitle:"distribution based on performance",charIndex:9713},{level:3,title:"Undistributed Rewards",slug:"undistributed-rewards",normalizedTitle:"undistributed rewards",charIndex:10434},{level:2,title:"Handling Inactive Gateways",slug:"handling-inactive-gateways",normalizedTitle:"handling inactive gateways",charIndex:10827},{level:2,title:"Observer Report Details",slug:"observer-report-details",normalizedTitle:"observer report details",charIndex:11201},{level:2,title:"General Information",slug:"general-information",normalizedTitle:"general information",charIndex:3904},{level:2,title:"Overall Gateway Operator Assessment",slug:"overall-gateway-operator-assessment",normalizedTitle:"overall gateway operator assessment",charIndex:11556},{level:2,title:"ArNS Assessments",slug:"arns-assessments",normalizedTitle:"arns assessments",charIndex:11882},{level:2,title:"Example Observation Report",slug:"example-observation-report",normalizedTitle:"example observation report",charIndex:12684},{level:2,title:"Viewing Observation Reports",slug:"viewing-observation-reports",normalizedTitle:"viewing observation reports",charIndex:12780},{level:3,title:"example",slug:"example",normalizedTitle:"example",charIndex:13056}],headersStr:"Overview Observation Protocol Onchain Reports Selection of Observers Criteria for Selection Weight Calculation and Normalization Random Selection Process Performance Evaluation Reward Distribution Distribution Based on Performance Undistributed Rewards Handling Inactive Gateways Observer Report Details General Information Overall Gateway Operator Assessment ArNS Assessments Example Observation Report Viewing Observation Reports example",content:"# Observation and Incentives\n\n\n# Overview\n\nThe Observation and Incentive Protocol is designed to maintain and enhance the operational integrity of gateways on the AR.IO Network. It achieves this through a combination of incentivizing gateways for good performance and tasking those gateways to fulfill the role of \"observers\". The protocol is intentionally simple and adaptable, employing a smart contract-based method for onchain “voting” to assess peer performance while being flexible on how that performance is measured. This setup permits gateway and observer nodes to experiment and evolve best practices for performance evaluation, all while operating within the bounds of the network's immutable smart contract, thus eliminating the need for frequent contract updates (forks).\n\nIn this protocol, observers evaluate their gateway peers' performance to resolve ArNS names. Their aim is to ensure each gateway in the network accurately resolves a subset of names and assigning a pass / fail score based on their findings.\n\nA key component of the protocol is its reward mechanism. This system is predicated on gateway performance and compliance with observation duties. Gateways that excel are tagged as \"Functional Gateways\" and earn rewards, while those that do not meet the criteria, “Deficient Gateways” risk facing penalties – namely, the lack of rewards.\n\nFunds for incentive rewards are derived from the protocol balance, which consists of IO tokens collected from ArNS asset purchases. Every epoch, this balance is utilized to distribute rewards to qualifying gateways and observers based on certain performance metrics.\n\n\n# Observation Protocol\n\nThe Observation protocol is organized around epochs, periods of time that are broken into an observation reporting and tallying phase. The protocol is followed across each epoch, promoting consistent healthy network activity that can form pro-social behaviors and react to malicious circumstances.\n\nObservation and Incentive Protocol\n * To participate in the epoch, a gateway must have already staked IO tokens and joined the network before it starts.\n * Each epoch (approximately 7 block-days), a random pool of active gateways will be selected (prescribed) to perform observation duties.\n * Within the epoch, observers are tasked with evaluating a subset of ArNS names for each gateway in the network.\n * By the end of the epoch’s observation reporting period, the observer must upload its standardized health observation report to Arweave.\n * The observer must also submit an interaction to the AR.IO contract to save its report transaction ID and a summary of all failed gateways for tallying by the incentive protocol.\n * After the observation reporting period and tallying periods have closed, the payout is performed on the next contract state tick.\n * This payout rewards gateways and observers who have performed their duties.\n * Gateways that did not meet the performance threshold will not receive rewards.\n * Observers that did not perform their duties are not rewarded and in addition, are penalized on any gateway rewards received.\n * Community builders and application users can verify and leverage the report and distribution information to make more informed decisions on which gateway to use.\n\n\n# Onchain Reports\n\nThe to-be-evaluated ArNS names include a set of names randomly determined by the protocol, known as “prescribed names”, which are common across all observers within the epoch, as well as a set of “chosen names” picked at the discretion of each individual observer. “Prescribed names” are assigned to act as a common denominator / baseline while “chosen names” allow each observer to evaluate names that may be important to their operation.\n\nEach observer shall assess the performance of the selected ArNS names (across all gateways) and summarize those findings in a report which details the following:\n\n * General Information: Observer's Arweave address, starting and concluding block heights for the epoch.\n\n * Gateway Operator Assessment: The expected and actual Arweave addresses of observed gateways, along with a summary verdict (pass or fail), and accompanying reasons for failure.\n\n * Detailed ArNS Evaluations: For each gateway, it includes the domain name, evaluated ArNS names, the associated block height, transaction IDs, data hashes, a \"pass or fail\" score, reasons for failure (if any), and performance metrics like time to the first byte.\n\nA comprehensive list of report criteria can be found in the Appendix.\n\nObservers shall upload their completed reports (in JSON format) to the Arweave network as an onchain audit trail. In addition, observers shall submit an interaction to the AR.IO smart contact detailing each gateway that they observed to have “failed” their assessments. This is tallied and used to determine the reward distribution.\n\n\n# Selection of Observers\n\nThe observer selection process employs a random-weighted selection method. By combining random selection with weighted criteria like stake, tenure, and past rewards, the process aims to ensure both fairness and acknowledgment of consistent performance. This method allows for a systematic yet randomized approach to selecting gateways for observation tasks.\n\n\n# Criteria for Selection\n\nUp to 50 gateways can be chosen as observers per epoch. If the GAR contains 50 or fewer gateways, then every gateway is designated as an observer for that epoch. If there are greater than 50, then randomized selection shall be utilized.\n\nThe weighted selection criteria will consider the following for each gateway:\n\n * Stake Weight (SW): This factor considers how financially committed a gateway is to the network. It is the ratio of the amount of IO tokens staked by the gateway relative to the network minimum and is expressed as SW = Gateway Stake / Minimum Stake.\n\n * Tenure Weight (TW): This factor considers how long a gateway has been part of the network, with a maximum value capped at 4. It is calculated as TW = Gateway Network Tenure / 6 block-months. This means that the maximum value is achieved after 2 block-years of participation in the network.\n\n * Gateway Reward Ratio Weight (GRRW): This factor is a proxy for a gateway’s performance at resolving ArNS names. The weight represents the ratio of epochs in which a gateway received rewards for correctly resolving names relative to their total time on the network.\n\n * Observer Reward Ratio Weight (ORRW): This factor is a proxy for a gateway’s performance at fulfilling observation duties. The weight reflects the ratio of epochs in which a gateway, as an observer, successfully submitted observation reports relative to their total periods of service as an observer.\n\n\n# Weight Calculation and Normalization\n\nFor each gateway, a composite weight (CW) is computed, combining the Stake Weight, Tenure Weight, Gateway Reward Ratio Weight, and Observer Reward Ratio Weight.\n\nThe formula used is: CW = SW x TW x GRRW x ORRW.\n\nThese weights are then normalized across the network to create a continuous range, allowing for proportional random selection based on the weighted scores. The normalized composite weight (N_CW) for each gateway indicates its likelihood of being chosen as an observer and is calculated by dividing the gateway's CW by the sum of all CWs.\n\n\n# Random Selection Process\n\nThe selection of observers is randomized within the framework of these weights. A set of unique random numbers is generated within the total range of normalized weights. For each random number, the gateway whose normalized weight range encompasses this number is selected. This system ensures that while gateways with higher weights are more likely to be chosen, all gateways maintain a non-zero chance of selection, preserving both fairness and meritocracy in the observer assignment process.\n\n\n# Performance Evaluation\n\nConsider the following classifications:\n\n * Functional or Passed Gateways: are gateways that meet or surpass the network’s performance and quality standards.\n\n * Deficient or Failed Gateways: are gateways that fall short of the network's performance expectations.\n\n * Functional or Submitted Observers: are selected observers who diligently perform their duties and submit observation reports and contract interactions.\n\n * Deficient or Failed Observers: are selected observers who do not fulfill their duty of submitting observation reports and contract interactions.\n\nAt the end of an epoch, the smart contract will assess the results from the observers during a “tallying period” and determine a pass / fail score for each gateway:\n\n * If greater than or equal to 50% of submitted observer contract interactions indicate a PASS score, then that gateway is considered Functional and eligible for gateway rewards.\n\n * Else, if greater than 50% of submitted observer contract interactions indicate a FAIL score, then that gateway is considered Deficient and ineligible for gateway rewards.\n\nThese results will determine how reward distributions are made for that epoch. Rewards shall be distributed after the epoch’s tallying period is complete.\n\n\n# Reward Distribution\n\nEach epoch, a defined portion of the protocol balance (e.g., 0.05%) is earmarked for distribution as rewards. From this allocation, two distinct reward categories are derived:\n\n 1. Base Gateway Reward: This is the portion of the reward allocated to each Functional Gateway within the network and is calculated as:\n \n [Epoch Reward Allocation x 90% / Total Gateways in the Network]\n\n 2. Base Observer Reward: Observers, due to their additional responsibilities, have a separate reward calculated as:\n \n [Epoch Reward Allocation x 10% / Total Selected Observers for the Epoch]\n\n\n# Distribution Based on Performance\n\nThe reward distribution is contingent on the performance classifications derived from the Performance Evaluation:\n\n * Functional Gateways: Gateways that meet the performance criteria receive the Base Gateway Reward.\n\n * Deficient Gateways: Gateways falling short in performance do not receive any gateway rewards.\n\n * Functional Observers: Observers that fulfilled their duty receive the Base Observer Reward.\n\n * Deficient Observers: Observers failing to meet their responsibilities do not receive observer rewards. Furthermore, if they are also Functional Gateways, their gateway reward is reduced by 25% for that epoch as a consequence for not performing their observation duty.\n\n\n# Undistributed Rewards\n\nIn cases where rewards are not distributed, either due to the inactivity or deficiency of gateways or observers, the allocated tokens shall remain in the protocol balance and carry forward to the next epoch. This mechanism is in place to discourage observers from frivolously marking their peers as offline in hopes of attaining a higher portion of the reward pool.\n\n\n# Handling Inactive Gateways\n\nTo maintain network efficiency and reduce contract state bloat, gateways that are consistently offline, specifically for thirty (30) consecutive epochs, and thus fail to receive rewards, will be automatically removed from the Gateway Active Registry (GAR) as well as have their staked IO tokens unlocked and returned to the gateway operator.\n\n\n# Observer Report Details\n\nEach observer shall assess the performance of the selected ArNS names (across all AR.IO gateways) and summarize those findings in a report which details the following:\n\n\n# General Information\n\n * The observer's Arweave address.\n * The starting block height of the epoch.\n * The block height at which the report was generated.\n\n\n# Overall Gateway Operator Assessment\n\n * Gateway FQDN.\n * The Arweave address that the observer expects to be the owner / operator of the gateway.\n * The Arweave address that the observed gateway actually reports.\n * A final “pass or fail” rollup determination for each observed gateway.\n * Failure reason (if applicable).\n\n\n# ArNS Assessments\n\n * Observed ArNS name (for all prescribed and chosen names).\n * The block height at which the name was assessed.\n * The expected status code.\n * The resolved status code.\n * The transaction ID that the observer expects the associated name to resolve to.\n * The transaction ID that the gateway actually resolves to.\n * The data hash that the observer expects the associated name to resolve to.\n * The data hash that the gateway actually resolves to.\n * The “pass or fail” score associated with the observed name, at the observer’s discretion.\n * Failure reason (if applicable).\n * Timing / performance information associated with the name resolution such as time to first byte and total duration.\n\nThe above is repeated for the entire name pool and across each gateway in the GAR.\n\n\n# Example Observation Report\n\nhttps://arweave.net/GG1YCFc7wQxKvQ1qD1lTEp2OAMBs4VzrpfdmeeLyjDI\n\n\n# Viewing Observation Reports\n\nYou can easily view an observation report in a human readable format through your terminal with the following command:\n\ncurl -L https://arweave.net/ | zcat | jq .\n\n\nBe sure to replace with the txId of the report you want to view.\n\n\n# example\n\ncurl -L https://arweave.net/H3zDmoDkpOg0U95rejBEq6gUnww_CEVscTuQVqfSbxk | zcat | jq .\n",normalizedContent:"# observation and incentives\n\n\n# overview\n\nthe observation and incentive protocol is designed to maintain and enhance the operational integrity of gateways on the ar.io network. it achieves this through a combination of incentivizing gateways for good performance and tasking those gateways to fulfill the role of \"observers\". the protocol is intentionally simple and adaptable, employing a smart contract-based method for onchain “voting” to assess peer performance while being flexible on how that performance is measured. this setup permits gateway and observer nodes to experiment and evolve best practices for performance evaluation, all while operating within the bounds of the network's immutable smart contract, thus eliminating the need for frequent contract updates (forks).\n\nin this protocol, observers evaluate their gateway peers' performance to resolve arns names. their aim is to ensure each gateway in the network accurately resolves a subset of names and assigning a pass / fail score based on their findings.\n\na key component of the protocol is its reward mechanism. this system is predicated on gateway performance and compliance with observation duties. gateways that excel are tagged as \"functional gateways\" and earn rewards, while those that do not meet the criteria, “deficient gateways” risk facing penalties – namely, the lack of rewards.\n\nfunds for incentive rewards are derived from the protocol balance, which consists of io tokens collected from arns asset purchases. every epoch, this balance is utilized to distribute rewards to qualifying gateways and observers based on certain performance metrics.\n\n\n# observation protocol\n\nthe observation protocol is organized around epochs, periods of time that are broken into an observation reporting and tallying phase. the protocol is followed across each epoch, promoting consistent healthy network activity that can form pro-social behaviors and react to malicious circumstances.\n\nobservation and incentive protocol\n * to participate in the epoch, a gateway must have already staked io tokens and joined the network before it starts.\n * each epoch (approximately 7 block-days), a random pool of active gateways will be selected (prescribed) to perform observation duties.\n * within the epoch, observers are tasked with evaluating a subset of arns names for each gateway in the network.\n * by the end of the epoch’s observation reporting period, the observer must upload its standardized health observation report to arweave.\n * the observer must also submit an interaction to the ar.io contract to save its report transaction id and a summary of all failed gateways for tallying by the incentive protocol.\n * after the observation reporting period and tallying periods have closed, the payout is performed on the next contract state tick.\n * this payout rewards gateways and observers who have performed their duties.\n * gateways that did not meet the performance threshold will not receive rewards.\n * observers that did not perform their duties are not rewarded and in addition, are penalized on any gateway rewards received.\n * community builders and application users can verify and leverage the report and distribution information to make more informed decisions on which gateway to use.\n\n\n# onchain reports\n\nthe to-be-evaluated arns names include a set of names randomly determined by the protocol, known as “prescribed names”, which are common across all observers within the epoch, as well as a set of “chosen names” picked at the discretion of each individual observer. “prescribed names” are assigned to act as a common denominator / baseline while “chosen names” allow each observer to evaluate names that may be important to their operation.\n\neach observer shall assess the performance of the selected arns names (across all gateways) and summarize those findings in a report which details the following:\n\n * general information: observer's arweave address, starting and concluding block heights for the epoch.\n\n * gateway operator assessment: the expected and actual arweave addresses of observed gateways, along with a summary verdict (pass or fail), and accompanying reasons for failure.\n\n * detailed arns evaluations: for each gateway, it includes the domain name, evaluated arns names, the associated block height, transaction ids, data hashes, a \"pass or fail\" score, reasons for failure (if any), and performance metrics like time to the first byte.\n\na comprehensive list of report criteria can be found in the appendix.\n\nobservers shall upload their completed reports (in json format) to the arweave network as an onchain audit trail. in addition, observers shall submit an interaction to the ar.io smart contact detailing each gateway that they observed to have “failed” their assessments. this is tallied and used to determine the reward distribution.\n\n\n# selection of observers\n\nthe observer selection process employs a random-weighted selection method. by combining random selection with weighted criteria like stake, tenure, and past rewards, the process aims to ensure both fairness and acknowledgment of consistent performance. this method allows for a systematic yet randomized approach to selecting gateways for observation tasks.\n\n\n# criteria for selection\n\nup to 50 gateways can be chosen as observers per epoch. if the gar contains 50 or fewer gateways, then every gateway is designated as an observer for that epoch. if there are greater than 50, then randomized selection shall be utilized.\n\nthe weighted selection criteria will consider the following for each gateway:\n\n * stake weight (sw): this factor considers how financially committed a gateway is to the network. it is the ratio of the amount of io tokens staked by the gateway relative to the network minimum and is expressed as sw = gateway stake / minimum stake.\n\n * tenure weight (tw): this factor considers how long a gateway has been part of the network, with a maximum value capped at 4. it is calculated as tw = gateway network tenure / 6 block-months. this means that the maximum value is achieved after 2 block-years of participation in the network.\n\n * gateway reward ratio weight (grrw): this factor is a proxy for a gateway’s performance at resolving arns names. the weight represents the ratio of epochs in which a gateway received rewards for correctly resolving names relative to their total time on the network.\n\n * observer reward ratio weight (orrw): this factor is a proxy for a gateway’s performance at fulfilling observation duties. the weight reflects the ratio of epochs in which a gateway, as an observer, successfully submitted observation reports relative to their total periods of service as an observer.\n\n\n# weight calculation and normalization\n\nfor each gateway, a composite weight (cw) is computed, combining the stake weight, tenure weight, gateway reward ratio weight, and observer reward ratio weight.\n\nthe formula used is: cw = sw x tw x grrw x orrw.\n\nthese weights are then normalized across the network to create a continuous range, allowing for proportional random selection based on the weighted scores. the normalized composite weight (n_cw) for each gateway indicates its likelihood of being chosen as an observer and is calculated by dividing the gateway's cw by the sum of all cws.\n\n\n# random selection process\n\nthe selection of observers is randomized within the framework of these weights. a set of unique random numbers is generated within the total range of normalized weights. for each random number, the gateway whose normalized weight range encompasses this number is selected. this system ensures that while gateways with higher weights are more likely to be chosen, all gateways maintain a non-zero chance of selection, preserving both fairness and meritocracy in the observer assignment process.\n\n\n# performance evaluation\n\nconsider the following classifications:\n\n * functional or passed gateways: are gateways that meet or surpass the network’s performance and quality standards.\n\n * deficient or failed gateways: are gateways that fall short of the network's performance expectations.\n\n * functional or submitted observers: are selected observers who diligently perform their duties and submit observation reports and contract interactions.\n\n * deficient or failed observers: are selected observers who do not fulfill their duty of submitting observation reports and contract interactions.\n\nat the end of an epoch, the smart contract will assess the results from the observers during a “tallying period” and determine a pass / fail score for each gateway:\n\n * if greater than or equal to 50% of submitted observer contract interactions indicate a pass score, then that gateway is considered functional and eligible for gateway rewards.\n\n * else, if greater than 50% of submitted observer contract interactions indicate a fail score, then that gateway is considered deficient and ineligible for gateway rewards.\n\nthese results will determine how reward distributions are made for that epoch. rewards shall be distributed after the epoch’s tallying period is complete.\n\n\n# reward distribution\n\neach epoch, a defined portion of the protocol balance (e.g., 0.05%) is earmarked for distribution as rewards. from this allocation, two distinct reward categories are derived:\n\n 1. base gateway reward: this is the portion of the reward allocated to each functional gateway within the network and is calculated as:\n \n [epoch reward allocation x 90% / total gateways in the network]\n\n 2. base observer reward: observers, due to their additional responsibilities, have a separate reward calculated as:\n \n [epoch reward allocation x 10% / total selected observers for the epoch]\n\n\n# distribution based on performance\n\nthe reward distribution is contingent on the performance classifications derived from the performance evaluation:\n\n * functional gateways: gateways that meet the performance criteria receive the base gateway reward.\n\n * deficient gateways: gateways falling short in performance do not receive any gateway rewards.\n\n * functional observers: observers that fulfilled their duty receive the base observer reward.\n\n * deficient observers: observers failing to meet their responsibilities do not receive observer rewards. furthermore, if they are also functional gateways, their gateway reward is reduced by 25% for that epoch as a consequence for not performing their observation duty.\n\n\n# undistributed rewards\n\nin cases where rewards are not distributed, either due to the inactivity or deficiency of gateways or observers, the allocated tokens shall remain in the protocol balance and carry forward to the next epoch. this mechanism is in place to discourage observers from frivolously marking their peers as offline in hopes of attaining a higher portion of the reward pool.\n\n\n# handling inactive gateways\n\nto maintain network efficiency and reduce contract state bloat, gateways that are consistently offline, specifically for thirty (30) consecutive epochs, and thus fail to receive rewards, will be automatically removed from the gateway active registry (gar) as well as have their staked io tokens unlocked and returned to the gateway operator.\n\n\n# observer report details\n\neach observer shall assess the performance of the selected arns names (across all ar.io gateways) and summarize those findings in a report which details the following:\n\n\n# general information\n\n * the observer's arweave address.\n * the starting block height of the epoch.\n * the block height at which the report was generated.\n\n\n# overall gateway operator assessment\n\n * gateway fqdn.\n * the arweave address that the observer expects to be the owner / operator of the gateway.\n * the arweave address that the observed gateway actually reports.\n * a final “pass or fail” rollup determination for each observed gateway.\n * failure reason (if applicable).\n\n\n# arns assessments\n\n * observed arns name (for all prescribed and chosen names).\n * the block height at which the name was assessed.\n * the expected status code.\n * the resolved status code.\n * the transaction id that the observer expects the associated name to resolve to.\n * the transaction id that the gateway actually resolves to.\n * the data hash that the observer expects the associated name to resolve to.\n * the data hash that the gateway actually resolves to.\n * the “pass or fail” score associated with the observed name, at the observer’s discretion.\n * failure reason (if applicable).\n * timing / performance information associated with the name resolution such as time to first byte and total duration.\n\nthe above is repeated for the entire name pool and across each gateway in the gar.\n\n\n# example observation report\n\nhttps://arweave.net/gg1ycfc7wqxkvq1qd1ltep2oambs4vzrpfdmeelyjdi\n\n\n# viewing observation reports\n\nyou can easily view an observation report in a human readable format through your terminal with the following command:\n\ncurl -l https://arweave.net/ | zcat | jq .\n\n\nbe sure to replace with the txid of the report you want to view.\n\n\n# example\n\ncurl -l https://arweave.net/h3zdmodkpog0u95rejbeq6gunww_cevsctuqvqfsbxk | zcat | jq .\n",charsets:{cjk:!0}},{title:"Bundler",frontmatter:{permalink:"/gateways/bundler"},regularPath:"/gateways/ar-io-node/bundler.html",relativePath:"gateways/ar-io-node/bundler.md",key:"v-d314c1cc",path:"/gateways/bundler/",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:14},{level:2,title:"Getting Started",slug:"getting-started",normalizedTitle:"getting started",charIndex:806},{level:3,title:"Environmental Variables",slug:"environmental-variables",normalizedTitle:"environmental variables",charIndex:1084},{level:3,title:"Managing Bundler Access",slug:"managing-bundler-access",normalizedTitle:"managing bundler access",charIndex:2529},{level:3,title:"Indexing",slug:"indexing",normalizedTitle:"indexing",charIndex:3895},{level:2,title:"Starting and Stopping the Bundler",slug:"starting-and-stopping-the-bundler",normalizedTitle:"starting and stopping the bundler",charIndex:5586},{level:3,title:"Starting",slug:"starting",normalizedTitle:"starting",charIndex:5586},{level:3,title:"Stopping",slug:"stopping",normalizedTitle:"stopping",charIndex:5599},{level:3,title:"logs",slug:"logs",normalizedTitle:"logs",charIndex:6424}],headersStr:"Overview Getting Started Environmental Variables Managing Bundler Access Indexing Starting and Stopping the Bundler Starting Stopping logs",content:"# Bundler\n\n\n# Overview\n\nA Turbo ANS-104 data item bundler can be run alongside an ar.io gateway. This allows gateways the ability to accept data items to be submit to the Arweave blockweave.\n\nThe bundler service can be easily run inside Docker in the same way that the gateway is. It utilizes a separate docker compose file for configuration and deployment, which also allows for the use of a separate file for environmental variables specific to the bundler service. Additionally, the separation allows operators to spin their bundler service up or down at any time without affecting their core gateway service. Despite the use of separate docker compose files, the bundler service shares a docker network with the ar.io gateway, and so is able to directly interact with the gateway service and data.\n\n\n# Getting Started\n\nNOTE: The bundler service relies on GraphQL indexing of recently bundled and uploaded data to manage its pipeline operations. The ar.io gateway should have its indexes synced up to Arweave's current block height before starting the bundler's service stack.\n\n\n# Environmental Variables\n\nEnvironmental variables must be provided for the bundler to function and integrate properly with an existing ar.io gateway. The gateway repository provides a .env.bundler.example file that can be renamed to .env.bundler and used as a starting point. It contains the following:\n\nBUNDLER_ARWEAVE_WALLET='Stringified JWK wallet. e.g: '{ \"n\": \"...\", ... }'\nBUNDLER_ARWEAVE_ADDRESS='Address for above wallet'\n\nAPP_NAME='ar.io bundler service'\n\n# Use localstack s3 bucket for shared data source between ar.io gateway and bundler\nAWS_S3_BUCKET=ar.io\nAWS_S3_PREFIX='data'\nAWS_ACCESS_KEY_ID='test'\nAWS_SECRET_ACCESS_KEY='test'\nAWS_REGION='us-east-1'\nAWS_ENDPOINT='http://localstack:4566'\n\n\n * BUNDLER_ARWEAVE_WALLET must be the entire jwk of an Arweave wallet's keyfile, stringified. All uploads of bundled data items to Arweave will be signed and paid for by this wallet, so it must maintain a balance of AR tokens sufficient to handle the uploads.\n * BUNDLER_ARWEAVE_ADDRESS must be the normalized public address for the provided Arweave wallet.\n * APP_NAME is a GraphQL tag that will be added to uploaded bundles.\n\nThe remaining lines in the .env.bundler.example file control settings that allow the bundler service to share data with the ar.io gateway. Data sharing of contiguous data between a bundler and a gateway allows the gateway to serve optimistically cached data without waiting for it to fully settle on chain.\n\n\n# Managing Bundler Access\n\nBy default, the bundler will only accept data items uploaded by data item signers whose normalized wallet addresses are in the ALLOW_LISTED_ADDRESSES list. This is an additional environmental variable that can be added to your .env.bundler file, and must be a comma separated list of normalized public wallet addresses for wallets that should be allowed to bundle and upload data through your gateway.\n\nALLOW_LISTED_ADDRESSES=,\n\n\nThe following permissioning configurations schemes are also possible:\n\nSCHEME ALLOW_LISTED_ADDRESSES SKIP_BALANCE_CHECKS ALLOW_LISTED_SIGNATURE_TYPES PAYMENT_SERVICE_BASE_URL\nALLOW SPECIFIC WALLETS Comma-separated normalized wallet addresses false EMPTY or supplied EMPTY\nALLOW SPECIFIC CHAINS EMPTY or supplied false arbundles sigtype int EMPTY\nALLOW ALL n/a true n/a n/a\nALLOW NONE EMPTY false EMPTY EMPTY\nALLOW PAYERS EMPTY or supplied false EMPTY or supplied Your payment service url\n\n\n# Indexing\n\nBundlers submit data to the Arweave network as an ANS-104 data item bundle. This means it is several transactions wrapped into one. A gateway will need to unbundle these transactions in order to index them. A gateway should include the following ANS-104 filters in order to unbundle and index transactions from a particular bundler:\n\nANS104_INDEX_FILTER={ \"always\": true }\nANS104_UNBUNDLE_FILTER={ \"attributes\": { \"owner_address\": \"$BUNDLER_ARWEAVE_ADDRESS\" } }\n\n\n$BUNDLER_ARWEAVE_ADDRESS should be replaced with the normalized public wallet address associated with the bundler.\n\nNOTE: The above filters must be placed in the .env file for the core gateway service, not the bundler.\n\nGateways handle data item indexing asynchronously. This means they establish a queue of items to index, and work on processing the queue in the background while the gateway continues with its normal operations. If a gateway has broad indexing filters, there can be some latency in indexing data items from the bundler while the gateway works through its queue.\n\n# Optimistic Indexing\n\nGateway operators control access to their optimistic data item indexing API via an admin key that must be supplied by all bundling clients in order for their requests to be accepted. This key should be made available in the environment configuration files for BOTH the core gateway, and the bundler, and should be provided as AR_IO_ADMIN_KEY:\n\nAR_IO_ADMIN_KEY=\"Admin password\"\n\n\nNOTE: If a gateway is started without providing the admin key, a random string will be generated to protect the gateway's admin endpoints. This can be reset by restarting the gateway with the admin key provided in the .env file.\n\n\n# Starting and Stopping the Bundler\n\n\n# Starting\n\nThe bundler service is designed to run in conjunction with an ar.io gateway, and so relies on the ar-io-network network created in Docker when the core gateway services are spun up. It is possible to spin up the bundler while the core services are down, but the network must exist in Docker.\n\nTo start the bundler, specify the env and docker-compose files being used in a docker compose up command:\n\ndocker compose --env-file ./.env.bundler --file docker-compose.bundler.yaml up -d\n\n\nThe -d flag runs the command in \"detached\" mode, so it will run in the background without requiring the terminal to remain active.\n\n\n# Stopping\n\nTo spin the bundler service down, specify the docker-compose file in a docker compose down command:\n\ndocker compose --file docker-compose.bundler.yaml down\n\n\n\n# logs\n\nWhile the bundler service is running in detached mode, logs can be checked by specifying the docker-compose file in a docker compose logs command:\n\ndocker compose --file docker-compose.bundler.yaml logs -f --tail=0\n\n\n * -f runs the command in \"follow\" mode, so the terminal will continue to watch and display new logs.\n * --tail= defines the number of logs to display that existed prior to running the command. 0 displays only new logs.",normalizedContent:"# bundler\n\n\n# overview\n\na turbo ans-104 data item bundler can be run alongside an ar.io gateway. this allows gateways the ability to accept data items to be submit to the arweave blockweave.\n\nthe bundler service can be easily run inside docker in the same way that the gateway is. it utilizes a separate docker compose file for configuration and deployment, which also allows for the use of a separate file for environmental variables specific to the bundler service. additionally, the separation allows operators to spin their bundler service up or down at any time without affecting their core gateway service. despite the use of separate docker compose files, the bundler service shares a docker network with the ar.io gateway, and so is able to directly interact with the gateway service and data.\n\n\n# getting started\n\nnote: the bundler service relies on graphql indexing of recently bundled and uploaded data to manage its pipeline operations. the ar.io gateway should have its indexes synced up to arweave's current block height before starting the bundler's service stack.\n\n\n# environmental variables\n\nenvironmental variables must be provided for the bundler to function and integrate properly with an existing ar.io gateway. the gateway repository provides a .env.bundler.example file that can be renamed to .env.bundler and used as a starting point. it contains the following:\n\nbundler_arweave_wallet='stringified jwk wallet. e.g: '{ \"n\": \"...\", ... }'\nbundler_arweave_address='address for above wallet'\n\napp_name='ar.io bundler service'\n\n# use localstack s3 bucket for shared data source between ar.io gateway and bundler\naws_s3_bucket=ar.io\naws_s3_prefix='data'\naws_access_key_id='test'\naws_secret_access_key='test'\naws_region='us-east-1'\naws_endpoint='http://localstack:4566'\n\n\n * bundler_arweave_wallet must be the entire jwk of an arweave wallet's keyfile, stringified. all uploads of bundled data items to arweave will be signed and paid for by this wallet, so it must maintain a balance of ar tokens sufficient to handle the uploads.\n * bundler_arweave_address must be the normalized public address for the provided arweave wallet.\n * app_name is a graphql tag that will be added to uploaded bundles.\n\nthe remaining lines in the .env.bundler.example file control settings that allow the bundler service to share data with the ar.io gateway. data sharing of contiguous data between a bundler and a gateway allows the gateway to serve optimistically cached data without waiting for it to fully settle on chain.\n\n\n# managing bundler access\n\nby default, the bundler will only accept data items uploaded by data item signers whose normalized wallet addresses are in the allow_listed_addresses list. this is an additional environmental variable that can be added to your .env.bundler file, and must be a comma separated list of normalized public wallet addresses for wallets that should be allowed to bundle and upload data through your gateway.\n\nallow_listed_addresses=,\n\n\nthe following permissioning configurations schemes are also possible:\n\nscheme allow_listed_addresses skip_balance_checks allow_listed_signature_types payment_service_base_url\nallow specific wallets comma-separated normalized wallet addresses false empty or supplied empty\nallow specific chains empty or supplied false arbundles sigtype int empty\nallow all n/a true n/a n/a\nallow none empty false empty empty\nallow payers empty or supplied false empty or supplied your payment service url\n\n\n# indexing\n\nbundlers submit data to the arweave network as an ans-104 data item bundle. this means it is several transactions wrapped into one. a gateway will need to unbundle these transactions in order to index them. a gateway should include the following ans-104 filters in order to unbundle and index transactions from a particular bundler:\n\nans104_index_filter={ \"always\": true }\nans104_unbundle_filter={ \"attributes\": { \"owner_address\": \"$bundler_arweave_address\" } }\n\n\n$bundler_arweave_address should be replaced with the normalized public wallet address associated with the bundler.\n\nnote: the above filters must be placed in the .env file for the core gateway service, not the bundler.\n\ngateways handle data item indexing asynchronously. this means they establish a queue of items to index, and work on processing the queue in the background while the gateway continues with its normal operations. if a gateway has broad indexing filters, there can be some latency in indexing data items from the bundler while the gateway works through its queue.\n\n# optimistic indexing\n\ngateway operators control access to their optimistic data item indexing api via an admin key that must be supplied by all bundling clients in order for their requests to be accepted. this key should be made available in the environment configuration files for both the core gateway, and the bundler, and should be provided as ar_io_admin_key:\n\nar_io_admin_key=\"admin password\"\n\n\nnote: if a gateway is started without providing the admin key, a random string will be generated to protect the gateway's admin endpoints. this can be reset by restarting the gateway with the admin key provided in the .env file.\n\n\n# starting and stopping the bundler\n\n\n# starting\n\nthe bundler service is designed to run in conjunction with an ar.io gateway, and so relies on the ar-io-network network created in docker when the core gateway services are spun up. it is possible to spin up the bundler while the core services are down, but the network must exist in docker.\n\nto start the bundler, specify the env and docker-compose files being used in a docker compose up command:\n\ndocker compose --env-file ./.env.bundler --file docker-compose.bundler.yaml up -d\n\n\nthe -d flag runs the command in \"detached\" mode, so it will run in the background without requiring the terminal to remain active.\n\n\n# stopping\n\nto spin the bundler service down, specify the docker-compose file in a docker compose down command:\n\ndocker compose --file docker-compose.bundler.yaml down\n\n\n\n# logs\n\nwhile the bundler service is running in detached mode, logs can be checked by specifying the docker-compose file in a docker compose logs command:\n\ndocker compose --file docker-compose.bundler.yaml logs -f --tail=0\n\n\n * -f runs the command in \"follow\" mode, so the terminal will continue to watch and display new logs.\n * --tail= defines the number of logs to display that existed prior to running the command. 0 displays only new logs.",charsets:{}},{title:"Delegated Staking Settings",frontmatter:{permalink:"/gateways/delegated-staking"},regularPath:"/gateways/ar-io-node/delegated-staking.html",relativePath:"gateways/ar-io-node/delegated-staking.md",key:"v-3f2c877a",path:"/gateways/delegated-staking/",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:33}],headersStr:"Overview",content:"# Delegated Staking Settings\n\n\n# Overview\n\nGateway operators can choose to allow other people to stake tokens on their gateway. This is called “delegated staking”, and it increases the number of tokens staked for a given gateway. The additionally staked tokens result in a greater stakeWeight for the gateway - increasing it’s likelihood chosen as an observer and potentially receive additional rewards for a given epoch (assuming that the gateway’s observer is working properly). To incentivize this, you can set a portion of your gateway and observer rewards to be given to the people who stake on your gateway.\n\n--\x3e",normalizedContent:"# delegated staking settings\n\n\n# overview\n\ngateway operators can choose to allow other people to stake tokens on their gateway. this is called “delegated staking”, and it increases the number of tokens staked for a given gateway. the additionally staked tokens result in a greater stakeweight for the gateway - increasing it’s likelihood chosen as an observer and potentially receive additional rewards for a given epoch (assuming that the gateway’s observer is working properly). to incentivize this, you can set a portion of your gateway and observer rewards to be given to the people who stake on your gateway.\n\n--\x3e",charsets:{}},{title:"Farcaster Frames",frontmatter:{permalink:"/experimental/frames"},regularPath:"/gateways/ar-io-node/experimental/frames.html",relativePath:"gateways/ar-io-node/experimental/frames.md",key:"v-b292638c",path:"/experimental/frames/",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:23},{level:2,title:"Experimental Gateway Support",slug:"experimental-gateway-support",normalizedTitle:"experimental gateway support",charIndex:598},{level:2,title:"Using Frames",slug:"using-frames",normalizedTitle:"using frames",charIndex:1056},{level:2,title:"Example",slug:"example",normalizedTitle:"example",charIndex:1546}],headersStr:"Overview Experimental Gateway Support Using Frames Example",content:'# Farcaster Frames\n\n\n# Overview\n\nFrames by Farcaster is a standard for posts, or "casts", that allows them to be interactive and easily authenticated self contained apps. Because the standard relies on HTML Meta tags, they can easily be integrated into dApps hosted permanently on Arweave. Until recently, the full capabilities of Frames hosted on Arweave were not accessible through ar.io gateways. This is because a specific type of interaction between the frame and the hosting server, a POST, is needed to facilitate interactivity, and ar.io gateways did not support this interaction type.\n\n\n# Experimental Gateway Support\n\nWith Release 9 of the ar.io gateways, a new experimental endpoint was added that supports the POST requests needed by frames. The /local endpoint on a gateway is used to facilitate experimental new features, as well as features which may be specific to an individual gateway. Operators and users should be fully aware that all endpoints stemming from /local are experimental, and may not always perform exactly as expected.\n\n\n# Using Frames\n\nThe full path for accessing a frame hosted on Arweave is https:///local/farcaster/frame/ where represents any ar.io gateway using release 9 or higher, and represents the txId of the frame on Arweave. Since frames require full, absolute url paths, you will need to choose specific, supported gateway when you are embedding the frame in your cast.\n\nBeyond that, simply embed the url for a frame in a cast and farcaster will be able to render it.\n\n\n# Example\n\nArweave community member K, who is a pioneer in permaweb frames, created the below frame to demonstrate how permaweb frames can be interactive when embedded from ar.io gateways.\n\nThe ID for the frame he uploaded to Arweave is JFfYkpW5--I5UOxnJTYHhY9-F8X6WrvDsXQv8jYr0WE. Using this, He made a Farcaster cast with the embedded url https://erl5reuvxh56eokq5rtsknqhqwhx4f6f7jnlxq5roqx7enrl2fqq.ar-io.dev/local/farcaster/frame/JFfYkpW5--I5UOxnJTYHhY9-F8X6WrvDsXQv8jYr0WE/. This full url includes the sandbox prefix generated by an ar.io gateway when serving content.\n\nWhen embedding this full url in a cast, farcaster will render the content into a frame:\n\nView the original post here to experience the interactivity first hand.',normalizedContent:'# farcaster frames\n\n\n# overview\n\nframes by farcaster is a standard for posts, or "casts", that allows them to be interactive and easily authenticated self contained apps. because the standard relies on html meta tags, they can easily be integrated into dapps hosted permanently on arweave. until recently, the full capabilities of frames hosted on arweave were not accessible through ar.io gateways. this is because a specific type of interaction between the frame and the hosting server, a post, is needed to facilitate interactivity, and ar.io gateways did not support this interaction type.\n\n\n# experimental gateway support\n\nwith release 9 of the ar.io gateways, a new experimental endpoint was added that supports the post requests needed by frames. the /local endpoint on a gateway is used to facilitate experimental new features, as well as features which may be specific to an individual gateway. operators and users should be fully aware that all endpoints stemming from /local are experimental, and may not always perform exactly as expected.\n\n\n# using frames\n\nthe full path for accessing a frame hosted on arweave is https:///local/farcaster/frame/ where represents any ar.io gateway using release 9 or higher, and represents the txid of the frame on arweave. since frames require full, absolute url paths, you will need to choose specific, supported gateway when you are embedding the frame in your cast.\n\nbeyond that, simply embed the url for a frame in a cast and farcaster will be able to render it.\n\n\n# example\n\narweave community member k, who is a pioneer in permaweb frames, created the below frame to demonstrate how permaweb frames can be interactive when embedded from ar.io gateways.\n\nthe id for the frame he uploaded to arweave is jffykpw5--i5uoxnjtyhhy9-f8x6wrvdsxqv8jyr0we. using this, he made a farcaster cast with the embedded url https://erl5reuvxh56eokq5rtsknqhqwhx4f6f7jnlxq5roqx7enrl2fqq.ar-io.dev/local/farcaster/frame/jffykpw5--i5uoxnjtyhhy9-f8x6wrvdsxqv8jyr0we/. this full url includes the sandbox prefix generated by an ar.io gateway when serving content.\n\nwhen embedding this full url in a cast, farcaster will render the content into a frame:\n\nview the original post here to experience the interactivity first hand.',charsets:{}},{title:"Environmental Variables",frontmatter:{},regularPath:"/gateways/ar-io-node/env.html",relativePath:"gateways/ar-io-node/env.md",key:"v-2fa5878c",path:"/gateways/ar-io-node/env.html",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:30},{level:2,title:"Variables",slug:"variables",normalizedTitle:"variables",charIndex:16}],headersStr:"Overview Variables",content:'# Environmental Variables\n\n\n# Overview\n\nThe AR.IO Gateway allows configuration customization through environmental variables. These variables dictate the gateway\'s behavior, from block synchronization settings to log formatting. Detailed below is a table enumerating all available environmental variables, their respective types, default values, and a brief description. Note that certain variables, such as SANDBOX_PROTOCOL, rely on others (e.g., ARNS_ROOT_HOST) to function effectively. Ensure proper understanding of these dependencies when configuring.\n\n\n# Variables\n\nENV NAME TYPE DEFAULT VALUE DESCRIPTION\nSTART_HEIGHT Number or "Infinity" 0 Starting block height for node synchronization (0 = start\n from genesis block)\nSTOP_HEIGHT Number or "Infinity" "Infinity" Stop block height for node synchronization (Infinity = keep\n syncing until stopped)\nTRUSTED_NODE_URL String "https://arweave.net" Arweave node to use for fetching data\nTRUSTED_GATEWAY_URL String "https://arweave.net" Arweave node to use for proxying reqeusts\nTRUSTED_ARNS_GATEWAY_URL String https://NAME.arweave.dev ArNS gateway\nINSTANCE_ID String "" Adds an "INSTANCE_ID" field to output logs\nLOG_FORMAT String "simple" Sets the format of output logs, accepts "simple" and "json"\nSKIP_CACHE Boolean false If true, skips the local cache and always fetches headers\n from the node\nPORT Number 4000 AR.IO node exposed port number\nSIMULATED_REQUEST_FAILURE_RATE Number 0 Number from 0 to 1, representing the probability of a\n request failing\nAR_IO_WALLET String "" Arweave wallet address used for staking and rewards\nADMIN_API_KEY String Generated API key used for admin API requests (if not set, it is\n generated and logged into the console)\nBACKFILL_BUNDLE_RECORDS Boolean false If true, AR.IO node will start indexing missing bundles\nFILTER_CHANGE_REPROCESS Boolean false If true, all indexed bundles will be reprocessed with the\n new filters (you can use this when you change the filters)\nANS104_UNBUNDLE_FILTER String {"never": true} Only bundles compliant with this filter will be unbundled\nANS104_INDEX_FILTER String {"never": true} Only bundles compliant with this filter will be indexed\nARNS_ROOT_HOST String undefined Domain name for ArNS host\nSANDBOX_PROTOCOL String undefined Protocol setting in process of creating sandbox domains in\n ArNS (ARNS_ROOT_HOST needs to be set for this env to have\n any effect) accepts "http" or "https"\nSTART_WRITERS Boolean true If true, start indexing blocks, tx, ANS104 bundles\nRUN_OBSERVER Boolean true If true, runs the Observer alongside the gateway to generate\n Network compliance reports\nMIN_RELEASE_NUMBER string "0"\nAR_IO_NODE_RELEASE string "0"\nOBSERVER_WALLET String undefined\n\nCHUNKS_DATA_PATH string "data/chunks"\nCONTIGUOUS_DATA_PATH string "data/contiguous"\nHEADERS_DATA_PATH string "data/headers"\nSQLITE_DATA_PATH string "data/sqlite"\nTEMP_DATA_PATH string "data/tmp"\nLMDB_DATA_PATH string "data/LMDB"\nCHAIN_CACHE_TYPE String "redis"\n\n\nREDIS_CACHE_URL String (URL) "redis://localhost:6379"\nREDIS_CACHE_TTL_SECONDS Number 28800\n\nENABLE_FS_HEADER_CACHE_CLEANUP Boolean false\nNODE_JS_MAX_OLD_SPACE_SIZE Number system default\n\nSUBMIT_CONTRACT_INTERACTIONS Boolean true\n\n\nREDIS_MAX_MEMORY String 256mb\nREDIS_EXTRA_FLAGS String --save "" --appendonly no\nWEBHOOK_TARGET_SERVERS String undefined\nWEBHOOK_INDEX_FILTER String {"never": true}\n\nWEBHOOK_BLOCK_FILTER String {"never": true}\nCONTIGUOUS_DATA_CACHE_CLEANUP_THRESHOLD Number undefined\n\nRUN_RESOLVER Boolean false\n\nTRUSTED_ARNS_RESOLVER_TYPE String gateway\n\n\nTRUSTED_ARNS_RESOLVER_URL String https:__NAME__.arweave.dev\n\nENABLE_MEMPOOL_WATCHER Boolean false\n\nMEMPOOL_POLLING_INTERVAL_MS Number 30000',normalizedContent:'# environmental variables\n\n\n# overview\n\nthe ar.io gateway allows configuration customization through environmental variables. these variables dictate the gateway\'s behavior, from block synchronization settings to log formatting. detailed below is a table enumerating all available environmental variables, their respective types, default values, and a brief description. note that certain variables, such as sandbox_protocol, rely on others (e.g., arns_root_host) to function effectively. ensure proper understanding of these dependencies when configuring.\n\n\n# variables\n\nenv name type default value description\nstart_height number or "infinity" 0 starting block height for node synchronization (0 = start\n from genesis block)\nstop_height number or "infinity" "infinity" stop block height for node synchronization (infinity = keep\n syncing until stopped)\ntrusted_node_url string "https://arweave.net" arweave node to use for fetching data\ntrusted_gateway_url string "https://arweave.net" arweave node to use for proxying reqeusts\ntrusted_arns_gateway_url string https://name.arweave.dev arns gateway\ninstance_id string "" adds an "instance_id" field to output logs\nlog_format string "simple" sets the format of output logs, accepts "simple" and "json"\nskip_cache boolean false if true, skips the local cache and always fetches headers\n from the node\nport number 4000 ar.io node exposed port number\nsimulated_request_failure_rate number 0 number from 0 to 1, representing the probability of a\n request failing\nar_io_wallet string "" arweave wallet address used for staking and rewards\nadmin_api_key string generated api key used for admin api requests (if not set, it is\n generated and logged into the console)\nbackfill_bundle_records boolean false if true, ar.io node will start indexing missing bundles\nfilter_change_reprocess boolean false if true, all indexed bundles will be reprocessed with the\n new filters (you can use this when you change the filters)\nans104_unbundle_filter string {"never": true} only bundles compliant with this filter will be unbundled\nans104_index_filter string {"never": true} only bundles compliant with this filter will be indexed\narns_root_host string undefined domain name for arns host\nsandbox_protocol string undefined protocol setting in process of creating sandbox domains in\n arns (arns_root_host needs to be set for this env to have\n any effect) accepts "http" or "https"\nstart_writers boolean true if true, start indexing blocks, tx, ans104 bundles\nrun_observer boolean true if true, runs the observer alongside the gateway to generate\n network compliance reports\nmin_release_number string "0"\nar_io_node_release string "0"\nobserver_wallet string undefined\n\nchunks_data_path string "data/chunks"\ncontiguous_data_path string "data/contiguous"\nheaders_data_path string "data/headers"\nsqlite_data_path string "data/sqlite"\ntemp_data_path string "data/tmp"\nlmdb_data_path string "data/lmdb"\nchain_cache_type string "redis"\n\n\nredis_cache_url string (url) "redis://localhost:6379"\nredis_cache_ttl_seconds number 28800\n\nenable_fs_header_cache_cleanup boolean false\nnode_js_max_old_space_size number system default\n\nsubmit_contract_interactions boolean true\n\n\nredis_max_memory string 256mb\nredis_extra_flags string --save "" --appendonly no\nwebhook_target_servers string undefined\nwebhook_index_filter string {"never": true}\n\nwebhook_block_filter string {"never": true}\ncontiguous_data_cache_cleanup_threshold number undefined\n\nrun_resolver boolean false\n\ntrusted_arns_resolver_type string gateway\n\n\ntrusted_arns_resolver_url string https:__name__.arweave.dev\n\nenable_mempool_watcher boolean false\n\nmempool_polling_interval_ms number 30000',charsets:{}},{title:"Linux Installation Instructions",frontmatter:{prev:!1,next:"/gateways/ar-io-node/testnet.html",tags:["domain","url","setup","start","help","how to","ubuntu","testnet"],permalink:"/gateways/ar-io-node/linux-setup/"},regularPath:"/gateways/ar-io-node/linux-setup.html",relativePath:"gateways/ar-io-node/linux-setup.md",key:"v-e0d70ecc",path:"/gateways/ar-io-node/linux-setup/",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:38},{level:2,title:"System Requirements",slug:"system-requirements",normalizedTitle:"system requirements",charIndex:482},{level:3,title:"Minimum requirements",slug:"minimum-requirements",normalizedTitle:"minimum requirements",charIndex:683},{level:3,title:"Recommended",slug:"recommended",normalizedTitle:"recommended",charIndex:1145},{level:2,title:"Install Packages",slug:"install-packages",normalizedTitle:"install packages",charIndex:1247},{level:3,title:"Required packages",slug:"required-packages",normalizedTitle:"required packages",charIndex:2030},{level:3,title:"Suggested packages",slug:"suggested-packages",normalizedTitle:"suggested packages",charIndex:2716},{level:2,title:"Install the Node",slug:"install-the-node",normalizedTitle:"install the node",charIndex:3694},{level:2,title:"Set up Networking",slug:"set-up-networking",normalizedTitle:"set up networking",charIndex:7694}],headersStr:"Overview System Requirements Minimum requirements Recommended Install Packages Required packages Suggested packages Install the Node Set up Networking",content:"# Linux Installation Instructions\n\n\n# Overview\n\nThe following instructions will guide you through the process of installing the AR.IO node on a Linux machine, specifically Ubuntu 22.04.3 desktop on a home computer. Actual steps may differ slightly on different versions or distributions. This guide will cover how to set up your node, point a domain name to your home network, and create an nginx server for routing traffic to your node. No prior coding experience is required.\n\n\n# System Requirements\n\nPlease note, The AR.IO Node software is still in development and testing, all system requirements are subject to change.\n\nExternal storage devices should be formatted as ext4.\n\n\n# Minimum requirements\n\nThe hardware specifications listed below represent the minimum system requirements at which the AR.IO Node has been tested. While your Node may still operate on systems with lesser specifications, please note that AR.IO cannot guarantee performance or functionality under those conditions. Use below-minimum hardware at your own risk.\n\n * 4 core CPU\n * 4 GB Ram\n * 500 GB storage (SSD recommended)\n * Stable 50 Mbps internet connection\n\n\n# Recommended\n\n * 12 core CPU\n * 32 GB Ram\n * 2 TB SSD storage\n * Stable 1 Gbps internet connection\n\n\n# Install Packages\n\nIf you would like to quickly install all required and suggested packages, you can run the following 2 commands in your terminal, and skip to installing the Node.\n\nsudo apt update -y && sudo apt upgrade -y && sudo apt install -y curl openssh-server docker-compose git certbot nginx sqlite3 build-essential && sudo systemctl enable ssh && curl -sSL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && echo \"deb https://dl.yarnpkg.com/debian/ stable main\" | sudo tee /etc/apt/sources.list.d/yarn.list && sudo apt-get update -y && sudo apt-get install -y yarn && curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash && source ~/.bashrc && sudo ufw allow 22 80 443 && sudo ufw enable\n\n\nnvm install 20.11.1 && nvm use 20.11.1\n\n\n\n# Required packages\n\n 1. Update your software:\n \n sudo apt update\n sudo apt upgrade\n \n\n 2. Enable your firewall and open necessary ports:\n \n sudo ufw enable\n \n # Optional: If using SSH, allow port 22\n sudo ufw allow 22\n \n # Allow ports 80 and 443 for HTTP and HTTPS\n sudo ufw allow 80\n sudo ufw allow 443\n \n\n 3. Install nginx:\n \n sudo apt install nginx -y\n \n\n 4. Install git:\n \n sudo apt install git -y\n \n\n 5. Install Docker:\n \n sudo apt install docker-compose -y\n \n \n * Test Docker installation:\n \n sudo docker run hello-world\n \n\n 6. Install Certbot:\n \n sudo apt install certbot -y\n \n\n\n# Suggested packages\n\nThese packages are not required to run a node in its basic form. However, they will become necessary for more advanced usage or customization.\n\n 7. Install ssh (optional, for remote access to your Linux machine):\n \n sudo apt install openssh-server -y\n sudo systemctl enable ssh\n \n\n 8. Install Yarn:\n \n curl -sSL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -\n \n echo \"deb https://dl.yarnpkg.com/debian/ stable main\" | sudo tee /etc/apt/sources.list.d/yarn.list\n \n sudo apt-get update -y\n \n sudo apt-get install yarn -y\n \n\n 9. Install NVM (Node Version Manager):\n \n curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash\n source ~/.bashrc\n \n\n 10. Install Node.js:\n \n nvm install 20.11.1\n \n\n 11. Install build tools\n \n sudo apt install build-essential\n \n\n 12. Install SQLite:\n \n sudo apt install sqlite3 -y\n \n\n\n# Install the Node\n\n * Navigate to the desired installation location:\n \n * NOTE: Your database of Arweave Transaction Headers will be created in the project directory, not Docker. So, if you are using an external hard drive to turn an old machine into a node, install the node directly to that external drive.\n\n * Clone the ar-io-node repository and navigate into it:\n \n git clone -b main https://github.com/ar-io/ar-io-node\n cd ar-io-node\n \n\n * Create an environmental variables file:\n \n nano .env\n \n \n Paste the following content into the new file, replacing with the domain address you are using to access the node, and with the public address of your Arweave wallet, save, and exit:\n \n \n GRAPHQL_HOST=arweave.net\n GRAPHQL_PORT=443\n START_HEIGHT=0\n RUN_OBSERVER=true\n ARNS_ROOT_HOST=\n AR_IO_WALLET=\n OBSERVER_WALLET=\n \n \n * The GRAPHQL values set the proxy for GQL queries to arweave.net, You may use any available gateway that supports GQL queries. If omitted, your node can support GQL queries on locally indexed transactions, but only L1 transactions are indexed by default.\n * START_HEIGHT is an optional line. It sets the block number where your node will start downloading and indexing transactions headers. Omitting this line will begin indexing at block 0.\n * RUN_OBSERVER turns on the Observer to generate Network Compliance Reports. This is required for full participation in the AR.IO Network. Set to false to run your gateway without Observer.\n * ARNS_ROOT_HOST sets the starting point for resolving ARNS names, which are accessed as a subdomain of a gateway. It should be set to the url you are pointing to your node, excluding any protocol prefix. For example, use node-ar.io and not https://node-ar.io. If you are using a subdomain to access your node and do not set this value, the node will not understand incoming requests.\n * AR_IO_WALLET is optional, and sets the wallet you want associated with your Gateway. An associated wallet is required to join the AR.IO network.\n * OBSERVER_WALLET is the public address of the wallet used to sign Observer transactions. This is required for Observer to run, but may be omitted if you are running a gateway outside of the AR.IO network and do not plan to run Observer. You will need to supply the keyfile to this wallet in the next step.\n \n Advanced configuration options can be found at docs.ar.io\n\n * Supply Your Observer Wallet Keyfile:\n \n If you are running Observer, you need to provide a wallet keyfile in order to sign report upload transactions. The keyfile must be saved in the wallets directory in the root of the repository. Name the file .json, replacing \"\" with the public address of the wallet. This should match your OBSERVER_WALLET environmental variable.\n \n Learn more about creating Arweave wallets and obtaining keyfiles here\n\n * Start the Docker container:\n \n sudo docker-compose up -d\n \n \n * Explanation of flags:\n * up: Start the Docker containers.\n * -d: Run the containers as background processes (detached mode).\n \n NOTE: Effective with Release #3, it is no longer required to include the --build flag when starting your gateway. Docker will automatically build using the image specified in the docker-commpose.yaml file.\n \n To shut down your gateway, run the command:\n \n sudo docker-compose down\n \n\nTo ensure your node is running correctly, check the logs for errors:\n\nsudo docker-compose logs -f --tail=0\n\n\n * Explanation of flags:\n * -f: Follow the logs in real time.\n * --tail=0: Ignore all logs from before running the command.\n\nNOTE: Previous versions of these instructions advised checking a gateway's ability to fetch content using localhost. Subsequent security updates prevent this without first disabling ARNS_ROOT_HOST in your .env.\n\n\n# Set up Networking\n\nThe following guide assumes you are running your node on a local home computer.\n\n * Register a Domain Name: Choose a domain registrar (e.g., Namecheap) to register a domain name.\n\n * Point the Domain at Your Home Internet:\n \n * Obtain your public IP address by visiting https://www.whatsmyip.org/ or running:\n \n curl ifconfig.me\n \n \n * Create an A record with your registrar for your domain and wildcard subdomains, using your public IP address. For example, if your domain is \"ar.io,\" create a record for \"ar.io\" and \"*.ar.io.\"\n\n * Set up Port Forwarding:\n \n * Obtain the local IP address of the machine where the node is installed by running:\n \n ip addr show | grep -w inet | awk '{print $2}' | awk -F'/' '{print $1}'\n \n \n * If there are multiple lines of output, choose the one starting with 192 (usually).\n * Enter your router's IP address in the address bar of a browser (e.g., 192.168.0.1).\n * If you're unsure of your router's IP address, consult your router's documentation or contact your Internet Service Provider (ISP).\n * Navigate to the port forwarding settings in your router configuration.\n * The exact steps may vary depending on your router model. Consult your router's documentation or support for detailed steps.\n * Set up port forwarding rules to forward incoming traffic on ports 80 (HTTP) and 443 (HTTPS) to the same ports on the machine running your node. You may also forward port 22 if you want to enable SSH access to your node from outside your home network.\n\n * Create SSL (HTTPS) Certificates for Your Domain:\n \n sudo certbot certonly --manual --preferred-challenges dns --email -d .com -d '*..com'\n \n \n Follow the instructions to create the required TXT records for your domain in your chosen registrar. Use a DNS checker to verify the propagation of each record. This can take some time.\n \n IMPORTANT: Wild card subdomain (*..com) cannot auto renew without obtaining an API key from your domain registrar. Not all registrars offer this. Certbot certificates expire every 90 days. Be sure to consult with your chosen registrar to see if they offer an API for this purpose, or run the above command again to renew your certificates. You will receive an email warning at the address you provided to remind you when it is time to renew.\n\n * Configure nginx: nginx is a free and open-source web server and reverse proxy server. It will handle incoming traffic, provide SSL certificates, and redirect the traffic to your node.\n \n * Open the default configuration file:\n \n sudo nano /etc/nginx/sites-available/default\n \n \n * Replace the file's contents with the following configuration (replace \"\" when necessary):\n \n # Force redirects from HTTP to HTTPS\n server {\n listen 80;\n listen [::]:80;\n server_name .com *..com;\n \n location / {\n return 301 https://$host$request_uri;\n }\n }\n \n # Forward traffic to your node and provide SSL certificates\n server {\n listen 443 ssl;\n listen [::]:443 ssl;\n server_name .com *..com;\n \n ssl_certificate /etc/letsencrypt/live/.com/fullchain.pem;\n ssl_certificate_key /etc/letsencrypt/live/.com/privkey.pem;\n \n location / {\n proxy_pass http://localhost:3000;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_http_version 1.1;\n }\n }\n \n \n * Save and exit nano.\n \n * Test the configuration:\n \n sudo nginx -t\n \n \n * If there are no errors, restart nginx:\n \n sudo service nginx restart\n \n\nYour node should now be running and connected to the internet. Test it by entering https:///3lyxgbgEvqNSvJrTX2J7CfRychUD5KClFhhVLyTPNCQ in your browser.\n\nNote: If you encounter any issues during the installation process, please seek assistance from the AR.IO community.",normalizedContent:"# linux installation instructions\n\n\n# overview\n\nthe following instructions will guide you through the process of installing the ar.io node on a linux machine, specifically ubuntu 22.04.3 desktop on a home computer. actual steps may differ slightly on different versions or distributions. this guide will cover how to set up your node, point a domain name to your home network, and create an nginx server for routing traffic to your node. no prior coding experience is required.\n\n\n# system requirements\n\nplease note, the ar.io node software is still in development and testing, all system requirements are subject to change.\n\nexternal storage devices should be formatted as ext4.\n\n\n# minimum requirements\n\nthe hardware specifications listed below represent the minimum system requirements at which the ar.io node has been tested. while your node may still operate on systems with lesser specifications, please note that ar.io cannot guarantee performance or functionality under those conditions. use below-minimum hardware at your own risk.\n\n * 4 core cpu\n * 4 gb ram\n * 500 gb storage (ssd recommended)\n * stable 50 mbps internet connection\n\n\n# recommended\n\n * 12 core cpu\n * 32 gb ram\n * 2 tb ssd storage\n * stable 1 gbps internet connection\n\n\n# install packages\n\nif you would like to quickly install all required and suggested packages, you can run the following 2 commands in your terminal, and skip to installing the node.\n\nsudo apt update -y && sudo apt upgrade -y && sudo apt install -y curl openssh-server docker-compose git certbot nginx sqlite3 build-essential && sudo systemctl enable ssh && curl -ssl https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && echo \"deb https://dl.yarnpkg.com/debian/ stable main\" | sudo tee /etc/apt/sources.list.d/yarn.list && sudo apt-get update -y && sudo apt-get install -y yarn && curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash && source ~/.bashrc && sudo ufw allow 22 80 443 && sudo ufw enable\n\n\nnvm install 20.11.1 && nvm use 20.11.1\n\n\n\n# required packages\n\n 1. update your software:\n \n sudo apt update\n sudo apt upgrade\n \n\n 2. enable your firewall and open necessary ports:\n \n sudo ufw enable\n \n # optional: if using ssh, allow port 22\n sudo ufw allow 22\n \n # allow ports 80 and 443 for http and https\n sudo ufw allow 80\n sudo ufw allow 443\n \n\n 3. install nginx:\n \n sudo apt install nginx -y\n \n\n 4. install git:\n \n sudo apt install git -y\n \n\n 5. install docker:\n \n sudo apt install docker-compose -y\n \n \n * test docker installation:\n \n sudo docker run hello-world\n \n\n 6. install certbot:\n \n sudo apt install certbot -y\n \n\n\n# suggested packages\n\nthese packages are not required to run a node in its basic form. however, they will become necessary for more advanced usage or customization.\n\n 7. install ssh (optional, for remote access to your linux machine):\n \n sudo apt install openssh-server -y\n sudo systemctl enable ssh\n \n\n 8. install yarn:\n \n curl -ssl https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -\n \n echo \"deb https://dl.yarnpkg.com/debian/ stable main\" | sudo tee /etc/apt/sources.list.d/yarn.list\n \n sudo apt-get update -y\n \n sudo apt-get install yarn -y\n \n\n 9. install nvm (node version manager):\n \n curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash\n source ~/.bashrc\n \n\n 10. install node.js:\n \n nvm install 20.11.1\n \n\n 11. install build tools\n \n sudo apt install build-essential\n \n\n 12. install sqlite:\n \n sudo apt install sqlite3 -y\n \n\n\n# install the node\n\n * navigate to the desired installation location:\n \n * note: your database of arweave transaction headers will be created in the project directory, not docker. so, if you are using an external hard drive to turn an old machine into a node, install the node directly to that external drive.\n\n * clone the ar-io-node repository and navigate into it:\n \n git clone -b main https://github.com/ar-io/ar-io-node\n cd ar-io-node\n \n\n * create an environmental variables file:\n \n nano .env\n \n \n paste the following content into the new file, replacing with the domain address you are using to access the node, and with the public address of your arweave wallet, save, and exit:\n \n \n graphql_host=arweave.net\n graphql_port=443\n start_height=0\n run_observer=true\n arns_root_host=\n ar_io_wallet=\n observer_wallet=\n \n \n * the graphql values set the proxy for gql queries to arweave.net, you may use any available gateway that supports gql queries. if omitted, your node can support gql queries on locally indexed transactions, but only l1 transactions are indexed by default.\n * start_height is an optional line. it sets the block number where your node will start downloading and indexing transactions headers. omitting this line will begin indexing at block 0.\n * run_observer turns on the observer to generate network compliance reports. this is required for full participation in the ar.io network. set to false to run your gateway without observer.\n * arns_root_host sets the starting point for resolving arns names, which are accessed as a subdomain of a gateway. it should be set to the url you are pointing to your node, excluding any protocol prefix. for example, use node-ar.io and not https://node-ar.io. if you are using a subdomain to access your node and do not set this value, the node will not understand incoming requests.\n * ar_io_wallet is optional, and sets the wallet you want associated with your gateway. an associated wallet is required to join the ar.io network.\n * observer_wallet is the public address of the wallet used to sign observer transactions. this is required for observer to run, but may be omitted if you are running a gateway outside of the ar.io network and do not plan to run observer. you will need to supply the keyfile to this wallet in the next step.\n \n advanced configuration options can be found at docs.ar.io\n\n * supply your observer wallet keyfile:\n \n if you are running observer, you need to provide a wallet keyfile in order to sign report upload transactions. the keyfile must be saved in the wallets directory in the root of the repository. name the file .json, replacing \"\" with the public address of the wallet. this should match your observer_wallet environmental variable.\n \n learn more about creating arweave wallets and obtaining keyfiles here\n\n * start the docker container:\n \n sudo docker-compose up -d\n \n \n * explanation of flags:\n * up: start the docker containers.\n * -d: run the containers as background processes (detached mode).\n \n note: effective with release #3, it is no longer required to include the --build flag when starting your gateway. docker will automatically build using the image specified in the docker-commpose.yaml file.\n \n to shut down your gateway, run the command:\n \n sudo docker-compose down\n \n\nto ensure your node is running correctly, check the logs for errors:\n\nsudo docker-compose logs -f --tail=0\n\n\n * explanation of flags:\n * -f: follow the logs in real time.\n * --tail=0: ignore all logs from before running the command.\n\nnote: previous versions of these instructions advised checking a gateway's ability to fetch content using localhost. subsequent security updates prevent this without first disabling arns_root_host in your .env.\n\n\n# set up networking\n\nthe following guide assumes you are running your node on a local home computer.\n\n * register a domain name: choose a domain registrar (e.g., namecheap) to register a domain name.\n\n * point the domain at your home internet:\n \n * obtain your public ip address by visiting https://www.whatsmyip.org/ or running:\n \n curl ifconfig.me\n \n \n * create an a record with your registrar for your domain and wildcard subdomains, using your public ip address. for example, if your domain is \"ar.io,\" create a record for \"ar.io\" and \"*.ar.io.\"\n\n * set up port forwarding:\n \n * obtain the local ip address of the machine where the node is installed by running:\n \n ip addr show | grep -w inet | awk '{print $2}' | awk -f'/' '{print $1}'\n \n \n * if there are multiple lines of output, choose the one starting with 192 (usually).\n * enter your router's ip address in the address bar of a browser (e.g., 192.168.0.1).\n * if you're unsure of your router's ip address, consult your router's documentation or contact your internet service provider (isp).\n * navigate to the port forwarding settings in your router configuration.\n * the exact steps may vary depending on your router model. consult your router's documentation or support for detailed steps.\n * set up port forwarding rules to forward incoming traffic on ports 80 (http) and 443 (https) to the same ports on the machine running your node. you may also forward port 22 if you want to enable ssh access to your node from outside your home network.\n\n * create ssl (https) certificates for your domain:\n \n sudo certbot certonly --manual --preferred-challenges dns --email -d .com -d '*..com'\n \n \n follow the instructions to create the required txt records for your domain in your chosen registrar. use a dns checker to verify the propagation of each record. this can take some time.\n \n important: wild card subdomain (*..com) cannot auto renew without obtaining an api key from your domain registrar. not all registrars offer this. certbot certificates expire every 90 days. be sure to consult with your chosen registrar to see if they offer an api for this purpose, or run the above command again to renew your certificates. you will receive an email warning at the address you provided to remind you when it is time to renew.\n\n * configure nginx: nginx is a free and open-source web server and reverse proxy server. it will handle incoming traffic, provide ssl certificates, and redirect the traffic to your node.\n \n * open the default configuration file:\n \n sudo nano /etc/nginx/sites-available/default\n \n \n * replace the file's contents with the following configuration (replace \"\" when necessary):\n \n # force redirects from http to https\n server {\n listen 80;\n listen [::]:80;\n server_name .com *..com;\n \n location / {\n return 301 https://$host$request_uri;\n }\n }\n \n # forward traffic to your node and provide ssl certificates\n server {\n listen 443 ssl;\n listen [::]:443 ssl;\n server_name .com *..com;\n \n ssl_certificate /etc/letsencrypt/live/.com/fullchain.pem;\n ssl_certificate_key /etc/letsencrypt/live/.com/privkey.pem;\n \n location / {\n proxy_pass http://localhost:3000;\n proxy_set_header host $host;\n proxy_set_header x-real-ip $remote_addr;\n proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;\n proxy_http_version 1.1;\n }\n }\n \n \n * save and exit nano.\n \n * test the configuration:\n \n sudo nginx -t\n \n \n * if there are no errors, restart nginx:\n \n sudo service nginx restart\n \n\nyour node should now be running and connected to the internet. test it by entering https:///3lyxgbgevqnsvjrtx2j7cfrychud5kclfhhvlytpncq in your browser.\n\nnote: if you encounter any issues during the installation process, please seek assistance from the ar.io community.",charsets:{cjk:!0}},{title:"Troubleshooting Observer",frontmatter:{permalink:"/troubleshooting-observer",next:!1},regularPath:"/gateways/ar-io-node/observer-troubleshooting.html",relativePath:"gateways/ar-io-node/observer-troubleshooting.md",key:"v-6e1e3488",path:"/troubleshooting-observer/",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:31},{level:2,title:"Observer not running and/or unable to connect",slug:"observer-not-running-and-or-unable-to-connect",normalizedTitle:"observer not running and/or unable to connect",charIndex:425},{level:3,title:"",slug:"",normalizedTitle:"",charIndex:0},{level:2,title:"Observer wallet has no AR",slug:"observer-wallet-has-no-ar",normalizedTitle:"observer wallet has no ar",charIndex:2360},{level:3,title:"",slug:"-2",normalizedTitle:"",charIndex:0},{level:2,title:"Observer wallet ... does not match the 'observerWallet' set on the gateway ...",slug:"observer-wallet-does-not-match-the-observerwallet-set-on-the-gateway",normalizedTitle:"observer wallet ... does not match the 'observerwallet' set on the gateway ...",charIndex:2751},{level:3,title:"",slug:"-3",normalizedTitle:"",charIndex:0},{level:2,title:"Uncertain - confirm your OBSERVER_WALLET is set in the .env file and corresponding wallet is located in wallets/.json...",slug:"uncertain-confirm-your-observer-wallet-is-set-in-the-env-file-and-corresponding-wallet-is-located-in-wallets-address-json",normalizedTitle:"uncertain - confirm your observer_wallet is set in the .env file and corresponding wallet is located in wallets/.json...",charIndex:null},{level:3,title:"",slug:"-4",normalizedTitle:"",charIndex:0}],headersStr:"Overview Observer not running and/or unable to connect Observer wallet has no AR Observer wallet ... does not match the 'observerWallet' set on the gateway ... Uncertain - confirm your OBSERVER_WALLET is set in the .env file and corresponding wallet is located in wallets/.json... ",content:'# Troubleshooting Observer\n\n\n# Overview\n\nar.io observer epoch distribution reports include a list of failed observers for the epoch, along with an accounting of the errors which caused the observer to fail. When possible, the error messages will give you a starting point to being the troubleshooting process. Below is a list of possible error messages, along with more detailed information on how to address the issues.\n\n\n# Observer not running and/or unable to connect\n\n\n#\n\nYour observer was not able to connect with the contract at all. The most likely causes for this are internet connection problems, or your observer not running.\n\nVerify your observer is running\n\nsudo docker ps\n\nYour output should look something like this:\n\n CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n 264637d3e24d ghcr.io/ar-io/ar-io-envoy:01952702b78be1e464b9d192e77b38a119bdc4ee "/docker-entrypoint.…" 2 days ago Up 2 days 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp, 0.0.0.0:9901->9901/tcp, :::9901->9901/tcp, 10000/tcp ar-io-node_envoy_1\n f42a4fbed8c5 ghcr.io/ar-io/ar-io-core:484bd31abb78709e09395f139ca57792bc6c3eb0 "/bin/sh docker-entr…" 2 days ago Up 2 days (healthy) 0.0.0.0:4000->4000/tcp, :::4000->4000/tcp ar-io-node_core_1\n dd2e0b64b0b4 redis:7 "docker-entrypoint.s…" 10 days ago Up 2 days 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp ar-io-node_redis_1\n ed98aba1c4f6 ghcr.io/ar-io/ar-io-observer:6449bcb6dda778fef68a94bd29343190524439db "/nodejs/bin/node ./…" 10 days ago Up 2 days (healthy) 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp ar-io-node_observer_1\n\n\nIf the line for observer does not say "up", then your observer is not running. You should restart your gateway, and then watch your observer logs to get a better idea of why your observer stopped:\n\nsudo docker-compose down\n\nsudo docker-compose up -d\n\nsudo docker-compose logs -f observer\n\n\n# Observer wallet has no AR\n\n\n#\n\nYour Observer Wallet does not have any AR tokens.\n\nYour observer wallet needs to be able to submit reports to the Arweave blockchain. To do this, it needs to have a small amount of AR tokens in order to pay for the submission. ar.io recommends depositing 1 AR token into your observer wallet to ensure that you remain funded throughout the entire testnet.\n\n\n# Observer wallet ... does not match the \'observerWallet\' set on the gateway ...\n\n\n#\n\nThe observer wallet set locally on your gateway does not match the observer wallet for your gateway in the ar.io network.\n\nCheck to make sure that you have OBSERVER_WALLET set in your .env file, and that the keyfile for your observer wallet is properly provided in the wallets directory in your gateway.\n\nYou will need to restart your gateway if you make any changes to the .env file or your observer wallet keyfile.\n\nThen check to make sure that the value for observerWallet on your gateway in the testnet contract matches that.\n\nThis video shows exactly what should be done to correct it if it does not.\n\n\n# Uncertain - confirm your OBSERVER_WALLET is set in the .env file and corresponding wallet is located in wallets/< address >.json...\n\n\n#\n\nThe cause for the error could not be reliably determined.\n\n"Uncertain" is the default value returned when evaluating a failed observer. It means that none of the above error messages perfectly matched the problems with your gateway.\n\nYou should first ensure that your observer wallet is set correctly locally, and then check your observer logs for any additional error messages.\n\nsudo docker-compose logs -f --tail=50 observer',normalizedContent:'# troubleshooting observer\n\n\n# overview\n\nar.io observer epoch distribution reports include a list of failed observers for the epoch, along with an accounting of the errors which caused the observer to fail. when possible, the error messages will give you a starting point to being the troubleshooting process. below is a list of possible error messages, along with more detailed information on how to address the issues.\n\n\n# observer not running and/or unable to connect\n\n\n#\n\nyour observer was not able to connect with the contract at all. the most likely causes for this are internet connection problems, or your observer not running.\n\nverify your observer is running\n\nsudo docker ps\n\nyour output should look something like this:\n\n container id image command created status ports names\n 264637d3e24d ghcr.io/ar-io/ar-io-envoy:01952702b78be1e464b9d192e77b38a119bdc4ee "/docker-entrypoint.…" 2 days ago up 2 days 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp, 0.0.0.0:9901->9901/tcp, :::9901->9901/tcp, 10000/tcp ar-io-node_envoy_1\n f42a4fbed8c5 ghcr.io/ar-io/ar-io-core:484bd31abb78709e09395f139ca57792bc6c3eb0 "/bin/sh docker-entr…" 2 days ago up 2 days (healthy) 0.0.0.0:4000->4000/tcp, :::4000->4000/tcp ar-io-node_core_1\n dd2e0b64b0b4 redis:7 "docker-entrypoint.s…" 10 days ago up 2 days 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp ar-io-node_redis_1\n ed98aba1c4f6 ghcr.io/ar-io/ar-io-observer:6449bcb6dda778fef68a94bd29343190524439db "/nodejs/bin/node ./…" 10 days ago up 2 days (healthy) 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp ar-io-node_observer_1\n\n\nif the line for observer does not say "up", then your observer is not running. you should restart your gateway, and then watch your observer logs to get a better idea of why your observer stopped:\n\nsudo docker-compose down\n\nsudo docker-compose up -d\n\nsudo docker-compose logs -f observer\n\n\n# observer wallet has no ar\n\n\n#\n\nyour observer wallet does not have any ar tokens.\n\nyour observer wallet needs to be able to submit reports to the arweave blockchain. to do this, it needs to have a small amount of ar tokens in order to pay for the submission. ar.io recommends depositing 1 ar token into your observer wallet to ensure that you remain funded throughout the entire testnet.\n\n\n# observer wallet ... does not match the \'observerwallet\' set on the gateway ...\n\n\n#\n\nthe observer wallet set locally on your gateway does not match the observer wallet for your gateway in the ar.io network.\n\ncheck to make sure that you have observer_wallet set in your .env file, and that the keyfile for your observer wallet is properly provided in the wallets directory in your gateway.\n\nyou will need to restart your gateway if you make any changes to the .env file or your observer wallet keyfile.\n\nthen check to make sure that the value for observerwallet on your gateway in the testnet contract matches that.\n\nthis video shows exactly what should be done to correct it if it does not.\n\n\n# uncertain - confirm your observer_wallet is set in the .env file and corresponding wallet is located in wallets/< address >.json...\n\n\n#\n\nthe cause for the error could not be reliably determined.\n\n"uncertain" is the default value returned when evaluating a failed observer. it means that none of the above error messages perfectly matched the problems with your gateway.\n\nyou should first ensure that your observer wallet is set correctly locally, and then check your observer logs for any additional error messages.\n\nsudo docker-compose logs -f --tail=50 observer',charsets:{}},{title:"Upgrading to the Observer Module",frontmatter:{},regularPath:"/gateways/ar-io-node/observer-upgrade.html",relativePath:"gateways/ar-io-node/observer-upgrade.md",key:"v-2151a890",path:"/gateways/ar-io-node/observer-upgrade.html",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:39},{level:2,title:"Supply a Keyfile",slug:"supply-a-keyfile",normalizedTitle:"supply a keyfile",charIndex:691},{level:2,title:"Environmental variables",slug:"environmental-variables",normalizedTitle:"environmental variables",charIndex:1695}],headersStr:"Overview Supply a Keyfile Environmental variables",content:'# Upgrading to the Observer Module\n\n\n# Overview\n\nFrom time to time, significant updates to the AR.IO Gateway node software might necessitate additional configuration steps to harness the entirety of the new features. The recent addition of the "Observer" module, designed to monitor the health of the AR.IO network, is a case in point. To integrate this module successfully, users will need to undertake two supplementary steps beyond the conventional upgrade routine:\n\n 1. Supply the keyfile for an active Arweave wallet.\n\n 2. Configure specific environmental variables.\n\nBoth of these steps can be completed during the normal upgrade process BEFORE you rebuild your gateway (step #5).\n\n\n# Supply a Keyfile\n\nA primary function of the Observer Module is to upload reports on the health of the AR.IO network to the Arweave blockweave. In order to do this, transactions must be signed and paid for. This requires the keyfile for an Arweave wallet be provided to your gateway.\n\nYou may use the same wallet linked to your gateway in the AR.IO network (AR_IO_WALLET in your .env file) but in most situations it is safer to use a separate fresh wallet, or a "hot" wallet you use for safely interacting with Dapps, especially if you host your gateway on a remote server where other people may have access. Find more information about creating fresh wallets here.\n\nRemember, your keyfile contains the public keys to your Arweave wallet, always be extremely careful not to expose it to unsafe conditions.\n\nYour keyfile must be saved in the new wallets directory in the root of the gateway repository, with the name .json\n\nFor example: QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ.json\n\n\n# Environmental variables\n\nThere are two new environmental variables that should be set when upgrading to Observer. Both of these should be added to the .env file prior to rebuilding your gateway:\n\n * RUN_OBSERVER (optional) - This is the on/off switch for Observer. The default value is true, so omitting this from your environmental variables will not prevent Observer from running. Set the value to false if you want your gateway to run without Observer.\n * RUN_OBSERVER=true\n * OBSERVER_WALLET - This should be set to the public address of the wallet you are using to sign Observer transactions.\n * OBSERVER_WALLET=QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ\n\nNote: If you encounter any issues during the upgrade process, please seek assistance from the AR.IO community.',normalizedContent:'# upgrading to the observer module\n\n\n# overview\n\nfrom time to time, significant updates to the ar.io gateway node software might necessitate additional configuration steps to harness the entirety of the new features. the recent addition of the "observer" module, designed to monitor the health of the ar.io network, is a case in point. to integrate this module successfully, users will need to undertake two supplementary steps beyond the conventional upgrade routine:\n\n 1. supply the keyfile for an active arweave wallet.\n\n 2. configure specific environmental variables.\n\nboth of these steps can be completed during the normal upgrade process before you rebuild your gateway (step #5).\n\n\n# supply a keyfile\n\na primary function of the observer module is to upload reports on the health of the ar.io network to the arweave blockweave. in order to do this, transactions must be signed and paid for. this requires the keyfile for an arweave wallet be provided to your gateway.\n\nyou may use the same wallet linked to your gateway in the ar.io network (ar_io_wallet in your .env file) but in most situations it is safer to use a separate fresh wallet, or a "hot" wallet you use for safely interacting with dapps, especially if you host your gateway on a remote server where other people may have access. find more information about creating fresh wallets here.\n\nremember, your keyfile contains the public keys to your arweave wallet, always be extremely careful not to expose it to unsafe conditions.\n\nyour keyfile must be saved in the new wallets directory in the root of the gateway repository, with the name .json\n\nfor example: qgwqtjdllgm2ehfwiipzmaofld50cnguzzipedodrgq.json\n\n\n# environmental variables\n\nthere are two new environmental variables that should be set when upgrading to observer. both of these should be added to the .env file prior to rebuilding your gateway:\n\n * run_observer (optional) - this is the on/off switch for observer. the default value is true, so omitting this from your environmental variables will not prevent observer from running. set the value to false if you want your gateway to run without observer.\n * run_observer=true\n * observer_wallet - this should be set to the public address of the wallet you are using to sign observer transactions.\n * observer_wallet=qgwqtjdllgm2ehfwiipzmaofld50cnguzzipedodrgq\n\nnote: if you encounter any issues during the upgrade process, please seek assistance from the ar.io community.',charsets:{}},{title:"Join the AR.IO Testnet",frontmatter:{prev:!1,permalink:"/gateways/testnet/",tags:["testnet","join","application","jwk","qty","fqdn","label","note","properties"]},regularPath:"/gateways/ar-io-node/testnet.html",relativePath:"gateways/ar-io-node/testnet.md",key:"v-4222367a",path:"/gateways/testnet/",headers:[{level:2,title:"Prerequisites",slug:"prerequisites",normalizedTitle:"prerequisites",charIndex:29},{level:2,title:"Submit an Application",slug:"submit-an-application",normalizedTitle:"submit an application",charIndex:454}],headersStr:"Prerequisites Submit an Application",content:"# Join the AR.IO Testnet\n\n\n# Prerequisites\n\n 1. Must have a fully functional AR.IO gateway.\n \n * This includes the ability to resolve ArNS subdomains.\n * Follow installation instructions for windows or linux and get help from the ar.io community.\n\n 2. Gateway must be associated with an Arweave Wallet.\n \n * Learn about creating Arweave wallets here\n\n 3. Arweave wallet must be funded with enough AR tokens to pay for transaction gas.\n\n\n# Submit an Application\n\nJoining the ar.io Testnet requires staking a minimum of 50,000 Test IO Tokens. You must have Test IO Tokens before you are able to join. Test IO Tokens are currently not being distributed.\n\nNew applications for joining the Testnet are not currently being accepted. Be sure to join the ar.io Discord to stay up to date on Testnet status and possible future availability prior to the launch of the Mainnet. --\x3e",normalizedContent:"# join the ar.io testnet\n\n\n# prerequisites\n\n 1. must have a fully functional ar.io gateway.\n \n * this includes the ability to resolve arns subdomains.\n * follow installation instructions for windows or linux and get help from the ar.io community.\n\n 2. gateway must be associated with an arweave wallet.\n \n * learn about creating arweave wallets here\n\n 3. arweave wallet must be funded with enough ar tokens to pay for transaction gas.\n\n\n# submit an application\n\njoining the ar.io testnet requires staking a minimum of 50,000 test io tokens. you must have test io tokens before you are able to join. test io tokens are currently not being distributed.\n\nnew applications for joining the testnet are not currently being accepted. be sure to join the ar.io discord to stay up to date on testnet status and possible future availability prior to the launch of the mainnet. --\x3e",charsets:{}},{title:"ar.io Release Notes",frontmatter:{next:!1},regularPath:"/gateways/ar-io-node/release-notes.html",relativePath:"gateways/ar-io-node/release-notes.md",key:"v-79f5d88c",path:"/gateways/ar-io-node/release-notes.html",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:26},{level:2,title:"[Release 18] - 2024-10-01",slug:"release-18-2024-10-01",normalizedTitle:"[release 18] - 2024-10-01",charIndex:706},{level:2,title:"[Release 17] - 2024-09-09",slug:"release-17-2024-09-09",normalizedTitle:"[release 17] - 2024-09-09",charIndex:1971},{level:2,title:"[Release 16] - 2024-08-09",slug:"release-16-2024-08-09",normalizedTitle:"[release 16] - 2024-08-09",charIndex:5405},{level:2,title:"[Release 15] - 2024-07-19",slug:"release-15-2024-07-19",normalizedTitle:"[release 15] - 2024-07-19",charIndex:7056},{level:2,title:"[Release 14] - 2024-06-26",slug:"release-14-2024-06-26",normalizedTitle:"[release 14] - 2024-06-26",charIndex:9244},{level:2,title:"[Release 13] - 2024-06-24",slug:"release-13-2024-06-24",normalizedTitle:"[release 13] - 2024-06-24",charIndex:9338},{level:2,title:"[Release 12] - 2024-06-05",slug:"release-12-2024-06-05",normalizedTitle:"[release 12] - 2024-06-05",charIndex:10869},{level:2,title:"[Release 11] - 2024-05-21",slug:"release-11-2024-05-21",normalizedTitle:"[release 11] - 2024-05-21",charIndex:12143},{level:2,title:"[Release 10] - 2024-05-20",slug:"release-10-2024-05-20",normalizedTitle:"[release 10] - 2024-05-20",charIndex:12441},{level:2,title:"[Release 9] - 2024-04-10",slug:"release-9-2024-04-10",normalizedTitle:"[release 9] - 2024-04-10",charIndex:13806},{level:2,title:"[Release 8] - 2024-03-14",slug:"release-8-2024-03-14",normalizedTitle:"[release 8] - 2024-03-14",charIndex:14941},{level:2,title:"[Release 7] - 2024 - 02 - 14",slug:"release-7-2024-02-14",normalizedTitle:"[release 7] - 2024 - 02 - 14",charIndex:15801},{level:2,title:"[Release 6] - 2024-01-29",slug:"release-6-2024-01-29",normalizedTitle:"[release 6] - 2024-01-29",charIndex:16514},{level:2,title:"[Release 5] - 2024-01-25",slug:"release-5-2024-01-25",normalizedTitle:"[release 5] - 2024-01-25",charIndex:16647},{level:2,title:"[Release 4] - 2024-01-11",slug:"release-4-2024-01-11",normalizedTitle:"[release 4] - 2024-01-11",charIndex:17267},{level:2,title:"[Release 3] - 2023-12-05",slug:"release-3-2023-12-05",normalizedTitle:"[release 3] - 2023-12-05",charIndex:18232}],headersStr:"Overview [Release 18] - 2024-10-01 [Release 17] - 2024-09-09 [Release 16] - 2024-08-09 [Release 15] - 2024-07-19 [Release 14] - 2024-06-26 [Release 13] - 2024-06-24 [Release 12] - 2024-06-05 [Release 11] - 2024-05-21 [Release 10] - 2024-05-20 [Release 9] - 2024-04-10 [Release 8] - 2024-03-14 [Release 7] - 2024 - 02 - 14 [Release 6] - 2024-01-29 [Release 5] - 2024-01-25 [Release 4] - 2024-01-11 [Release 3] - 2023-12-05",content:"# ar.io Release Notes\n\n\n# Overview\n\nWelcome to the documentation page for the ar.io gateway release notes. Here, you will find detailed information about each version of the ar.io gateway, including the enhancements, bug fixes, and any other changes introduced in every release. This page serves as a comprehensive resource to keep you informed about the latest developments and updates in the ar.io gateway. For those interested in exploring the source code, each release's code is readily accessible at our GitHub repository: ar.io gateway change logs. Stay updated with the continuous improvements and advancements in the ar.io gateway by referring to this page for all release-related information.\n\n\n# [Release 18] - 2024-10-01\n\n * Fixed\n \n * Improved performance of data attributes query that was preventing data.db WAL flushing.\n\n * Added\n \n * Added WAL sqlite_wal_checkpoint_pages Prometheus metric to help monitor WAL flushing.\n * Added a POST /ar-io/admin/export-parquet endpoint that can be used to export the contents of the SQLite3 core and bundle DBs as Parquet. To trigger an export, POST JSON containing outputDir, startHeight, endHeight, and maxFileRows keys. The resulting Parquet files can then be queried directly using DuckDB or loaded into another system (e.g. ClickHouse). Scripts will be provided to help automate the latter in a future release.\n * Added ARNS_RESOLVER_OVERRIDE_TTL_SECONDS that can be used to force ArNS names to refresh before their TTLs expire.\n * Added a GET /ar-io/resolver/:name endpoint that returns an ArNS resolution for the given name.\n\n * Changed\n \n * Removed ArNS resolver service in favor of integrated resolver. If a standalone resolver is still desired, the core service can be run with the START_WRITERS environment variable set to false. This will disable indexing while preserving resolver functionality.\n * Deduplicated writes to data.db to improve performance and reduce WAL growth rate.\n\n\n# [Release 17] - 2024-09-09\n\n * Notes\n \n * This release includes a LONG RUNNING MIGRATION. Your node may appear unresponsive while it is running. It is best to wait for it to complete. If it fails or is interrupted, removing your SQLite DBs (in data/sqlite by default) should resolve the issue, provided you are willing to lose your GraphQL index and let your node rebuild it.\n\n * Fixed\n \n * Use the correct environment variable to populate WEBHOOK_BLOCK_FILTER in docker-compose.yaml.\n * Don't cache data regions retrieved to satisfy range requests to avoid unnecessary storage overhead and prevent inserting invalid ID to hash mappings into the data DB.\n\n * Added\n \n * Added a new ClickHouse based DB backend. It can be used in combination with the SQLite DB backend to enable batch loading of historical data from Parquet. It also opens up the possibility of higher DB performance and scalability. In its current state it should be considered a technology preview. It won't be useful to most users until we either provide Parquet files to load into it or automate flushing of the SQLite DB to it (both are planned in future release). It is not intended to be standalone solution. It supports bulk loading and efficient GraphQL querying of transactions and data items, but it relies on SQLite (or potentially another OLTP in the future) to index recent data. These limitations allow greatly simplified schema and query construction. Querying the new ClickHouse DB for transaction and data items via GraphQL is enabled by setting the CLICKHOUSE_URL environment variable.\n * Added the ability to skip storing transaction signatures in the DB by setting WRITE_TRANSACTION_DB_SIGNATURES to false. Missing signatures are fetched from the trusted Arweave node when needed for GraphQL results.\n * Added a Redis backed signature cache to support retrieving optimistically indexed data item signatures in GraphQL queries when writing data items signatures to the DB has been disabled.\n * Added on-demand and composite ArNS resolvers. The on-demand resolver fetches results directly from an AO CU. The composite resolver attempts resolution in the order specified by the ARNS_RESOLVER_PRIORITY_ORDER environment variable (defaults to on-demand,gateway).\n * Added a queue_length Prometheus metric to fasciliate monitoring queues and inform future optimizations\n * Added SQLite WAL cleanup worker to help manage the size of the data.db-wal file. Future improvements to data.db usage are also planned to further improve WAL management.\n\n * Changed\n \n * Handle data requests by ID on ArNS sites. This enables ArNS sites to use relative links to data by ID.\n * Replaced ARNS_RESOLVER_TYPE with ARNS_RESOLVER_PRIORITY_ORDER (defaults to on-demand,gateway).\n * Introduced unbundling back pressure. When either data item data or GraphQL indexing queue depths are more than the value specified by the MAX_DATA_ITEM_QUEUE_SIZE environment variable (defaults to 100000), unbundling is paused until the queues length falls bellow that threshold. This prevents the gateway from running out of memory when the unbundling rate exceeds the indexing rate while avoiding wasteful bundle reprocessing.\n * Prioritized optimistic data item indexing by inserting optimistic data items at the front of the indexing queues.\n * Prioritized nested bundle indexing by inserting nested bundles at the front of the unbundling queue.\n\n\n# [Release 16] - 2024-08-09\n\n * Fixed\n \n * Fixed promise leak caused by missing await when saving data items to the DB.\n * Modified ArNS middleware to not attempt resolution when receiving requests for a different hostname than the one specified by ARNS_ROOT_HOST.\n\n * Added\n \n * Added support for returning Content-Encoding HTTP headers based on user specified Content-Encoding tags.\n * Added isNestedBundle filter enables that matches any nested bundle when indexing. This enables composite unbundling filters that match a set of L1 tags and bundles nested under them.\n * Added ability to skip writing ANS-104 signatures to the DB and load them based on offsets from the data instead. This significantly reduces the size of the bundles DB. It can be enabled by setting the WRITE_ANS104_DATA_ITEM_DB_SIGNATURES environment variable to false.\n * Added data_item_data_indexed_total Prometheus counter to count data items with data attributes indexed.\n\n * Changed\n \n * Queue data attributes writes when serving data rather than writing them syncronously.\n * Reduced the default data indexer count to 1 to lessen the load on the data DB.\n * Switched a number of overly verbose info logs to debug level.\n * Removed docker-compose on-failure restart limits to ensure that services restart no matter how many times they fail.\n * Modified the data_items_indexed_total Prometheus counter to count data items indexed for GraphQL querying instead of data attributes.\n * Increased aggressiveness of contiguous data cleanup. It now pauses 5 seconds instead of 10 seconds per batch and runs every 4 hours instead of every 24 hours.\n\n\n# [Release 15] - 2024-07-19\n\n * Fixed\n \n * Fixed query error that was preventing bundles from being marked as fully imported in the database.\n\n * Added\n \n * Adjusted data item indexing to record data item signature types in the DB. This helps distinguish between signatures using different key formats, and will enable querying by signature type in the future.\n * Adjusted data item indexing to record offsets for data items within bundles and signatures and owners within data items. In the future this will allow us to avoid saving owners and signatures in the DB and thus considerably reduce the size of the bundles DB.\n * Added ARNS_CACHE_TTL_MS environment variable to control the TTL of ARNS cache entries (defaults to 1 hour).\n * Added support for multiple ranges in a single HTTP range request.\n * Added experimental chunk POST endpoint that broadcasts chunks to the comma-separate list of URLS in the CHUNK_BROADCAST_URLS environment variable. It is available at /chunk on the internal gateway service port (4000 by default) but is not yet exposed through Envoy.\n * Added support for running an AO CU adjacent to the gateway (see README.md for details).\n * Added X-ArNS-Process-Id to ArNS resolved name headers.\n * Added a set of AO_... environment variables for specifying which AO URLs should be used (see docker-compose.yaml for the complete list). The AO_CU_URL is of particular use since the core and resolver services only perform AO reads and only the CU is needed for reads.\n\n * Changed\n \n * Split the monolithic docker-compose.yaml into docker-compose.yaml, docker-compose.bundler.yaml, and docker-compose.ao.yaml (see README for details).\n * Replaced references to 'docker-compose' with 'docker compose' in the docs since the former is mostly deprecated.\n * Reduce max fork depth from 50 to 18 inline to reflect Arweave 2.7.2 protocol changes.\n * Increased the aggressiveness of bundle reprocessing by reducing reprocessing interval from 10 minutes to 5 minutes and raising reprocessing batch size from 100 to 1000.\n * Use a patched version of Litestream to work around insufficient S3 multipart upload size in the upstream version.\n\n\n# [Release 14] - 2024-06-26\n\n * Fixed\n \n * Correctly handle manifest index after paths.\n\n\n# [Release 13] - 2024-06-24\n\n * Added\n \n * Added support for optimistically reading data items uploaded using the integrated Turbo bundler via the LocalStack S3 interface.\n * Added X-AR-IO-Origin-Node-Release header to outbound data requests.\n * Added hops, origin, and originNodeRelease query params to outbound data requests.\n * Added support for fallback in v0.2 manifests that is used if no path in the manifest is matched.\n\n * Changed\n \n * Updated Observer to read prescribed names from and write observations to the ar.io AO network process.\n * Updated Resolver to read from the ar.io AO network process.\n\n * Fixed\n \n * Modified optimistic indexing of data items to use a null parent_id when inserting into the DB instead of a placeholder value. This prevents unexpected non-null bundledIn values in GraphQL results for optimistically indexed data items.\n * Modified GraphQl query logic to require an ID for single block GraphQL queries. Previously queries missing an ID were returning an internal SQLite error. This represents a small departure from arweave.net's query logic which returns the latest block for these queries. We recommend querying blocks instead of block in cases where the latest block is desired.\n * Adjusted Observer health check to reflect port change to 5050.\n\n * Security\n \n * Modified docker-compose.yaml to only expose Redis, PostgreSQL, and LocalStack ports internally. This protects gateways that neglect to deploy behind a firewall, reverse proxy, or load balancer.\n\n\n# [Release 12] - 2024-06-05\n\n * Added\n \n * Added /ar-io/admin/queue-data-item endpoint for queuing data item headers for indexing before the bundles containing them are processed. This allows trusted bundlers to make their data items quickly available to be queried via GraphQL without having to wait for bundle data submission or unbundling.\n * Added experimental support for retrieving contiguous data from S3. See AWS_* environment variables documentation for configuration details. In conjuction with a local Turbo bundler this allows optimistic bundle (but not yet data item) retrieval.\n * Add experimental support for fetching data from gateway peers. It can be enabled by adding ario-peer to ON_DEMAND_RETRIEVAL_ORDER. Note: do not expect this work reliably yet! This functionality is in active development and will be improved in future releases.\n * Add import_attempt_count to bundle records to enable future bundle import retry optimizations.\n\n * Changed\n \n * Removed version from docker-compose.yaml to avoid warnings with recent versions of docker-compose.\n * Switched default observer port from 5000 to 5050 to avoid conflict on OS X. Since Envoy is used to provide external access to the observer API this should have no user visible effect.\n\n\n# [Release 11] - 2024-05-21\n\n * Added\n \n * Added arweave_tx_fetch_total Prometheus metric to track counts of transaction headers fetched from the trusted node and Arweave network peers.\n\n * Changed\n \n * Revert to using unnamed bind mounts due to cross platform issues with named volumes.\n\n\n# [Release 10] - 2024-05-20\n\n * Added\n \n * Added experimental support for streaming SQLite backups to S3 (and compatible services) using Litestream. Start the service using the docker-compose \"litestream\" profile to use it, and see the AR_IO_SQLITE_BACKUP_* environment variables documentation for further details.\n * Added /ar-io/admin/queue-bundle endpoint for queueing bundles for import for import before they're in the mempool. In the future this will enable optimistic indexing when combined with a local trusted bundler.\n * Added support for triggering webhooks when blocks are imported matching the filter specified by the WEBHOOK_BLOCK_FILTER environment variable.\n * Added experimental support for indexing transactions and related data items from the mempool. Enable it by setting ENABLE_MEMPOOL_WATCHER to 'true'.\n * Made on-demand data caching circuit breakers configurable via the GET_DATA_CIRCUIT_BREAKER_TIMEOUT_MS environment variable. This allows gateway operators to decide how much latency they will tolerate when serving data in exchange for more complete data indexing and caching.\n * Rename cache header from X-Cached to X-Cache to mimic typical CDN practices.\n * Add X-AR-IO-Hops and X-AR-IO-Origin headers in preparation for future peer-to-peer functionality.\n * Upgrade to Node.js v20 and switch to native test runner.\n\n\n# [Release 9] - 2024-04-10\n\n * Added\n * Added experimental Farcaster Frames support, enabling simple Arweave based Frames with button navigation. Transaction and data item data is now served under /local/farcaster/frame/. /local is used as a prefix to indicate this functionality is both experimental and local to a particular gateway rather than part of the global gateway API. Both GET and POST requests are supported.\n * Added an experimental local ArNS resolver. When enabled it removes dependence on arweave.net for ArNS resolution! Enable it by setting RUN_RESOLVER=TRUE, TRUSTED_ARNS_RESOLVER_TYPE=resolver, and TRUSTED_ARNS_RESOLVER_URL=http://resolver:6000 in your .env file.\n * Added an X-Cached header to data responses to indicate when data is served from the local cache rather than being retrieved from an external source. This is helpful for interfacing with external systems, debugging, and end-to-end testing.\n * Save hashes for unbundled data items during indexing. This enables reduction in data storage via hash based deduplication as well as more efficient peer-to-peer data retrieval in the future.\n\n\n# [Release 8] - 2024-03-14\n\n * Added\n \n * Added GraphQL SQL query debug logging to support trouble-shooting and performance optimization.\n * Added support for indexing data items (not GraphQL querying) based solely on tag name. (example use case: indexing all IPFS CID tagged data items).\n\n * Changes\n \n * Observer data sampling now uses randomized ranges to generate content hashes.\n * Reference gateway ArNS resolutions are now cached to improve report generation performance.\n * Contract interactions are now tested before posting using dryWrite to avoid submitting interactions that would fail.\n * /ar-io/observer/info now reports INVALID for wallets that fail to load.\n\n * Fixed\n \n * Fix data caching failure caused by incorrect method name in getData circuit breakers.\n * Fix healthcheck when ARNS_ROOT_HOST includes a subdomain.\n\n\n# [Release 7] - 2024 - 02 - 14\n\n * Added\n \n * Add support for notifying other services of transactions and data items using webhooks (see README for details).\n * Add support for filter negation (particularly useful for excluding large bundles from indexint).\n * Improve unbundling throughput by decoupling data fetching from unbundling.\n * Add Envoy and core service ARM builds.\n\n * Changed\n \n * Improve resouce cleanup and shutdown behavior.\n * Don't save Redis data to disk by default to help prevent memory issues on startup for small gateways.\n * Reduce the amount of data sampled from large files by the observer.\n * Ensure block poa2 field is not chached to reduce memory consumption.\n\n\n# [Release 6] - 2024-01-29\n\n * Fixed\n * Update observer to improve reliability of contract state synchronization and evaluation.\n\n\n# [Release 5] - 2024-01-25\n\n * Added\n \n * Added transaction offset indexing to support future data retrieval capabilities.\n * Enabled IPv6 support in Envoy config.\n * Added ability to configure observer report generation interval via the REPORT_GENERATION_INTERVAL_MS environmental variable. (Intended primarily for development and testing)\n\n * Changed\n \n * Updated observer to properly handle FQDN conflicts.\n * Renamed most created_at columns to index to indexed_at for consistency and clarity.\n\n * Fixed\n \n * Updated LMDB version to remove Buffer workaround and fix occasional block cache errors.\n\n\n# [Release 4] - 2024-01-11\n\n * Added\n \n * Added circuit breakers around data index access to reduce impact of DB access contention under heavy requests loads.\n * Added support for configuring data source priority via the ON_DEMAND_RETRIEVAL_ORDER environment variable.\n * Updated observer to a version that retrieves epoch start and duration from contract state.\n\n * Changed\n \n * Set the Redis max memory eviction policy to allkeys-lru.\n * Reduced default Redis max memory from 2GB to 256MB.\n * Improved predictability and performance of GraphQL queries.\n * Eliminated unbundling worker threads when filters are configured to skip indexing ANS-104 bundles.\n * Reduced the default number of ANS-104 worker threads from 2 to 1 when unbundling is enabled to conserve memory.\n * Increased nodejs max old space size to 8GB when ANS-104 workers > 1.\n\n * Fixed\n \n * Adjusted paths for chunks indexed by data root to include the full data root.\n\n\n# [Release 3] - 2023-12-05\n\n * Added\n \n * Support range requests (PR 61, PR 64)\n * Note: serving multiple ranges in a single request is not yet supported.\n * Release number in /ar-io/info response.\n * Redis header cache implementation (PR 62).\n * New default header cache (replaces old FS cache).\n * LMDB header cache implementation (PR 60).\n * Intended for use in development only.\n * Enable by setting CHAIN_CACHE_TYPE=lmdb.\n * Filesystem header cache cleanup worker (PR 68).\n * Enabled by default to cleanup old filesystem cache now that Redis is the new default.\n * Support for parallel ANS-104 unbundling (PR 65).\n\n * Changed\n \n * Used pinned container images tags for releases.\n * Default to Redis header cache when running via docker-compose.\n * Default to LMDB header cache when running via yarn start.\n\n * Fixed\n \n * Correct GraphQL pagination for transactions with duplicate tags.",normalizedContent:"# ar.io release notes\n\n\n# overview\n\nwelcome to the documentation page for the ar.io gateway release notes. here, you will find detailed information about each version of the ar.io gateway, including the enhancements, bug fixes, and any other changes introduced in every release. this page serves as a comprehensive resource to keep you informed about the latest developments and updates in the ar.io gateway. for those interested in exploring the source code, each release's code is readily accessible at our github repository: ar.io gateway change logs. stay updated with the continuous improvements and advancements in the ar.io gateway by referring to this page for all release-related information.\n\n\n# [release 18] - 2024-10-01\n\n * fixed\n \n * improved performance of data attributes query that was preventing data.db wal flushing.\n\n * added\n \n * added wal sqlite_wal_checkpoint_pages prometheus metric to help monitor wal flushing.\n * added a post /ar-io/admin/export-parquet endpoint that can be used to export the contents of the sqlite3 core and bundle dbs as parquet. to trigger an export, post json containing outputdir, startheight, endheight, and maxfilerows keys. the resulting parquet files can then be queried directly using duckdb or loaded into another system (e.g. clickhouse). scripts will be provided to help automate the latter in a future release.\n * added arns_resolver_override_ttl_seconds that can be used to force arns names to refresh before their ttls expire.\n * added a get /ar-io/resolver/:name endpoint that returns an arns resolution for the given name.\n\n * changed\n \n * removed arns resolver service in favor of integrated resolver. if a standalone resolver is still desired, the core service can be run with the start_writers environment variable set to false. this will disable indexing while preserving resolver functionality.\n * deduplicated writes to data.db to improve performance and reduce wal growth rate.\n\n\n# [release 17] - 2024-09-09\n\n * notes\n \n * this release includes a long running migration. your node may appear unresponsive while it is running. it is best to wait for it to complete. if it fails or is interrupted, removing your sqlite dbs (in data/sqlite by default) should resolve the issue, provided you are willing to lose your graphql index and let your node rebuild it.\n\n * fixed\n \n * use the correct environment variable to populate webhook_block_filter in docker-compose.yaml.\n * don't cache data regions retrieved to satisfy range requests to avoid unnecessary storage overhead and prevent inserting invalid id to hash mappings into the data db.\n\n * added\n \n * added a new clickhouse based db backend. it can be used in combination with the sqlite db backend to enable batch loading of historical data from parquet. it also opens up the possibility of higher db performance and scalability. in its current state it should be considered a technology preview. it won't be useful to most users until we either provide parquet files to load into it or automate flushing of the sqlite db to it (both are planned in future release). it is not intended to be standalone solution. it supports bulk loading and efficient graphql querying of transactions and data items, but it relies on sqlite (or potentially another oltp in the future) to index recent data. these limitations allow greatly simplified schema and query construction. querying the new clickhouse db for transaction and data items via graphql is enabled by setting the clickhouse_url environment variable.\n * added the ability to skip storing transaction signatures in the db by setting write_transaction_db_signatures to false. missing signatures are fetched from the trusted arweave node when needed for graphql results.\n * added a redis backed signature cache to support retrieving optimistically indexed data item signatures in graphql queries when writing data items signatures to the db has been disabled.\n * added on-demand and composite arns resolvers. the on-demand resolver fetches results directly from an ao cu. the composite resolver attempts resolution in the order specified by the arns_resolver_priority_order environment variable (defaults to on-demand,gateway).\n * added a queue_length prometheus metric to fasciliate monitoring queues and inform future optimizations\n * added sqlite wal cleanup worker to help manage the size of the data.db-wal file. future improvements to data.db usage are also planned to further improve wal management.\n\n * changed\n \n * handle data requests by id on arns sites. this enables arns sites to use relative links to data by id.\n * replaced arns_resolver_type with arns_resolver_priority_order (defaults to on-demand,gateway).\n * introduced unbundling back pressure. when either data item data or graphql indexing queue depths are more than the value specified by the max_data_item_queue_size environment variable (defaults to 100000), unbundling is paused until the queues length falls bellow that threshold. this prevents the gateway from running out of memory when the unbundling rate exceeds the indexing rate while avoiding wasteful bundle reprocessing.\n * prioritized optimistic data item indexing by inserting optimistic data items at the front of the indexing queues.\n * prioritized nested bundle indexing by inserting nested bundles at the front of the unbundling queue.\n\n\n# [release 16] - 2024-08-09\n\n * fixed\n \n * fixed promise leak caused by missing await when saving data items to the db.\n * modified arns middleware to not attempt resolution when receiving requests for a different hostname than the one specified by arns_root_host.\n\n * added\n \n * added support for returning content-encoding http headers based on user specified content-encoding tags.\n * added isnestedbundle filter enables that matches any nested bundle when indexing. this enables composite unbundling filters that match a set of l1 tags and bundles nested under them.\n * added ability to skip writing ans-104 signatures to the db and load them based on offsets from the data instead. this significantly reduces the size of the bundles db. it can be enabled by setting the write_ans104_data_item_db_signatures environment variable to false.\n * added data_item_data_indexed_total prometheus counter to count data items with data attributes indexed.\n\n * changed\n \n * queue data attributes writes when serving data rather than writing them syncronously.\n * reduced the default data indexer count to 1 to lessen the load on the data db.\n * switched a number of overly verbose info logs to debug level.\n * removed docker-compose on-failure restart limits to ensure that services restart no matter how many times they fail.\n * modified the data_items_indexed_total prometheus counter to count data items indexed for graphql querying instead of data attributes.\n * increased aggressiveness of contiguous data cleanup. it now pauses 5 seconds instead of 10 seconds per batch and runs every 4 hours instead of every 24 hours.\n\n\n# [release 15] - 2024-07-19\n\n * fixed\n \n * fixed query error that was preventing bundles from being marked as fully imported in the database.\n\n * added\n \n * adjusted data item indexing to record data item signature types in the db. this helps distinguish between signatures using different key formats, and will enable querying by signature type in the future.\n * adjusted data item indexing to record offsets for data items within bundles and signatures and owners within data items. in the future this will allow us to avoid saving owners and signatures in the db and thus considerably reduce the size of the bundles db.\n * added arns_cache_ttl_ms environment variable to control the ttl of arns cache entries (defaults to 1 hour).\n * added support for multiple ranges in a single http range request.\n * added experimental chunk post endpoint that broadcasts chunks to the comma-separate list of urls in the chunk_broadcast_urls environment variable. it is available at /chunk on the internal gateway service port (4000 by default) but is not yet exposed through envoy.\n * added support for running an ao cu adjacent to the gateway (see readme.md for details).\n * added x-arns-process-id to arns resolved name headers.\n * added a set of ao_... environment variables for specifying which ao urls should be used (see docker-compose.yaml for the complete list). the ao_cu_url is of particular use since the core and resolver services only perform ao reads and only the cu is needed for reads.\n\n * changed\n \n * split the monolithic docker-compose.yaml into docker-compose.yaml, docker-compose.bundler.yaml, and docker-compose.ao.yaml (see readme for details).\n * replaced references to 'docker-compose' with 'docker compose' in the docs since the former is mostly deprecated.\n * reduce max fork depth from 50 to 18 inline to reflect arweave 2.7.2 protocol changes.\n * increased the aggressiveness of bundle reprocessing by reducing reprocessing interval from 10 minutes to 5 minutes and raising reprocessing batch size from 100 to 1000.\n * use a patched version of litestream to work around insufficient s3 multipart upload size in the upstream version.\n\n\n# [release 14] - 2024-06-26\n\n * fixed\n \n * correctly handle manifest index after paths.\n\n\n# [release 13] - 2024-06-24\n\n * added\n \n * added support for optimistically reading data items uploaded using the integrated turbo bundler via the localstack s3 interface.\n * added x-ar-io-origin-node-release header to outbound data requests.\n * added hops, origin, and originnoderelease query params to outbound data requests.\n * added support for fallback in v0.2 manifests that is used if no path in the manifest is matched.\n\n * changed\n \n * updated observer to read prescribed names from and write observations to the ar.io ao network process.\n * updated resolver to read from the ar.io ao network process.\n\n * fixed\n \n * modified optimistic indexing of data items to use a null parent_id when inserting into the db instead of a placeholder value. this prevents unexpected non-null bundledin values in graphql results for optimistically indexed data items.\n * modified graphql query logic to require an id for single block graphql queries. previously queries missing an id were returning an internal sqlite error. this represents a small departure from arweave.net's query logic which returns the latest block for these queries. we recommend querying blocks instead of block in cases where the latest block is desired.\n * adjusted observer health check to reflect port change to 5050.\n\n * security\n \n * modified docker-compose.yaml to only expose redis, postgresql, and localstack ports internally. this protects gateways that neglect to deploy behind a firewall, reverse proxy, or load balancer.\n\n\n# [release 12] - 2024-06-05\n\n * added\n \n * added /ar-io/admin/queue-data-item endpoint for queuing data item headers for indexing before the bundles containing them are processed. this allows trusted bundlers to make their data items quickly available to be queried via graphql without having to wait for bundle data submission or unbundling.\n * added experimental support for retrieving contiguous data from s3. see aws_* environment variables documentation for configuration details. in conjuction with a local turbo bundler this allows optimistic bundle (but not yet data item) retrieval.\n * add experimental support for fetching data from gateway peers. it can be enabled by adding ario-peer to on_demand_retrieval_order. note: do not expect this work reliably yet! this functionality is in active development and will be improved in future releases.\n * add import_attempt_count to bundle records to enable future bundle import retry optimizations.\n\n * changed\n \n * removed version from docker-compose.yaml to avoid warnings with recent versions of docker-compose.\n * switched default observer port from 5000 to 5050 to avoid conflict on os x. since envoy is used to provide external access to the observer api this should have no user visible effect.\n\n\n# [release 11] - 2024-05-21\n\n * added\n \n * added arweave_tx_fetch_total prometheus metric to track counts of transaction headers fetched from the trusted node and arweave network peers.\n\n * changed\n \n * revert to using unnamed bind mounts due to cross platform issues with named volumes.\n\n\n# [release 10] - 2024-05-20\n\n * added\n \n * added experimental support for streaming sqlite backups to s3 (and compatible services) using litestream. start the service using the docker-compose \"litestream\" profile to use it, and see the ar_io_sqlite_backup_* environment variables documentation for further details.\n * added /ar-io/admin/queue-bundle endpoint for queueing bundles for import for import before they're in the mempool. in the future this will enable optimistic indexing when combined with a local trusted bundler.\n * added support for triggering webhooks when blocks are imported matching the filter specified by the webhook_block_filter environment variable.\n * added experimental support for indexing transactions and related data items from the mempool. enable it by setting enable_mempool_watcher to 'true'.\n * made on-demand data caching circuit breakers configurable via the get_data_circuit_breaker_timeout_ms environment variable. this allows gateway operators to decide how much latency they will tolerate when serving data in exchange for more complete data indexing and caching.\n * rename cache header from x-cached to x-cache to mimic typical cdn practices.\n * add x-ar-io-hops and x-ar-io-origin headers in preparation for future peer-to-peer functionality.\n * upgrade to node.js v20 and switch to native test runner.\n\n\n# [release 9] - 2024-04-10\n\n * added\n * added experimental farcaster frames support, enabling simple arweave based frames with button navigation. transaction and data item data is now served under /local/farcaster/frame/. /local is used as a prefix to indicate this functionality is both experimental and local to a particular gateway rather than part of the global gateway api. both get and post requests are supported.\n * added an experimental local arns resolver. when enabled it removes dependence on arweave.net for arns resolution! enable it by setting run_resolver=true, trusted_arns_resolver_type=resolver, and trusted_arns_resolver_url=http://resolver:6000 in your .env file.\n * added an x-cached header to data responses to indicate when data is served from the local cache rather than being retrieved from an external source. this is helpful for interfacing with external systems, debugging, and end-to-end testing.\n * save hashes for unbundled data items during indexing. this enables reduction in data storage via hash based deduplication as well as more efficient peer-to-peer data retrieval in the future.\n\n\n# [release 8] - 2024-03-14\n\n * added\n \n * added graphql sql query debug logging to support trouble-shooting and performance optimization.\n * added support for indexing data items (not graphql querying) based solely on tag name. (example use case: indexing all ipfs cid tagged data items).\n\n * changes\n \n * observer data sampling now uses randomized ranges to generate content hashes.\n * reference gateway arns resolutions are now cached to improve report generation performance.\n * contract interactions are now tested before posting using drywrite to avoid submitting interactions that would fail.\n * /ar-io/observer/info now reports invalid for wallets that fail to load.\n\n * fixed\n \n * fix data caching failure caused by incorrect method name in getdata circuit breakers.\n * fix healthcheck when arns_root_host includes a subdomain.\n\n\n# [release 7] - 2024 - 02 - 14\n\n * added\n \n * add support for notifying other services of transactions and data items using webhooks (see readme for details).\n * add support for filter negation (particularly useful for excluding large bundles from indexint).\n * improve unbundling throughput by decoupling data fetching from unbundling.\n * add envoy and core service arm builds.\n\n * changed\n \n * improve resouce cleanup and shutdown behavior.\n * don't save redis data to disk by default to help prevent memory issues on startup for small gateways.\n * reduce the amount of data sampled from large files by the observer.\n * ensure block poa2 field is not chached to reduce memory consumption.\n\n\n# [release 6] - 2024-01-29\n\n * fixed\n * update observer to improve reliability of contract state synchronization and evaluation.\n\n\n# [release 5] - 2024-01-25\n\n * added\n \n * added transaction offset indexing to support future data retrieval capabilities.\n * enabled ipv6 support in envoy config.\n * added ability to configure observer report generation interval via the report_generation_interval_ms environmental variable. (intended primarily for development and testing)\n\n * changed\n \n * updated observer to properly handle fqdn conflicts.\n * renamed most created_at columns to index to indexed_at for consistency and clarity.\n\n * fixed\n \n * updated lmdb version to remove buffer workaround and fix occasional block cache errors.\n\n\n# [release 4] - 2024-01-11\n\n * added\n \n * added circuit breakers around data index access to reduce impact of db access contention under heavy requests loads.\n * added support for configuring data source priority via the on_demand_retrieval_order environment variable.\n * updated observer to a version that retrieves epoch start and duration from contract state.\n\n * changed\n \n * set the redis max memory eviction policy to allkeys-lru.\n * reduced default redis max memory from 2gb to 256mb.\n * improved predictability and performance of graphql queries.\n * eliminated unbundling worker threads when filters are configured to skip indexing ans-104 bundles.\n * reduced the default number of ans-104 worker threads from 2 to 1 when unbundling is enabled to conserve memory.\n * increased nodejs max old space size to 8gb when ans-104 workers > 1.\n\n * fixed\n \n * adjusted paths for chunks indexed by data root to include the full data root.\n\n\n# [release 3] - 2023-12-05\n\n * added\n \n * support range requests (pr 61, pr 64)\n * note: serving multiple ranges in a single request is not yet supported.\n * release number in /ar-io/info response.\n * redis header cache implementation (pr 62).\n * new default header cache (replaces old fs cache).\n * lmdb header cache implementation (pr 60).\n * intended for use in development only.\n * enable by setting chain_cache_type=lmdb.\n * filesystem header cache cleanup worker (pr 68).\n * enabled by default to cleanup old filesystem cache now that redis is the new default.\n * support for parallel ans-104 unbundling (pr 65).\n\n * changed\n \n * used pinned container images tags for releases.\n * default to redis header cache when running via docker-compose.\n * default to lmdb header cache when running via yarn start.\n\n * fixed\n \n * correct graphql pagination for transactions with duplicate tags.",charsets:{}},{title:"Overview",frontmatter:{permalink:"/gateways/ar-io-node/overview",prev:"/gateways/ar-io-node/windows-setup.html",next:"/gateways/ar-io-node/linux-setup.html"},regularPath:"/gateways/ar-io-node/overview.html",relativePath:"gateways/ar-io-node/overview.md",key:"v-ad4931e0",path:"/gateways/ar-io-node/overview/",headersStr:null,content:"# Overview\n\nEasy setup guides have been designed to get your AR.IO Gateway up and running correctly and quickly. These guides only go through some basic configurations, while more advanced options can be found here",normalizedContent:"# overview\n\neasy setup guides have been designed to get your ar.io gateway up and running correctly and quickly. these guides only go through some basic configurations, while more advanced options can be found here",charsets:{}},{title:"Troubleshooting",frontmatter:{permalink:"/troubleshooting"},regularPath:"/gateways/ar-io-node/troubleshooting.html",relativePath:"gateways/ar-io-node/troubleshooting.md",key:"v-0cbb8c5a",path:"/troubleshooting/",headers:[{level:2,title:"My Gateway Seems to be Running but...",slug:"my-gateway-seems-to-be-running-but",normalizedTitle:"my gateway seems to be running but...",charIndex:22},{level:3,title:"",slug:"",normalizedTitle:"",charIndex:0},{level:3,title:"",slug:"-2",normalizedTitle:"",charIndex:0},{level:3,title:"",slug:"-3",normalizedTitle:"",charIndex:0},{level:3,title:"",slug:"-4",normalizedTitle:"",charIndex:0},{level:3,title:"",slug:"-5",normalizedTitle:"",charIndex:0},{level:3,title:"",slug:"-6",normalizedTitle:"",charIndex:0},{level:3,title:"",slug:"-7",normalizedTitle:"",charIndex:0},{level:3,title:"",slug:"-8",normalizedTitle:"",charIndex:0},{level:2,title:"My Gateway was Running, but now it isn't",slug:"my-gateway-was-running-but-now-it-isn-t",normalizedTitle:"my gateway was running, but now it isn't",charIndex:4449},{level:3,title:"",slug:"-9",normalizedTitle:"",charIndex:0},{level:2,title:"I am having Trouble Getting my Gateway Set up",slug:"i-am-having-trouble-getting-my-gateway-set-up",normalizedTitle:"i am having trouble getting my gateway set up",charIndex:5127},{level:3,title:"",slug:"-10",normalizedTitle:"",charIndex:0},{level:3,title:"",slug:"-11",normalizedTitle:"",charIndex:0},{level:3,title:"",slug:"-12",normalizedTitle:"",charIndex:0},{level:2,title:"Quick Lookup",slug:"quick-lookup",normalizedTitle:"quick lookup",charIndex:6682}],headersStr:"My Gateway Seems to be Running but... My Gateway was Running, but now it isn't I am having Trouble Getting my Gateway Set up Quick Lookup",content:'# Troubleshooting\n\n\n# My Gateway Seems to be Running but...\n\n\n#\n\nMy release number doesn\'t match the latest version, or includes "-pre"\n\nIf your release number when you go to /ar-io/info is lower than the current release, you simply need to upgrade your gateway in order to reach the latest release.\n\nIf your release number includes the suffix "-pre" it means you are running your gateway from the development branch of the github repository, instead of the main branch. The development branch is used for staging work that the engineering team is in the middle of. Because of this, it can be much less stable than the main branch used for production and can cause significant issues.\n\nEnsure that you are running the latest release, from the main branch, by running the below commands in your terminal:\n\nsudo docker-compose down --rmi all\n\ngit checkout main\n\ngit pull\n\nsudo docker-compose up -d\n\n\nIf this doesn\'t resolve the issue, you can also try a more extreme method of clearing out the incorrect docker images:\n\nsudo docker-compose down\n\nsudo docker system prune -a\n\nsudo docker-compose up -d\n\n\n\n#\n\nIt appears offline on Viewblock or ar://gateways\n\nViewblock and ar://gateways use a very simple ping method for determining if a gateway is "up". There are plenty of reasons why this ping may fail while the gateway is running perfectly, so showing as down is not cause for concern. Just verify that your gateway is still running, and wait. Your gateway will show as up again soon.\n\n\n#\n\n< gateway >/ar-io/observer/reports/current just says "report pending"\n\nThis is normal. Your Observer is working to generate a report and that report will be displayed once it is complete.\n\n\n#\n\nMy Observer is showing me the error "error: Error reading interaction: Cannot read properties of undefined"\n\nThis is not an issue with your observer. The short explanation is that your Observer is looking for tasks assigned to it by the ar.io network contract, but there isnt anything there. You can safely ignore this error message.\n\n\n#\n\nObserving my gateway shows failures\n\nWhen observing a gateway, there are two main pass/fail tests. "Ownership" and "ArNS Assessment"\n\n * Ownership: This tests to see if the value set in your gateway AR_IO_WALLET value (in .env) matches the wallet used to join the AR.IO Network. If they don\'t match, update the value in your .env file and restart your gateway.\n\n * ArNS Assessment: This tests to see if a gateway is able to resolve ArNS names correctly. The first thing you should check is if you have the ARNS_ROOT_HOST value set in your .env file. If not, set the value and restart your gateway. If this value is set, check to make sure you have current DNS records and SSL certificates for wildcard subdomains on your gateway.\n\n\n#\n\nI updated my .env settings, but nothing changed on my gateway\n\nOnce you edit your .env file, you need to "rebuild" your gateway for the changes to take effect. As of release 3, every time you start your gateway with docker-compose it is automatically rebuilt. So all you need to do is shut your gateway down and restart it.\n\n\n#\n\nI am getting an out of disk space error, but I still have open storage space on my computer\n\nThe most likely cause of this is inode exhaustion. Test this by running the command:\n\ndf -i\n\n\nIf one of the lines in the output says 100%, you have run out of inodes and so your filesystem is not capable of creating new files, even if you have available space. The solution is to delete files from your data folder in order to free up inodes.\n\nThis was a common issue prior to release #3, when Redis caching was introduced to reduce the number of small files created. If you are using an older version of the gateway, consider upgrading to mitigate the risk of inode exhaustion.\n\n\n#\n\nI can\'t load ArNS names\n\nThe first thing you should check if your gateway is not resolving ArNS names is that you have ARNS_ROOT_HOST set in your .env file. If not, set it to your domain name used for the gateway. For example, ARNS_ROOT_HOST=arweave.dev.\n\nOnce this value is set, restart your gateway for the changes to take effect.\n\nIf that doesn\'t resolve the issue, check your dns records. You need to have a wildcard subdomain ( *.< your-domain > ) set with your domain registrar so that ArNS names will actually point at your gateway. You can set this record, and generate an SSL certificate for it, in the same way you set the records for your primary domain.\n\n\n\n# My Gateway was Running, but now it isn\'t\n\n\n#\n\nWhen I try to access my gateway in a browser I get a "Your connection is not private" error\n\nThis error message means that your SSL certificates have expired. You need to renew your certificates by running the same certbot command you used when you initially started your gateway:\n\nsudo certbot certonly --manual --preferred-challenges dns --email -d .com -d \'*..com\'\n\n\nCertbot SSL certificates expire after 90 days, and you will need to rerun this command to renew every time. If you provide an email address, you will receive an email letting you know when it is time to renew.\n\n\n\n# I am having Trouble Getting my Gateway Set up\n\n\n\n#\n\nI set my gateway up, but when I go to my domain I get a 404/Nginx error\n\nIf you navigate to your domain and see a 404 error from Nginx (the reverse proxy server used in the setup guide) it means that your domain is correctly pointed at the machine running your gateway, but you have not properly configured your Nginx settings (or your gateway is not running).\n\nThe Set up Networking section of the setup guide has detailed instructions on configuring your Nginx server. If all else fails, try restarting Nginx, that usually clears any issues with the server clinging to old configurations.\n\nsudo service nginx restart\n\n\n\n#\n\nWhen I visit my domain I see a 502 error from Nginx\n\nA 502 error from Nginx means that Nginx is working correctly, but it is receiving an error from your gateway when it tries to forward traffic.\n\n\n#\n\nI am having trouble generating my SSL certificates\n\nWhen using the manual certbot command provided in the setup guide:\n\nsudo certbot certonly --manual --preferred-challenges dns --email -d .com -d \'*..com\'\n\n\nYou need to be sure that you are waiting after creating your TXT records for them to completely propagate. You can check propagation using a tool like dnschecker.org.\n\nIf you continue to have issues, you can check the official certbot instructions guide.\n\n\nIf you do not see your issue listed here, or if you were not able to solve your problem with the above information, feel free to reach out in the ar.io discord.\n\n\n# Quick Lookup\n\nBelow is a quick summary of what you should check when troubleshooting your gateway. Find more detailed information in the sections above.\n\nISSUE WHAT TO CHECK\nMy release number is wrong Pull the latest github updates and make sure you are on the\n main branch\nGateway appears offline on Viewblock or ar://gateways Probably fine, but verify that your gateway is still\n running.\n\'/ar-io/observer/reports/current\' just says "report pending" Normal behavior, wait for the report to complete.\nObserver error "Cannot read properties of undefined" Normal behavior, Observer is checking for data not\n implemented yet.\nObserving my gateway shows failures Check AR_IO_WALLET and ARNS_ROOT_HOST settings.\nUpdated .env settings not reflected on gateway Rebuild your gateway after editing .env file.\nOut of disk space error Check for inode exhaustion and delete files if necessary.\nCan\'t load ArNS names Check ARNS_ROOT_HOST setting in .env file, and DNS records.\n"Your connection is not private" error Generate or renew SSL certificates.\n404/Nginx error when accessing domain Check Nginx settings and restart Nginx if necessary.\n502 error from Nginx Check for errors in your gateway.\nTrouble generating SSL certificates Ensure TXT records have propagated and follow certbot\n instructions.',normalizedContent:'# troubleshooting\n\n\n# my gateway seems to be running but...\n\n\n#\n\nmy release number doesn\'t match the latest version, or includes "-pre"\n\nif your release number when you go to /ar-io/info is lower than the current release, you simply need to upgrade your gateway in order to reach the latest release.\n\nif your release number includes the suffix "-pre" it means you are running your gateway from the development branch of the github repository, instead of the main branch. the development branch is used for staging work that the engineering team is in the middle of. because of this, it can be much less stable than the main branch used for production and can cause significant issues.\n\nensure that you are running the latest release, from the main branch, by running the below commands in your terminal:\n\nsudo docker-compose down --rmi all\n\ngit checkout main\n\ngit pull\n\nsudo docker-compose up -d\n\n\nif this doesn\'t resolve the issue, you can also try a more extreme method of clearing out the incorrect docker images:\n\nsudo docker-compose down\n\nsudo docker system prune -a\n\nsudo docker-compose up -d\n\n\n\n#\n\nit appears offline on viewblock or ar://gateways\n\nviewblock and ar://gateways use a very simple ping method for determining if a gateway is "up". there are plenty of reasons why this ping may fail while the gateway is running perfectly, so showing as down is not cause for concern. just verify that your gateway is still running, and wait. your gateway will show as up again soon.\n\n\n#\n\n< gateway >/ar-io/observer/reports/current just says "report pending"\n\nthis is normal. your observer is working to generate a report and that report will be displayed once it is complete.\n\n\n#\n\nmy observer is showing me the error "error: error reading interaction: cannot read properties of undefined"\n\nthis is not an issue with your observer. the short explanation is that your observer is looking for tasks assigned to it by the ar.io network contract, but there isnt anything there. you can safely ignore this error message.\n\n\n#\n\nobserving my gateway shows failures\n\nwhen observing a gateway, there are two main pass/fail tests. "ownership" and "arns assessment"\n\n * ownership: this tests to see if the value set in your gateway ar_io_wallet value (in .env) matches the wallet used to join the ar.io network. if they don\'t match, update the value in your .env file and restart your gateway.\n\n * arns assessment: this tests to see if a gateway is able to resolve arns names correctly. the first thing you should check is if you have the arns_root_host value set in your .env file. if not, set the value and restart your gateway. if this value is set, check to make sure you have current dns records and ssl certificates for wildcard subdomains on your gateway.\n\n\n#\n\ni updated my .env settings, but nothing changed on my gateway\n\nonce you edit your .env file, you need to "rebuild" your gateway for the changes to take effect. as of release 3, every time you start your gateway with docker-compose it is automatically rebuilt. so all you need to do is shut your gateway down and restart it.\n\n\n#\n\ni am getting an out of disk space error, but i still have open storage space on my computer\n\nthe most likely cause of this is inode exhaustion. test this by running the command:\n\ndf -i\n\n\nif one of the lines in the output says 100%, you have run out of inodes and so your filesystem is not capable of creating new files, even if you have available space. the solution is to delete files from your data folder in order to free up inodes.\n\nthis was a common issue prior to release #3, when redis caching was introduced to reduce the number of small files created. if you are using an older version of the gateway, consider upgrading to mitigate the risk of inode exhaustion.\n\n\n#\n\ni can\'t load arns names\n\nthe first thing you should check if your gateway is not resolving arns names is that you have arns_root_host set in your .env file. if not, set it to your domain name used for the gateway. for example, arns_root_host=arweave.dev.\n\nonce this value is set, restart your gateway for the changes to take effect.\n\nif that doesn\'t resolve the issue, check your dns records. you need to have a wildcard subdomain ( *.< your-domain > ) set with your domain registrar so that arns names will actually point at your gateway. you can set this record, and generate an ssl certificate for it, in the same way you set the records for your primary domain.\n\n\n\n# my gateway was running, but now it isn\'t\n\n\n#\n\nwhen i try to access my gateway in a browser i get a "your connection is not private" error\n\nthis error message means that your ssl certificates have expired. you need to renew your certificates by running the same certbot command you used when you initially started your gateway:\n\nsudo certbot certonly --manual --preferred-challenges dns --email -d .com -d \'*..com\'\n\n\ncertbot ssl certificates expire after 90 days, and you will need to rerun this command to renew every time. if you provide an email address, you will receive an email letting you know when it is time to renew.\n\n\n\n# i am having trouble getting my gateway set up\n\n\n\n#\n\ni set my gateway up, but when i go to my domain i get a 404/nginx error\n\nif you navigate to your domain and see a 404 error from nginx (the reverse proxy server used in the setup guide) it means that your domain is correctly pointed at the machine running your gateway, but you have not properly configured your nginx settings (or your gateway is not running).\n\nthe set up networking section of the setup guide has detailed instructions on configuring your nginx server. if all else fails, try restarting nginx, that usually clears any issues with the server clinging to old configurations.\n\nsudo service nginx restart\n\n\n\n#\n\nwhen i visit my domain i see a 502 error from nginx\n\na 502 error from nginx means that nginx is working correctly, but it is receiving an error from your gateway when it tries to forward traffic.\n\n\n#\n\ni am having trouble generating my ssl certificates\n\nwhen using the manual certbot command provided in the setup guide:\n\nsudo certbot certonly --manual --preferred-challenges dns --email -d .com -d \'*..com\'\n\n\nyou need to be sure that you are waiting after creating your txt records for them to completely propagate. you can check propagation using a tool like dnschecker.org.\n\nif you continue to have issues, you can check the official certbot instructions guide.\n\n\nif you do not see your issue listed here, or if you were not able to solve your problem with the above information, feel free to reach out in the ar.io discord.\n\n\n# quick lookup\n\nbelow is a quick summary of what you should check when troubleshooting your gateway. find more detailed information in the sections above.\n\nissue what to check\nmy release number is wrong pull the latest github updates and make sure you are on the\n main branch\ngateway appears offline on viewblock or ar://gateways probably fine, but verify that your gateway is still\n running.\n\'/ar-io/observer/reports/current\' just says "report pending" normal behavior, wait for the report to complete.\nobserver error "cannot read properties of undefined" normal behavior, observer is checking for data not\n implemented yet.\nobserving my gateway shows failures check ar_io_wallet and arns_root_host settings.\nupdated .env settings not reflected on gateway rebuild your gateway after editing .env file.\nout of disk space error check for inode exhaustion and delete files if necessary.\ncan\'t load arns names check arns_root_host setting in .env file, and dns records.\n"your connection is not private" error generate or renew ssl certificates.\n404/nginx error when accessing domain check nginx settings and restart nginx if necessary.\n502 error from nginx check for errors in your gateway.\ntrouble generating ssl certificates ensure txt records have propagated and follow certbot\n instructions.',charsets:{}},{title:"Upgrading your Gateway",frontmatter:{permalink:"/gateways/upgrade/"},regularPath:"/gateways/ar-io-node/upgrading.html",relativePath:"gateways/ar-io-node/upgrading.md",key:"v-68d9087a",path:"/gateways/upgrade/",headers:[{level:2,title:"Prerequisites",slug:"prerequisites",normalizedTitle:"prerequisites",charIndex:347},{level:2,title:"Checking your Release Number",slug:"checking-your-release-number",normalizedTitle:"checking your release number",charIndex:492},{level:2,title:"Upgrade Steps",slug:"upgrade-steps",normalizedTitle:"upgrade steps",charIndex:1055}],headersStr:"Prerequisites Checking your Release Number Upgrade Steps",content:"# Upgrading your Gateway\n\nTo ensure the optimal performance and security of your AR.IO Gateway, it's essential to regularly upgrade to the latest version. Notably, indexed data resides separate from Docker. As a result, neither upgrading the Gateway nor pruning Docker will erase your data or progress. Here's how you can perform the upgrade:\n\n\n# Prerequisites\n\n * Your Gateway should have been cloned using git. If you haven't, follow the installation instructions for windows or linux.\n\n\n# Checking your Release Number\n\nEffective with release 3, you can view the currently implemented release on any gateway by visiting https:///ar-io/info in a browser. Be sure to replace with the domain of the gateway you are checking.\n\nIf the release number displayed includes -pre it means that your gateway is using the develop branch of the github repo for the gateway code. Follow steps in our troubleshooting guide to switch over to the more stable main branch.\n\nAnnouncements will be made in our discord server showing each new release.\n\n\n# Upgrade Steps\n\n 1. Pull the latest changes from the repository\n \n Navigate to your cloned repository directory and execute the following command:\n \n git pull\n \n\n 2. Shut down Docker\n \n Depending on your operating system, use the respective commands:\n \n Linux\n \n sudo docker-compose down -v\n \n \n Windows\n \n \n docker-compose down -v\n \n \n\n 3. Prune Docker (Optional)\n \n It's a good practice to clean up unused Docker resources. Again, use the command based on your OS:\n \n NOTE: This will erase all inactive docker containers on your machine. If you use docker for anything beyond running a gateway be extremely careful using this command.\n \n Linux\n \n \n sudo docker system prune\n \n \n \n Windows\n \n \n docker system prune\n \n \n\n 4. Check for New Environmental Variables\n \n Read the update release change logs and community announcements to see if the new version includes any new environmental variables that you should set before restarting your gateway.\n\n 5. Restart the Docker container\n \n Finally, start the Docker container again to implement the changes:\n \n Linux\n \n sudo docker-compose up -d\n \n \n Windows\n \n docker-compose up -d\n \n \n NOTE: Effective with Release #3, it is no longer required to include the --build flag when starting your gateway. Docker will automatically build using the image specified in the docker-commpose.yaml file.\n\nThat's it! Your AR.IO Gateway is now upgraded to the latest version. Ensure to test and verify that everything is functioning as expected. If you encounter any issues, reach out to the AR.IO community for assistance.",normalizedContent:"# upgrading your gateway\n\nto ensure the optimal performance and security of your ar.io gateway, it's essential to regularly upgrade to the latest version. notably, indexed data resides separate from docker. as a result, neither upgrading the gateway nor pruning docker will erase your data or progress. here's how you can perform the upgrade:\n\n\n# prerequisites\n\n * your gateway should have been cloned using git. if you haven't, follow the installation instructions for windows or linux.\n\n\n# checking your release number\n\neffective with release 3, you can view the currently implemented release on any gateway by visiting https:///ar-io/info in a browser. be sure to replace with the domain of the gateway you are checking.\n\nif the release number displayed includes -pre it means that your gateway is using the develop branch of the github repo for the gateway code. follow steps in our troubleshooting guide to switch over to the more stable main branch.\n\nannouncements will be made in our discord server showing each new release.\n\n\n# upgrade steps\n\n 1. pull the latest changes from the repository\n \n navigate to your cloned repository directory and execute the following command:\n \n git pull\n \n\n 2. shut down docker\n \n depending on your operating system, use the respective commands:\n \n linux\n \n sudo docker-compose down -v\n \n \n windows\n \n \n docker-compose down -v\n \n \n\n 3. prune docker (optional)\n \n it's a good practice to clean up unused docker resources. again, use the command based on your os:\n \n note: this will erase all inactive docker containers on your machine. if you use docker for anything beyond running a gateway be extremely careful using this command.\n \n linux\n \n \n sudo docker system prune\n \n \n \n windows\n \n \n docker system prune\n \n \n\n 4. check for new environmental variables\n \n read the update release change logs and community announcements to see if the new version includes any new environmental variables that you should set before restarting your gateway.\n\n 5. restart the docker container\n \n finally, start the docker container again to implement the changes:\n \n linux\n \n sudo docker-compose up -d\n \n \n windows\n \n docker-compose up -d\n \n \n note: effective with release #3, it is no longer required to include the --build flag when starting your gateway. docker will automatically build using the image specified in the docker-commpose.yaml file.\n\nthat's it! your ar.io gateway is now upgraded to the latest version. ensure to test and verify that everything is functioning as expected. if you encounter any issues, reach out to the ar.io community for assistance.",charsets:{}},{title:"Windows Installation Instructions",frontmatter:{prev:!1,next:"/gateways/ar-io-node/testnet.html",permalink:"/gateways/ar-io-node/windows-setup/"},regularPath:"/gateways/ar-io-node/windows-setup.html",relativePath:"gateways/ar-io-node/windows-setup.md",key:"v-2aed10ba",path:"/gateways/ar-io-node/windows-setup/",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:40},{level:2,title:"Prerequisites",slug:"prerequisites",normalizedTitle:"prerequisites",charIndex:387},{level:2,title:"Install Required Packages",slug:"install-required-packages",normalizedTitle:"install required packages",charIndex:547},{level:2,title:"Clone the Repository",slug:"clone-the-repository",normalizedTitle:"clone the repository",charIndex:1413},{level:2,title:"Create the Environment File",slug:"create-the-environment-file",normalizedTitle:"create the environment file",charIndex:2230},{level:2,title:"Supply Your Observer Wallet Keyfile:",slug:"supply-your-observer-wallet-keyfile",normalizedTitle:"supply your observer wallet keyfile:",charIndex:4801},{level:2,title:"Start the Docker Containers",slug:"start-the-docker-containers",normalizedTitle:"start the docker containers",charIndex:5293},{level:2,title:"Set Up Router Port Forwarding",slug:"set-up-router-port-forwarding",normalizedTitle:"set up router port forwarding",charIndex:6796},{level:2,title:"Install and Configure NGINX Docker",slug:"install-and-configure-nginx-docker",normalizedTitle:"install and configure nginx docker",charIndex:9054}],headersStr:"Overview Prerequisites Install Required Packages Clone the Repository Create the Environment File Supply Your Observer Wallet Keyfile: Start the Docker Containers Set Up Router Port Forwarding Install and Configure NGINX Docker",content:'# Windows Installation Instructions\n\n\n# Overview\n\nThis guide provides step-by-step instructions for setting up the AR.IO node on a Windows computer. It covers installing necessary software, cloning the repository, creating an environment file, starting the Docker container, setting up networking, and installing and configuring NGINX Docker. No prior coding experience is required.\n\n\n# Prerequisites\n\nBefore starting the installation process, ensure you have the following:\n\n * A Windows computer\n * Administrative privileges on the computer\n\n\n# Install Required Packages\n\n 1. Install Docker:\n \n * Download Docker Desktop for Windows from here.\n * Run the installer and follow the prompts.\n * During installation, make sure to select the option to use WSL (Windows Subsystem for Linux) rather than Hyper-V.\n * Restart your PC.\n * Update Windows Subsystem for Linux (WSL):\n * Open the command prompt as an administrator:\n * Press Windows Key + R.\n * Type cmd and press Enter.\n * Right-click on the "Command Prompt" application in the search results.\n * Select "Run as administrator" from the context menu.\n * Run the following commands:\n \n wsl --update\n wsl --shutdown\n \n \n * Restart Docker Desktop.\n\n 2. Install Git:\n \n * Download Git for Windows from here.\n * Run the installer and use the default settings.\n\n\n# Clone the Repository\n\n 1. Clone the main repository:\n * Open the command prompt:\n * Press Windows Key + R.\n * Type cmd and press Enter.\n * Navigate to the directory where you want to clone the repository:\n * Use the cd command to change directories. For example, to navigate to the Documents directory:\n \n cd Documents\n \n \n * More detailed instructions on navigating with the cd command can be found here\n * NOTE: Your database of Arweave Transaction Headers will be created in the project directory, not Docker. So, if you are using an external hard drive to turn an old machine into a node, install the node directly to that external drive.\n * Run the following command:\n \n git clone -b main https://github.com/ar-io/ar-io-node\n \n\n\n# Create the Environment File\n\n 1. Create an environmental variables file:\n \n * Open a text editor (e.g., Notepad):\n \n * Press Windows Key and search for "Notepad".\n * Click on "Notepad" to open the text editor.\n \n * Paste the following content into the new file, replacing with the domain address you are using to access the node, and with the public address of your Arweave wallet:\n \n GRAPHQL_HOST=arweave.net\n GRAPHQL_PORT=443\n START_HEIGHT=0\n RUN_OBSERVER=true\n ARNS_ROOT_HOST=\n AR_IO_WALLET=\n OBSERVER_WALLET=\n \n \n * The GRAPHQL values set the proxy for GQL queries to arweave.net, You may use any available gateway that supports GQL queries. If omitted, your node can support GQL queries on locally indexed transactions, but only L1 transactions are indexed by default.\n * START_HEIGHT is an optional line. It sets the block number where your node will start downloading and indexing transactions headers. Omitting this line will begin indexing at block 0.\n * RUN_OBSERVER turns on the Observer to generate Network Compliance Reports. This is required for full participation in the AR.IO Network. Set to false to run your gateway without Observer.\n * ARNS_ROOT_HOST sets the starting point for resolving ARNS names, which are accessed as a subdomain of a gateway. It should be set to the url you are pointing to your node, excluding any protocol prefix. For example, use node-ar.io and not https://node-ar.io. If you are using a subdomain to access your node and do not set this value, the node will not understand incoming requests.\n * AR_IO_WALLET is optional, and sets the wallet you want associated with your Gateway. An associated wallet is required to join the AR.IO network.\n * OBSERVER_WALLET is the public address of the wallet used to sign Observer transactions. This is required for Observer to run, but may be omitted if you are running a gateway outside of the AR.IO network and do not plan to run Observer. You will need to supply the keyfile to this wallet in the next step.\n \n Advanced configuration options can be found at docs.ar.io\n \n * Save the file with the name ".env" and make sure to select "All Files" as the file type. This helps to ensure the file saves as ".env" and not ".env.txt"\n \n Note: The .env file should be saved inside the same directory where you cloned the repository (e.g., ar-io-node).\n\n\n# Supply Your Observer Wallet Keyfile:\n\nIf you are running Observer, you need to provide a wallet keyfile in order to sign report upload transactions. The keyfile must be saved in the wallets directory in the root of the repository. Name the file .json, replacing "" with the public address of the wallet. This should match your OBSERVER_WALLET environmental variable.\n\nLearn more about creating Arweave wallets and obtaining keyfiles here\n\n\n# Start the Docker Containers\n\n 1. Start the Docker container:\n \n * Open the command prompt:\n \n * Press Windows Key + R.\n * Type cmd and press Enter.\n \n * Navigate to the directory where you cloned the repository (e.g., ar-io-node):\n \n * Use the cd command to change directories. For example, if the repository is located in the Documents directory, you would enter:\n \n cd Documents\\ar-io-node\n \n \n * If the directory path contains spaces, enclose it in double quotation marks. For example:\n \n cd "C:\\My Documents\\ar-io-node"\n \n \n * Use the dir command to list the contents of the current directory and verify that you\'re in the correct location:\n \n dir\n \n \n * Once you are in the correct directory, run the following command to start the Docker container:\n \n docker compose up -d\n \n \n * Explanation of flags:\n \n * up: Start the Docker containers.\n * -d: Run the containers as background processes (detached mode).\n \n NOTE: Effective with Release #3, it is no longer required to include the --build flag when starting your gateway. Docker will automatically build using the image specified in the docker-commpose.yaml file.\n \n The gateway can be shut down using the command:\n \n docker compose down\n \n \n * If prompted by the firewall, allow access for Docker when requested.\n\n\n# Set Up Router Port Forwarding\n\nTo expose your node to the internet and use a custom domain, follow these steps:\n\n 1. Obtain a Domain Name:\n \n * Choose a domain registrar (e.g., Namecheap) and purchase a domain name.\n\n 2. Point the Domain at Your Home Network:\n \n * In your browser, go to https://www.whatsmyip.org/ to display your public ip address. It can be found at the top of the screen. Note this number down.\n * Access your domain registrar\'s settings (e.g., Namecheap\'s cPanel).\n * Navigate to the DNS settings for your domain. In cPanel this is under the "Zone Editor" tab.\n * Create an A record with your registrar for your domain and wildcard subdomains, using your public IP address. For example, if your domain is "ar.io," create a record for "ar.io" and "*.ar.io."\n * Instructions may vary depending on the domain registrar and cPanel. Consult your registrar\'s documentation or support for detailed steps.\n\n 3. Obtain the Local IP Address of Your Machine:\n \n * Open the command prompt:\n * Press Windows Key + R.\n * Type cmd and press Enter.\n * Run the following command:\n \n ipconfig\n \n \n * Look for the network adapter that is currently connected to your network (e.g., Ethernet or Wi-Fi).\n * Note down the IPv4 Address associated with the network adapter. It should be in the format of 192.168.X.X or 10.X.X.X.\n * This IP address will be used for port forwarding.\n\n 4. Set Up Router Port Forwarding:\n \n * Access your home router settings:\n * Open a web browser.\n * Enter your router\'s IP address in the address bar (e.g., 192.168.0.1).\n * If you\'re unsure of your router\'s IP address, consult your router\'s documentation or contact your Internet Service Provider (ISP).\n * Navigate to the port forwarding settings in your router configuration.\n * The exact steps may vary depending on your router model. Consult your router\'s documentation or support for detailed steps.\n * Set up port forwarding rules to forward incoming traffic on ports 80 and 443 to the local IP address of your machine where the node is installed.\n * Configure the ports to point to the local IP address noted in the previous step.\n * Save the settings.\n\n\n# Install and Configure NGINX Docker\n\n 1. Clone the NGINX Docker repository:\n \n * Open the command prompt:\n * Press Windows Key + R.\n * Type cmd and press Enter.\n * Navigate to the directory where you want to clone the repository (This should not be done inside the directory for the node):\n * Use the cd command to change directories. For example, to navigate to the Documents directory:\n \n cd Documents\n \n \n * Run the following command:\n \n git clone -b main https://github.com/bobinstein/dockerized-nginx\n \n \n Note: This NGINX container was designed to easily automate many of the more technical aspects of setting up NGNIX and obtaining an ssl certificate so your node can be accessed with https. However, wildcard domain certifications cannot be universally automated due to significant security concerns. Be sure to follow the instructions in this project for obtaining wildcard domain certificates in order for your node to function properly.\n\n 2. Follow the instructions provided in the repository for setting up NGINX Docker.\n\nCongratulations! Your AR.IO node is now running and connected to the internet. Test it by entering https:///3lyxgbgEvqNSvJrTX2J7CfRychUD5KClFhhVLyTPNCQ in your browser.\n\nNote: If you encounter any issues during the installation process, please seek assistance from the AR.IO community.',normalizedContent:'# windows installation instructions\n\n\n# overview\n\nthis guide provides step-by-step instructions for setting up the ar.io node on a windows computer. it covers installing necessary software, cloning the repository, creating an environment file, starting the docker container, setting up networking, and installing and configuring nginx docker. no prior coding experience is required.\n\n\n# prerequisites\n\nbefore starting the installation process, ensure you have the following:\n\n * a windows computer\n * administrative privileges on the computer\n\n\n# install required packages\n\n 1. install docker:\n \n * download docker desktop for windows from here.\n * run the installer and follow the prompts.\n * during installation, make sure to select the option to use wsl (windows subsystem for linux) rather than hyper-v.\n * restart your pc.\n * update windows subsystem for linux (wsl):\n * open the command prompt as an administrator:\n * press windows key + r.\n * type cmd and press enter.\n * right-click on the "command prompt" application in the search results.\n * select "run as administrator" from the context menu.\n * run the following commands:\n \n wsl --update\n wsl --shutdown\n \n \n * restart docker desktop.\n\n 2. install git:\n \n * download git for windows from here.\n * run the installer and use the default settings.\n\n\n# clone the repository\n\n 1. clone the main repository:\n * open the command prompt:\n * press windows key + r.\n * type cmd and press enter.\n * navigate to the directory where you want to clone the repository:\n * use the cd command to change directories. for example, to navigate to the documents directory:\n \n cd documents\n \n \n * more detailed instructions on navigating with the cd command can be found here\n * note: your database of arweave transaction headers will be created in the project directory, not docker. so, if you are using an external hard drive to turn an old machine into a node, install the node directly to that external drive.\n * run the following command:\n \n git clone -b main https://github.com/ar-io/ar-io-node\n \n\n\n# create the environment file\n\n 1. create an environmental variables file:\n \n * open a text editor (e.g., notepad):\n \n * press windows key and search for "notepad".\n * click on "notepad" to open the text editor.\n \n * paste the following content into the new file, replacing with the domain address you are using to access the node, and with the public address of your arweave wallet:\n \n graphql_host=arweave.net\n graphql_port=443\n start_height=0\n run_observer=true\n arns_root_host=\n ar_io_wallet=\n observer_wallet=\n \n \n * the graphql values set the proxy for gql queries to arweave.net, you may use any available gateway that supports gql queries. if omitted, your node can support gql queries on locally indexed transactions, but only l1 transactions are indexed by default.\n * start_height is an optional line. it sets the block number where your node will start downloading and indexing transactions headers. omitting this line will begin indexing at block 0.\n * run_observer turns on the observer to generate network compliance reports. this is required for full participation in the ar.io network. set to false to run your gateway without observer.\n * arns_root_host sets the starting point for resolving arns names, which are accessed as a subdomain of a gateway. it should be set to the url you are pointing to your node, excluding any protocol prefix. for example, use node-ar.io and not https://node-ar.io. if you are using a subdomain to access your node and do not set this value, the node will not understand incoming requests.\n * ar_io_wallet is optional, and sets the wallet you want associated with your gateway. an associated wallet is required to join the ar.io network.\n * observer_wallet is the public address of the wallet used to sign observer transactions. this is required for observer to run, but may be omitted if you are running a gateway outside of the ar.io network and do not plan to run observer. you will need to supply the keyfile to this wallet in the next step.\n \n advanced configuration options can be found at docs.ar.io\n \n * save the file with the name ".env" and make sure to select "all files" as the file type. this helps to ensure the file saves as ".env" and not ".env.txt"\n \n note: the .env file should be saved inside the same directory where you cloned the repository (e.g., ar-io-node).\n\n\n# supply your observer wallet keyfile:\n\nif you are running observer, you need to provide a wallet keyfile in order to sign report upload transactions. the keyfile must be saved in the wallets directory in the root of the repository. name the file .json, replacing "" with the public address of the wallet. this should match your observer_wallet environmental variable.\n\nlearn more about creating arweave wallets and obtaining keyfiles here\n\n\n# start the docker containers\n\n 1. start the docker container:\n \n * open the command prompt:\n \n * press windows key + r.\n * type cmd and press enter.\n \n * navigate to the directory where you cloned the repository (e.g., ar-io-node):\n \n * use the cd command to change directories. for example, if the repository is located in the documents directory, you would enter:\n \n cd documents\\ar-io-node\n \n \n * if the directory path contains spaces, enclose it in double quotation marks. for example:\n \n cd "c:\\my documents\\ar-io-node"\n \n \n * use the dir command to list the contents of the current directory and verify that you\'re in the correct location:\n \n dir\n \n \n * once you are in the correct directory, run the following command to start the docker container:\n \n docker compose up -d\n \n \n * explanation of flags:\n \n * up: start the docker containers.\n * -d: run the containers as background processes (detached mode).\n \n note: effective with release #3, it is no longer required to include the --build flag when starting your gateway. docker will automatically build using the image specified in the docker-commpose.yaml file.\n \n the gateway can be shut down using the command:\n \n docker compose down\n \n \n * if prompted by the firewall, allow access for docker when requested.\n\n\n# set up router port forwarding\n\nto expose your node to the internet and use a custom domain, follow these steps:\n\n 1. obtain a domain name:\n \n * choose a domain registrar (e.g., namecheap) and purchase a domain name.\n\n 2. point the domain at your home network:\n \n * in your browser, go to https://www.whatsmyip.org/ to display your public ip address. it can be found at the top of the screen. note this number down.\n * access your domain registrar\'s settings (e.g., namecheap\'s cpanel).\n * navigate to the dns settings for your domain. in cpanel this is under the "zone editor" tab.\n * create an a record with your registrar for your domain and wildcard subdomains, using your public ip address. for example, if your domain is "ar.io," create a record for "ar.io" and "*.ar.io."\n * instructions may vary depending on the domain registrar and cpanel. consult your registrar\'s documentation or support for detailed steps.\n\n 3. obtain the local ip address of your machine:\n \n * open the command prompt:\n * press windows key + r.\n * type cmd and press enter.\n * run the following command:\n \n ipconfig\n \n \n * look for the network adapter that is currently connected to your network (e.g., ethernet or wi-fi).\n * note down the ipv4 address associated with the network adapter. it should be in the format of 192.168.x.x or 10.x.x.x.\n * this ip address will be used for port forwarding.\n\n 4. set up router port forwarding:\n \n * access your home router settings:\n * open a web browser.\n * enter your router\'s ip address in the address bar (e.g., 192.168.0.1).\n * if you\'re unsure of your router\'s ip address, consult your router\'s documentation or contact your internet service provider (isp).\n * navigate to the port forwarding settings in your router configuration.\n * the exact steps may vary depending on your router model. consult your router\'s documentation or support for detailed steps.\n * set up port forwarding rules to forward incoming traffic on ports 80 and 443 to the local ip address of your machine where the node is installed.\n * configure the ports to point to the local ip address noted in the previous step.\n * save the settings.\n\n\n# install and configure nginx docker\n\n 1. clone the nginx docker repository:\n \n * open the command prompt:\n * press windows key + r.\n * type cmd and press enter.\n * navigate to the directory where you want to clone the repository (this should not be done inside the directory for the node):\n * use the cd command to change directories. for example, to navigate to the documents directory:\n \n cd documents\n \n \n * run the following command:\n \n git clone -b main https://github.com/bobinstein/dockerized-nginx\n \n \n note: this nginx container was designed to easily automate many of the more technical aspects of setting up ngnix and obtaining an ssl certificate so your node can be accessed with https. however, wildcard domain certifications cannot be universally automated due to significant security concerns. be sure to follow the instructions in this project for obtaining wildcard domain certificates in order for your node to function properly.\n\n 2. follow the instructions provided in the repository for setting up nginx docker.\n\ncongratulations! your ar.io node is now running and connected to the internet. test it by entering https:///3lyxgbgevqnsvjrtx2j7cfrychud5kclfhhvlytpncq in your browser.\n\nnote: if you encounter any issues during the installation process, please seek assistance from the ar.io community.',charsets:{}},{title:"Gateway Architecture",frontmatter:{permalink:"/gateways/"},regularPath:"/gateways/gateways.html",relativePath:"gateways/gateways.md",key:"v-d8e9780c",path:"/gateways/",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:27},{level:2,title:"AR.IO Gateway Benefits",slug:"ar-io-gateway-benefits",normalizedTitle:"ar.io gateway benefits",charIndex:1793},{level:2,title:"Gateway Modularity",slug:"gateway-modularity",normalizedTitle:"gateway modularity",charIndex:2572},{level:2,title:"ARNS Indexing and Routing",slug:"arns-indexing-and-routing",normalizedTitle:"arns indexing and routing",charIndex:3764},{level:2,title:"Content Moderation",slug:"content-moderation",normalizedTitle:"content moderation",charIndex:4462}],headersStr:"Overview AR.IO Gateway Benefits Gateway Modularity ARNS Indexing and Routing Content Moderation",content:"# Gateway Architecture\n\n\n# Overview\n\nA gateway’s primary role in the Arweave ecosystem is to act as a bridge between the Arweave network and the outside world. This means that a gateway's main task is to make it easier for users to interact with the Arweave network by simplifying the technical processes of writing, reading, and discovering data on the blockweave in a trust-minimized fashion.\n\nThe core functions of a general Arweave gateway are broken down into the following areas.\n\nWriting data involves:\n\n * Proxying Layer 1 transaction headers to one or more healthy and active Arweave nodes (miners) to facilitate inclusion in the mempools of as many nodes as possible.\n\n * Proxying chunks for Layer 1 Arweave transactions to Arweave nodes to help facilitate storage and replication of the chunks on the blockweave.\n\n * Receiving and bundling so-called Layer 2 data items (e.g., ANS-104 spec) as Layer 1 transactions.\n\nReading involves retrieving:\n\n * Transaction headers for a Layer 1 Arweave transaction.\n\n * Individual data chunks for a Layer 1 Arweave transaction.\n\n * Blocks from the blockweave.\n\n * Storage pricing rates for data from the Arweave node network.\n\n * Contiguous streams of chunks representing an entire Layer 1 transaction.\n\n * Layer 2 bundled data items (e.g., ANS-104).\n\n * Wallet information (e.g., token balance).\n\nDiscovering data involves:\n\n * Facilitating efficient, structured queries for Layer 1 and Layer 2 transaction and wallet data by:\n \n * examining incoming streams of data (i.e., directly ingested transactions and data items, blocks emitted by the chain, etc.).\n \n * managing index data in a database or analogous data store.\n\n * Parsing and executing user queries.\n\n * Facilitating friendly-path routing via Arweave manifest indexing.\n\n\n# AR.IO Gateway Benefits\n\nAR.IO gateways provide many new benefits and capabilities beyond general Arweave gateways:\n\n * Providing the modularity and configurability necessary for operating extensible gateways that can be deployed at small or large scales to meet the needs of specific applications, use cases, communities, or business models.\n\n * Providing pluggable means for consuming telemetry data for internal and external monitoring and alerting.\n\n * Facilitating friendly-subdomain-name routing to Arweave transactions via a direct integration with the Arweave Name System (ArNS).\n\n * Facilitating configurable content moderation policies.\n\n * Providing connectivity to a decentralized network of other AR.IO gateways, enabling data sharing and other shared workloads.\n\n\n# Gateway Modularity\n\nA design principle of AR.IO gateways is that their core components should be interchangeable with compatible implementations.\n\nThe core services in the gateway are written in Typescript, with flexible interfaces to the various subsystems and databases. This allows operators to customize their gateway to meet their specific requirements. Gateway services can be turned on or off depending on the operator's needs. For example, an operator might choose to have their gateway serve data, but not actively index Layer 2 bundled data.\n\nThis flexibility also allows operators to utilize the technologies that are appropriate for the scale and environments in which they operate.\n\nFor example, small scale operators might want to use low-overhead relational databases to power their indexing while larger scale operators might opt to use cloud-native, horizontally scalable databases. Analogous examples for storage and caching exist as well.\n\nGATEWAY TECH STACK OPTIONS\nTOPOLOGY CHAIN INDEX BUNDLE INDEX DATA INDEX DATA STORE\nSmall SQLite SQLite SQLite Local File System\nLarge PostgreSQL Cassandra Cassandra S3 Compatible\n\n\n# ARNS Indexing and Routing\n\nThe Arweave Name System’s (ArNS) state is managed by the IO token’s smart contract. AR.IO gateways shall perform the following minimum functions relative to ArNS:\n\n * Actively track state changes in the contract.\n\n * Maintain up-to-date indexes for routing configurations based on the state of the IO contract as well as the states of the Arweave Name Token (ANT) contracts to which each name is affiliated.\n\n * Manage the expiration of stale records.\n\n * Facilitate ArNS routing based on the subdomains specified on incoming requests where appropriate.\n\n * Provide a custom HTTP response header for ArNS requests indicating the corresponding Arweave transaction ID.\n\n\n# Content Moderation\n\nThe AR.IO Network will adopt Arweave’s voluntary content moderation model whereby every participant of the network has the autonomy to decide which content they want to (or can legally) store, serve, and see. Each gateway operating on the network has the right and ability to blocklist any content (or address) that is deemed in violation of its content policies or non-compliant with local regulations.",normalizedContent:"# gateway architecture\n\n\n# overview\n\na gateway’s primary role in the arweave ecosystem is to act as a bridge between the arweave network and the outside world. this means that a gateway's main task is to make it easier for users to interact with the arweave network by simplifying the technical processes of writing, reading, and discovering data on the blockweave in a trust-minimized fashion.\n\nthe core functions of a general arweave gateway are broken down into the following areas.\n\nwriting data involves:\n\n * proxying layer 1 transaction headers to one or more healthy and active arweave nodes (miners) to facilitate inclusion in the mempools of as many nodes as possible.\n\n * proxying chunks for layer 1 arweave transactions to arweave nodes to help facilitate storage and replication of the chunks on the blockweave.\n\n * receiving and bundling so-called layer 2 data items (e.g., ans-104 spec) as layer 1 transactions.\n\nreading involves retrieving:\n\n * transaction headers for a layer 1 arweave transaction.\n\n * individual data chunks for a layer 1 arweave transaction.\n\n * blocks from the blockweave.\n\n * storage pricing rates for data from the arweave node network.\n\n * contiguous streams of chunks representing an entire layer 1 transaction.\n\n * layer 2 bundled data items (e.g., ans-104).\n\n * wallet information (e.g., token balance).\n\ndiscovering data involves:\n\n * facilitating efficient, structured queries for layer 1 and layer 2 transaction and wallet data by:\n \n * examining incoming streams of data (i.e., directly ingested transactions and data items, blocks emitted by the chain, etc.).\n \n * managing index data in a database or analogous data store.\n\n * parsing and executing user queries.\n\n * facilitating friendly-path routing via arweave manifest indexing.\n\n\n# ar.io gateway benefits\n\nar.io gateways provide many new benefits and capabilities beyond general arweave gateways:\n\n * providing the modularity and configurability necessary for operating extensible gateways that can be deployed at small or large scales to meet the needs of specific applications, use cases, communities, or business models.\n\n * providing pluggable means for consuming telemetry data for internal and external monitoring and alerting.\n\n * facilitating friendly-subdomain-name routing to arweave transactions via a direct integration with the arweave name system (arns).\n\n * facilitating configurable content moderation policies.\n\n * providing connectivity to a decentralized network of other ar.io gateways, enabling data sharing and other shared workloads.\n\n\n# gateway modularity\n\na design principle of ar.io gateways is that their core components should be interchangeable with compatible implementations.\n\nthe core services in the gateway are written in typescript, with flexible interfaces to the various subsystems and databases. this allows operators to customize their gateway to meet their specific requirements. gateway services can be turned on or off depending on the operator's needs. for example, an operator might choose to have their gateway serve data, but not actively index layer 2 bundled data.\n\nthis flexibility also allows operators to utilize the technologies that are appropriate for the scale and environments in which they operate.\n\nfor example, small scale operators might want to use low-overhead relational databases to power their indexing while larger scale operators might opt to use cloud-native, horizontally scalable databases. analogous examples for storage and caching exist as well.\n\ngateway tech stack options\ntopology chain index bundle index data index data store\nsmall sqlite sqlite sqlite local file system\nlarge postgresql cassandra cassandra s3 compatible\n\n\n# arns indexing and routing\n\nthe arweave name system’s (arns) state is managed by the io token’s smart contract. ar.io gateways shall perform the following minimum functions relative to arns:\n\n * actively track state changes in the contract.\n\n * maintain up-to-date indexes for routing configurations based on the state of the io contract as well as the states of the arweave name token (ant) contracts to which each name is affiliated.\n\n * manage the expiration of stale records.\n\n * facilitate arns routing based on the subdomains specified on incoming requests where appropriate.\n\n * provide a custom http response header for arns requests indicating the corresponding arweave transaction id.\n\n\n# content moderation\n\nthe ar.io network will adopt arweave’s voluntary content moderation model whereby every participant of the network has the autonomy to decide which content they want to (or can legally) store, serve, and see. each gateway operating on the network has the right and ability to blocklist any content (or address) that is deemed in violation of its content policies or non-compliant with local regulations.",charsets:{}},{title:"Glossary",frontmatter:{prev:!1,next:!1},regularPath:"/glossary.html",relativePath:"glossary.md",key:"v-37cd1c0a",path:"/glossary.html",headers:[{level:2,title:"aoComputer (AO):",slug:"aocomputer-ao",normalizedTitle:"aocomputer (ao):",charIndex:208},{level:2,title:"Arweave Name System (ArNS):",slug:"arweave-name-system-arns",normalizedTitle:"arweave name system (arns):",charIndex:898},{level:2,title:"Arweave Name Token (ANT), “Name Token”:",slug:"arweave-name-token-ant-name-token",normalizedTitle:"arweave name token (ant), “name token”:",charIndex:1085},{level:2,title:"Arweave Network Standards (ANS):",slug:"arweave-network-standards-ans",normalizedTitle:"arweave network standards (ans):",charIndex:1374},{level:2,title:"Base Layer Transaction:",slug:"base-layer-transaction",normalizedTitle:"base layer transaction:",charIndex:1640},{level:2,title:"Bundle, bundling:",slug:"bundle-bundling",normalizedTitle:"bundle, bundling:",charIndex:1805},{level:2,title:"Bundled Data Item (BDI):",slug:"bundled-data-item-bdi",normalizedTitle:"bundled data item (bdi):",charIndex:2420},{level:2,title:"Bundler:",slug:"bundler",normalizedTitle:"bundler:",charIndex:2522},{level:2,title:"Chunk:",slug:"chunk",normalizedTitle:"chunk:",charIndex:2622},{level:2,title:"Decentralized, decentralization, etc:",slug:"decentralized-decentralization-etc",normalizedTitle:"decentralized, decentralization, etc:",charIndex:2829},{level:2,title:"Epoch:",slug:"epoch",normalizedTitle:"epoch:",charIndex:3151},{level:2,title:"Gateway:",slug:"gateway",normalizedTitle:"gateway:",charIndex:3423},{level:2,title:"Gateway Address Registry (GAR):",slug:"gateway-address-registry-gar",normalizedTitle:"gateway address registry (gar):",charIndex:3619},{level:2,title:"Indexing:",slug:"indexing",normalizedTitle:"indexing:",charIndex:4140},{level:2,title:"Layer 2 Infrastructure:",slug:"layer-2-infrastructure",normalizedTitle:"layer 2 infrastructure:",charIndex:4225},{level:2,title:"Manifest (aka Path Manifest, Arweave Manifest):",slug:"manifest-aka-path-manifest-arweave-manifest",normalizedTitle:"manifest (aka path manifest, arweave manifest):",charIndex:4442},{level:2,title:"Mempool:",slug:"mempool",normalizedTitle:"mempool:",charIndex:5060},{level:2,title:"Miner (aka Arweave Node):",slug:"miner-aka-arweave-node",normalizedTitle:"miner (aka arweave node):",charIndex:5263},{level:2,title:"Native Address:",slug:"native-address",normalizedTitle:"native address:",charIndex:5375},{level:2,title:"Normalized Address:",slug:"normalized-address",normalizedTitle:"normalized address:",charIndex:5639},{level:2,title:"Observer:",slug:"observer",normalizedTitle:"observer:",charIndex:5809},{level:2,title:"Optimistic Indexing:",slug:"optimistic-indexing",normalizedTitle:"optimistic indexing:",charIndex:5988},{level:2,title:"Owner:",slug:"owner",normalizedTitle:"owner:",charIndex:6143},{level:2,title:"Owner Address:",slug:"owner-address",normalizedTitle:"owner address:",charIndex:6196},{level:2,title:"Period:",slug:"period",normalizedTitle:"period:",charIndex:6252},{level:2,title:"Permaweb:",slug:"permaweb",normalizedTitle:"permaweb:",charIndex:6481},{level:2,title:"Protocol Balance:",slug:"protocol-balance",normalizedTitle:"protocol balance:",charIndex:6599},{level:2,title:"Protocol Rewards:",slug:"protocol-rewards",normalizedTitle:"protocol rewards:",charIndex:6889},{level:2,title:"Public Key:",slug:"public-key",normalizedTitle:"public key:",charIndex:7022},{level:2,title:"Seeding:",slug:"seeding",normalizedTitle:"seeding:",charIndex:7207},{level:2,title:"Staking (of tokens):",slug:"staking-of-tokens",normalizedTitle:"staking (of tokens):",charIndex:7517},{level:2,title:"Transaction ID (txID):",slug:"transaction-id-txid",normalizedTitle:"transaction id (txid):",charIndex:7824},{level:2,title:"Trust-minimization:",slug:"trust-minimization",normalizedTitle:"trust-minimization:",charIndex:8047},{level:2,title:"Vault:",slug:"vault",normalizedTitle:"vault:",charIndex:8424}],headersStr:"aoComputer (AO): Arweave Name System (ArNS): Arweave Name Token (ANT), “Name Token”: Arweave Network Standards (ANS): Base Layer Transaction: Bundle, bundling: Bundled Data Item (BDI): Bundler: Chunk: Decentralized, decentralization, etc: Epoch: Gateway: Gateway Address Registry (GAR): Indexing: Layer 2 Infrastructure: Manifest (aka Path Manifest, Arweave Manifest): Mempool: Miner (aka Arweave Node): Native Address: Normalized Address: Observer: Optimistic Indexing: Owner: Owner Address: Period: Permaweb: Protocol Balance: Protocol Rewards: Public Key: Seeding: Staking (of tokens): Transaction ID (txID): Trust-minimization: Vault:",content:"# Glossary\n\nMany novel terms and acronyms are used by the Arweave ecosystem as well as some new ones introduced by AR.IO. The list below is intended to serve as a non-exhaustive reference of those terms:\n\n\n# aoComputer (AO):\n\nThe aoComputer is the actor oriented machine that emerges from the network of nodes that adhere to its core data protocol, running on the Arweave network. It is a single, unified computing environment, hosted on a heterogenous set of nodes in a distributed network. AO is designed to offer an environment in which an arbitrary number of parallel processes can be resident, coordinating through an open message passing layer. This message passing standard connects the machine's independently operating processes together into a 'web' -- in the same way that websites operate on independent servers but are conjoined into a cohesive, unified experience via hyperlinks.\n\n\n# Arweave Name System (ArNS):\n\nA decentralized and censorship-resistant naming system enabled by AR.IO gateways which connects friendly names to permaweb applications, pages, and data.\n\n\n# Arweave Name Token (ANT), “Name Token”:\n\nAn aoComputer based token, that is connected to each registered ArNS Name. Each ANT gives the owner the ability to update the subdomains and Arweave transaction IDs used by the registered name as well as transfer ownership and other functions.\n\n\n# Arweave Network Standards (ANS):\n\nDrafts and finalized standards for data formats, tag formats, data protocols, custom gateway features and anything that is built on top the Arweave Network. Specific standards are denoted by an associated number, e.g., ANS-###.\n\n\n# Base Layer Transaction:\n\nRefers to one of up to 1,000 transactions that make up a single Arweave block. A base layer transaction may contain bundled data items.\n\n\n# Bundle, bundling:\n\nAn Arweave concept introduced in ANS-104 that allows for a way of writing multiple independent data transactions into one base layer transaction. Bundled transactions contain multiple independent transactions, called data items, wrapped into one larger transaction. This offers two major network benefits:\n\n * A scaling solution for increasing the throughput of uploads to the Arweave network,\n\n * Allows delegation of payment for an upload to a third party, while maintaining the identity and signature of the person who created the upload, without them needing to have a wallet with funds.\n\n\n# Bundled Data Item (BDI):\n\nA data item / transaction nested within an ANS-104 bundled transaction.\n\n\n# Bundler:\n\nA third-party service and gateway feature that bundles data files on a user’s behalf.\n\n\n# Chunk:\n\nA chunk is a unit of data that is stored on the Arweave network. It represents a piece of a larger file that has been split into smaller, manageable segments for efficient storage and retrieval.\n\n\n# Decentralized, decentralization, etc:\n\nA nonbinary, many axis scale enabling a system or platform to be: permissionless, trustless, verifiable, transparent, open-source, composable, resilient, and censorship resistant. Ultimately, something that is decentralized is not prone to single points of failure or influence.\n\n\n# Epoch:\n\nA specific duration (e.g., one block-week) during which network activities and evaluations are conducted. It serves as a key time frame for processes such as observation duties, performance assessments, and reward distributions within the network's protocols.\n\n\n# Gateway:\n\nA node operating on the Arweave network that provides services for reading from, writing to, and indexing the data stored on the permaweb. Sometimes referred to as “permaweb nodes”.\n\n\n# Gateway Address Registry (GAR):\n\nA decentralized directory maintained in the AR.IO smart contract. It serves as the authoritative list of all registered gateways on the AR.IO Network. The registry provides detailed metadata about each gateway to facilitate discovery, health monitoring, and data sharing among permaweb apps and users. The GAR is designed to be easily queryable, sortable, and filterable by end users and clients, allowing for tailored selections based on various criteria to meet specific use cases.\n\n\n# Indexing:\n\nThe act of organizing transaction data tags into queryable databases.\n\n\n# Layer 2 Infrastructure:\n\nLayer 2 refers to the technology / infrastructure stack built “above” a base layer. In this use, the AR.IO Network would be considered Layer 2 infrastructure to the base Arweave protocol.\n\n\n# Manifest (aka Path Manifest, Arweave Manifest):\n\nSpecial “aggregate” files uploaded to Arweave that map user-definable sub-paths with other Arweave transaction IDs. This allows users to create logical groups of content, for example a directory of related files, or the files and assets that make up a web page or application. Instead of having to manually collate these assets, manifests group them together so that an entire website or app can be launched from a single manifest file. Gateways can interpret this structure, so that users can then reference individual transactions by their file name and/or path.\n\n\n# Mempool:\n\nShort for \"memory pool,\" is a component of Arweave mining nodes that temporarily stores valid transactions that have been broadcasted to the network but have not yet been added to a block.\n\n\n# Miner (aka Arweave Node):\n\nA node operating on the Arweave network responsible for data storage and recall.\n\n\n# Native Address:\n\nThe way public addresses are commonly (or by spec) represented in their native blockchain. Arweave keys are 43 character base64url representations of the public key, while Ethereum keys use a different hashing algorithm and start with 0x etc.\n\n\n# Normalized Address:\n\n43 character base64url representation of the sha256 hash of a public key. Public keys for other chains can be normalized by this representation.\n\n\n# Observer:\n\nA gateway selected to evaluate the performance of peer gateways in resolving ArNS names. Observers assess and report on the operational efficacy of other gateways.\n\n\n# Optimistic Indexing:\n\nIndexing transaction or data item headers before the associated L1 transaction has been accepted and confirmed in a chain block.\n\n\n# Owner:\n\nGenerally, the public key of the signer.\n\n\n# Owner Address:\n\nThe normalized address of the owner\n\n\n# Period:\n\nRefers to a predefined time span (e.g., a block-day) that serves as a cycle for network activities such as dynamic pricing. It is a fundamental unit of time for operational and protocol processes within the network.\n\n\n# Permaweb:\n\nThe permaweb is the permanent and decentralized web of files and applications built on top of Arweave.\n\n\n# Protocol Balance:\n\nThe primary sink and source of IO tokens circulating through the AR.IO Network. This balance is akin to a central vault or wallet programmatically encoded into the network’s smart contract from which ArNS revenue is accumulated and incentive rewards are distributed.\n\n\n# Protocol Rewards:\n\nIO Token incentive rewards distributed by the protocol to the network’s eligible users and gateway operators.\n\n\n# Public Key:\n\nThe publicly known keys for a signer (wallet). Public keys are different byte lengths depending on the signer type (e.g. Arweave vs. Ethereum (ECDSA), vs Solana, etc.)\n\n\n# Seeding:\n\nRefers to the act of propagating new data throughout the network. Miner nodes seed Arweave base layer transaction data to other miners, while gateways ensure that the transactions they receive reach the Arweave nodes. Both gateways and Arweave nodes seed base layer transactions and data chunks.\n\n\n# Staking (of tokens):\n\nRefers to the process of locking IO tokens into a protocol-facilitated vault, temporarily removing them from circulation until unlocked. This action represents an opportunity cost for the gateway operator and serves as a motivator to prioritize the network's collective interests.\n\n\n# Transaction ID (txID):\n\nEvery transaction and data file uploaded to Arweave is assigned a unique identifier code known as the Transaction ID. These txID’s can be referenced by users to easily locate and retrieve files.\n\n\n# Trust-minimization:\n\nRelates to enacting network security by minimizing the number of entities and the degree to which they must be trusted to achieve reliable network interactions. A network with trust-minimizing mechanisms means that it has reduced exposure to undesirable third-party actions and built-in incentives to reward good behavior while punishing bad behavior.\n\n\n# Vault:\n\nToken vaults are protocol level mechanisms used to contain staked tokens over time. Each vault contains a starting block height, ending block height (if applicable), along with a balance of tokens.",normalizedContent:"# glossary\n\nmany novel terms and acronyms are used by the arweave ecosystem as well as some new ones introduced by ar.io. the list below is intended to serve as a non-exhaustive reference of those terms:\n\n\n# aocomputer (ao):\n\nthe aocomputer is the actor oriented machine that emerges from the network of nodes that adhere to its core data protocol, running on the arweave network. it is a single, unified computing environment, hosted on a heterogenous set of nodes in a distributed network. ao is designed to offer an environment in which an arbitrary number of parallel processes can be resident, coordinating through an open message passing layer. this message passing standard connects the machine's independently operating processes together into a 'web' -- in the same way that websites operate on independent servers but are conjoined into a cohesive, unified experience via hyperlinks.\n\n\n# arweave name system (arns):\n\na decentralized and censorship-resistant naming system enabled by ar.io gateways which connects friendly names to permaweb applications, pages, and data.\n\n\n# arweave name token (ant), “name token”:\n\nan aocomputer based token, that is connected to each registered arns name. each ant gives the owner the ability to update the subdomains and arweave transaction ids used by the registered name as well as transfer ownership and other functions.\n\n\n# arweave network standards (ans):\n\ndrafts and finalized standards for data formats, tag formats, data protocols, custom gateway features and anything that is built on top the arweave network. specific standards are denoted by an associated number, e.g., ans-###.\n\n\n# base layer transaction:\n\nrefers to one of up to 1,000 transactions that make up a single arweave block. a base layer transaction may contain bundled data items.\n\n\n# bundle, bundling:\n\nan arweave concept introduced in ans-104 that allows for a way of writing multiple independent data transactions into one base layer transaction. bundled transactions contain multiple independent transactions, called data items, wrapped into one larger transaction. this offers two major network benefits:\n\n * a scaling solution for increasing the throughput of uploads to the arweave network,\n\n * allows delegation of payment for an upload to a third party, while maintaining the identity and signature of the person who created the upload, without them needing to have a wallet with funds.\n\n\n# bundled data item (bdi):\n\na data item / transaction nested within an ans-104 bundled transaction.\n\n\n# bundler:\n\na third-party service and gateway feature that bundles data files on a user’s behalf.\n\n\n# chunk:\n\na chunk is a unit of data that is stored on the arweave network. it represents a piece of a larger file that has been split into smaller, manageable segments for efficient storage and retrieval.\n\n\n# decentralized, decentralization, etc:\n\na nonbinary, many axis scale enabling a system or platform to be: permissionless, trustless, verifiable, transparent, open-source, composable, resilient, and censorship resistant. ultimately, something that is decentralized is not prone to single points of failure or influence.\n\n\n# epoch:\n\na specific duration (e.g., one block-week) during which network activities and evaluations are conducted. it serves as a key time frame for processes such as observation duties, performance assessments, and reward distributions within the network's protocols.\n\n\n# gateway:\n\na node operating on the arweave network that provides services for reading from, writing to, and indexing the data stored on the permaweb. sometimes referred to as “permaweb nodes”.\n\n\n# gateway address registry (gar):\n\na decentralized directory maintained in the ar.io smart contract. it serves as the authoritative list of all registered gateways on the ar.io network. the registry provides detailed metadata about each gateway to facilitate discovery, health monitoring, and data sharing among permaweb apps and users. the gar is designed to be easily queryable, sortable, and filterable by end users and clients, allowing for tailored selections based on various criteria to meet specific use cases.\n\n\n# indexing:\n\nthe act of organizing transaction data tags into queryable databases.\n\n\n# layer 2 infrastructure:\n\nlayer 2 refers to the technology / infrastructure stack built “above” a base layer. in this use, the ar.io network would be considered layer 2 infrastructure to the base arweave protocol.\n\n\n# manifest (aka path manifest, arweave manifest):\n\nspecial “aggregate” files uploaded to arweave that map user-definable sub-paths with other arweave transaction ids. this allows users to create logical groups of content, for example a directory of related files, or the files and assets that make up a web page or application. instead of having to manually collate these assets, manifests group them together so that an entire website or app can be launched from a single manifest file. gateways can interpret this structure, so that users can then reference individual transactions by their file name and/or path.\n\n\n# mempool:\n\nshort for \"memory pool,\" is a component of arweave mining nodes that temporarily stores valid transactions that have been broadcasted to the network but have not yet been added to a block.\n\n\n# miner (aka arweave node):\n\na node operating on the arweave network responsible for data storage and recall.\n\n\n# native address:\n\nthe way public addresses are commonly (or by spec) represented in their native blockchain. arweave keys are 43 character base64url representations of the public key, while ethereum keys use a different hashing algorithm and start with 0x etc.\n\n\n# normalized address:\n\n43 character base64url representation of the sha256 hash of a public key. public keys for other chains can be normalized by this representation.\n\n\n# observer:\n\na gateway selected to evaluate the performance of peer gateways in resolving arns names. observers assess and report on the operational efficacy of other gateways.\n\n\n# optimistic indexing:\n\nindexing transaction or data item headers before the associated l1 transaction has been accepted and confirmed in a chain block.\n\n\n# owner:\n\ngenerally, the public key of the signer.\n\n\n# owner address:\n\nthe normalized address of the owner\n\n\n# period:\n\nrefers to a predefined time span (e.g., a block-day) that serves as a cycle for network activities such as dynamic pricing. it is a fundamental unit of time for operational and protocol processes within the network.\n\n\n# permaweb:\n\nthe permaweb is the permanent and decentralized web of files and applications built on top of arweave.\n\n\n# protocol balance:\n\nthe primary sink and source of io tokens circulating through the ar.io network. this balance is akin to a central vault or wallet programmatically encoded into the network’s smart contract from which arns revenue is accumulated and incentive rewards are distributed.\n\n\n# protocol rewards:\n\nio token incentive rewards distributed by the protocol to the network’s eligible users and gateway operators.\n\n\n# public key:\n\nthe publicly known keys for a signer (wallet). public keys are different byte lengths depending on the signer type (e.g. arweave vs. ethereum (ecdsa), vs solana, etc.)\n\n\n# seeding:\n\nrefers to the act of propagating new data throughout the network. miner nodes seed arweave base layer transaction data to other miners, while gateways ensure that the transactions they receive reach the arweave nodes. both gateways and arweave nodes seed base layer transactions and data chunks.\n\n\n# staking (of tokens):\n\nrefers to the process of locking io tokens into a protocol-facilitated vault, temporarily removing them from circulation until unlocked. this action represents an opportunity cost for the gateway operator and serves as a motivator to prioritize the network's collective interests.\n\n\n# transaction id (txid):\n\nevery transaction and data file uploaded to arweave is assigned a unique identifier code known as the transaction id. these txid’s can be referenced by users to easily locate and retrieve files.\n\n\n# trust-minimization:\n\nrelates to enacting network security by minimizing the number of entities and the degree to which they must be trusted to achieve reliable network interactions. a network with trust-minimizing mechanisms means that it has reduced exposure to undesirable third-party actions and built-in incentives to reward good behavior while punishing bad behavior.\n\n\n# vault:\n\ntoken vaults are protocol level mechanisms used to contain staked tokens over time. each vault contains a starting block height, ending block height (if applicable), along with a balance of tokens.",charsets:{}},{title:"Managing ArNS Assets",frontmatter:{next:!1},regularPath:"/guides/arns/managing.html",relativePath:"guides/arns/managing.md",key:"v-657f8880",path:"/guides/arns/managing.html",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:27},{level:2,title:"Names",slug:"names",normalizedTitle:"names",charIndex:552},{level:2,title:"ANTs",slug:"ants",normalizedTitle:"ants",charIndex:839}],headersStr:"Overview Names ANTs",content:'# Managing ArNS Assets\n\n\n# Overview\n\nFrom the Manage Assets page of arns.app, you can view details about your registered names, assign new Target IDs for your names to resolve to, or register new undernames for your ArNS names.\n\nAccess the Manage Assets page by connecting your Arweave wallet, and clicking on the account button displaying your wallet address (the connect button if you are not connected), then selecting "Manage Assets" from the menu.\n\nYour browser does not support the video tag.\n\nThe Manage Assets page features two important tabs. Names and ANTS.\n\n\n# Names\n\nThe Names tab displays all of the ArNS names registered to the currently connected wallet. Each name has its own "details" button which allows you to view details about the name, extend the lease period, or increase the available undernames for that name.\n\n\n# ANTs\n\nThe ANTs tab displays each ANT owned by the connected wallet (except for advanced use cases, each ArNS name will have its own ANT). You can view and create new undernames using the "Undernames" button, or access advanced management options by clicking on the "manage" icon (shaped like a gear).\n\nThe Advanced manage page allows you to transfer ownership, add or remove controllers (other wallets who are able to manage an ANT) or set/modify a Target ID for a name to resolve to.',normalizedContent:'# managing arns assets\n\n\n# overview\n\nfrom the manage assets page of arns.app, you can view details about your registered names, assign new target ids for your names to resolve to, or register new undernames for your arns names.\n\naccess the manage assets page by connecting your arweave wallet, and clicking on the account button displaying your wallet address (the connect button if you are not connected), then selecting "manage assets" from the menu.\n\nyour browser does not support the video tag.\n\nthe manage assets page features two important tabs. names and ants.\n\n\n# names\n\nthe names tab displays all of the arns names registered to the currently connected wallet. each name has its own "details" button which allows you to view details about the name, extend the lease period, or increase the available undernames for that name.\n\n\n# ants\n\nthe ants tab displays each ant owned by the connected wallet (except for advanced use cases, each arns name will have its own ant). you can view and create new undernames using the "undernames" button, or access advanced management options by clicking on the "manage" icon (shaped like a gear).\n\nthe advanced manage page allows you to transfer ownership, add or remove controllers (other wallets who are able to manage an ant) or set/modify a target id for a name to resolve to.',charsets:{}},{title:"Registering an ArNS name",frontmatter:{},regularPath:"/guides/arns/registering.html",relativePath:"guides/arns/registering.md",key:"v-401d6fcc",path:"/guides/arns/registering.html",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:31},{level:2,title:"Connect Your Wallet",slug:"connect-your-wallet",normalizedTitle:"connect your wallet",charIndex:466},{level:2,title:"Checking Availability",slug:"checking-availability",normalizedTitle:"checking availability",charIndex:763},{level:2,title:"Configure Your Purchase",slug:"configure-your-purchase",normalizedTitle:"configure your purchase",charIndex:1525},{level:2,title:"Confirm Your Purchase",slug:"confirm-your-purchase",normalizedTitle:"confirm your purchase",charIndex:2415},{level:2,title:"Auctions",slug:"auctions",normalizedTitle:"auctions",charIndex:249}],headersStr:"Overview Connect Your Wallet Checking Availability Configure Your Purchase Confirm Your Purchase Auctions",content:'# Registering an ArNS name\n\n\n# Overview\n\nThere are two options when registering an ArNS name. You can purchase the name outright, or lease it for a period of 1 to 5 years. Registrations are further broken down into instant buys, and dutch auctions. Auctions are required for purchases of certain names in a specified character length range. Find more information about when an auction is required, as well as the rules an ArNS name must follow to be valid here.\n\n\n# Connect Your Wallet\n\nIn order to purchase ArNS names, you will need to have a connected Arweave wallet in order to sign and pay for the transaction. Connect your wallet by clicking the "Connect" button in the top right, and following the prompts.\n\nYour browser does not support the video tag.\n\n\n# Checking Availability\n\nThe home page of arns.app features a search box for checking if a specific ArNS name is available for registration. Indicators below the box can help to make sure you are complying with the technical requirements for name validity as you type.\n\nSimply type out the name you would like to register and click on the search icon next to the text box. A check will be performed to let you know if your chosen name is available or already in use.\n\nNOTE: 1 to 4 character names are not available during the testnet.\n\nor\n\nIf a name is unavailable, information about the name\'s registration period and current owner will be displayed. If it is available, a "Register" button will appear, allowing you to move to the next step in registration.\n\n\n# Configure Your Purchase\n\nAfter clicking "Register" on a valid and available name, you will be prompted to connect a wallet using ArConnect if you have not already done so. Support for other wallets will be added in the future.\n\nOnce you are connected, you will be shown a page to configure your purchase. You will be able to select if you want to lease or buy the name, and the length of the lease. A notice will appear if your purchase requires an auction.\n\nYou can also use this page to assign the name to an existing Arweave Name Token (ANT), or set an Arweave Transaction ID (Target ID) for the name to resolve to. You will be able to set or change the Target ID after your purchase from the asset management page.\n\nTowards the bottom of the page, you can also see the cost of your currently configured purchase in IO tokens, and the AR required to pay for gas for the transaction.\n\n\n# Confirm Your Purchase\n\nThe final page before submitting your purchase shows a summary of your purchase. If everything looks correct, click on the "confirm" button to finalize the transaction. Remain on the page while the transaction processes.\n\n\n\n# Auctions\n\nNo additional steps are necessary to initiate a purchase that requires an auction. However, the name will not immediately become yours. Instead, confirming your purchase will begin the auction.\n\nThe IO cost displayed on the confirmation page will be frozen by the aoComputer contract, and used to finalize the purchase once the the auction drops to the floor price. You, or anyone else, may purchase the name at any time for the current auction price. You can click on the "View Auction" button from your confirmation page, or find your auction in the "Live Auctions" tab at the top of the screen to view the current auction price, and how it will change over time. If someone else purchases the name prior to the auction reaching the floor price, your frozen tokens will be released to you.',normalizedContent:'# registering an arns name\n\n\n# overview\n\nthere are two options when registering an arns name. you can purchase the name outright, or lease it for a period of 1 to 5 years. registrations are further broken down into instant buys, and dutch auctions. auctions are required for purchases of certain names in a specified character length range. find more information about when an auction is required, as well as the rules an arns name must follow to be valid here.\n\n\n# connect your wallet\n\nin order to purchase arns names, you will need to have a connected arweave wallet in order to sign and pay for the transaction. connect your wallet by clicking the "connect" button in the top right, and following the prompts.\n\nyour browser does not support the video tag.\n\n\n# checking availability\n\nthe home page of arns.app features a search box for checking if a specific arns name is available for registration. indicators below the box can help to make sure you are complying with the technical requirements for name validity as you type.\n\nsimply type out the name you would like to register and click on the search icon next to the text box. a check will be performed to let you know if your chosen name is available or already in use.\n\nnote: 1 to 4 character names are not available during the testnet.\n\nor\n\nif a name is unavailable, information about the name\'s registration period and current owner will be displayed. if it is available, a "register" button will appear, allowing you to move to the next step in registration.\n\n\n# configure your purchase\n\nafter clicking "register" on a valid and available name, you will be prompted to connect a wallet using arconnect if you have not already done so. support for other wallets will be added in the future.\n\nonce you are connected, you will be shown a page to configure your purchase. you will be able to select if you want to lease or buy the name, and the length of the lease. a notice will appear if your purchase requires an auction.\n\nyou can also use this page to assign the name to an existing arweave name token (ant), or set an arweave transaction id (target id) for the name to resolve to. you will be able to set or change the target id after your purchase from the asset management page.\n\ntowards the bottom of the page, you can also see the cost of your currently configured purchase in io tokens, and the ar required to pay for gas for the transaction.\n\n\n# confirm your purchase\n\nthe final page before submitting your purchase shows a summary of your purchase. if everything looks correct, click on the "confirm" button to finalize the transaction. remain on the page while the transaction processes.\n\n\n\n# auctions\n\nno additional steps are necessary to initiate a purchase that requires an auction. however, the name will not immediately become yours. instead, confirming your purchase will begin the auction.\n\nthe io cost displayed on the confirmation page will be frozen by the aocomputer contract, and used to finalize the purchase once the the auction drops to the floor price. you, or anyone else, may purchase the name at any time for the current auction price. you can click on the "view auction" button from your confirmation page, or find your auction in the "live auctions" tab at the top of the screen to view the current auction price, and how it will change over time. if someone else purchases the name prior to the auction reaching the floor price, your frozen tokens will be released to you.',charsets:{}},{title:"Arweave Name System (ArNS)",frontmatter:{prev:!1},regularPath:"/guides/arns/overview.html",relativePath:"guides/arns/overview.md",key:"v-bf3acddc",path:"/guides/arns/overview.html",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:33}],headersStr:"Overview",content:"# Arweave Name System (ArNS)\n\n\n# Overview\n\nThe Arweave Name System (ArNS) is a decentralized, censorship-resistant naming system on Arweave. It allows data on Arweave to be assigned to friendly domain names. Learn more about ArNS here.\n\nThis guide will walk you through the process of purchasing and managing an ArNS name using arns.app, the official ArNS portal from AR.IO.",normalizedContent:"# arweave name system (arns)\n\n\n# overview\n\nthe arweave name system (arns) is a decentralized, censorship-resistant naming system on arweave. it allows data on arweave to be assigned to friendly domain names. learn more about arns here.\n\nthis guide will walk you through the process of purchasing and managing an arns name using arns.app, the official arns portal from ar.io.",charsets:{}},{title:"Trading ANTs on Bazar",frontmatter:{permalink:"/guides/ants-on-bazar",prev:!1,next:!1},regularPath:"/guides/ants-on-bazar.html",relativePath:"guides/ants-on-bazar.md",key:"v-332240f8",path:"/guides/ants-on-bazar/",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:28},{level:2,title:"Bazar Profile",slug:"bazar-profile",normalizedTitle:"bazar profile",charIndex:412},{level:3,title:"Create a Profile",slug:"create-a-profile",normalizedTitle:"create a profile",charIndex:735},{level:2,title:"Transfer ANT to the Profile",slug:"transfer-ant-to-the-profile",normalizedTitle:"transfer ant to the profile",charIndex:1303},{level:2,title:"Restore Controllers",slug:"restore-controllers",normalizedTitle:"restore controllers",charIndex:1853}],headersStr:"Overview Bazar Profile Create a Profile Transfer ANT to the Profile Restore Controllers",content:'# Trading ANTs on Bazar\n\n\n# Overview\n\nArweave Name Tokens are Atomic Asset Spec compliant AO tokens that manage records and permission for ArNS names. Because the ANT spec is compliant with the Atomic Asset Spec, they are tradable on Bazar, which is a decentralized market place for Atomic Assets on AO. There are a few simple steps that are required in order to make an ANT available on Bazar to be traded.\n\n\n# Bazar Profile\n\nBazar relies on profiles for displaying user information and tradable assets. Profiles are AO processes that contain user specified information like a name, a nickname, and images associated with the profile. Profiles also track assets held by the profile in order to provide their information to bazar.\n\n\n# Create a Profile\n\nIf you do not already have a profile associated with your wallet, you can easily create one on using the "Create your profile" button on bazar after connecting your wallet:\n\nYou will be prompted to add, at a minimum, a name and handle (nickname) to associate with the profile. These values can be changed later.\n\nClick "Save" at the bottom to finish creation of your profile.\n\nOnce your profile is created, you can get its ao process Id at any time by clicking on the user icon in Bazar, and then the "Copy profile address" button from the menu.\n\n\n# Transfer ANT to the Profile\n\nBazar profiles only track assets that are held in the profile process, not in a user wallet. In order for an ANT to be displayed and transferred on Bazar, it must first be transferred into the Bazar profile. This can be done easily using arns.app in your manage page for a given name.\n\n\n\nOnce an ANT is transferred into the profile process, it will automatically be detected and displayed by Bazar. It can be transferred or sold just like any other atomic asset on the marketplace, with no additional steps required.\n\n\n# Restore Controllers\n\nOptional\n\nThis is an optional step that will enable updating an ANT\'s Target Id without transferring it back into your wallet. This step may be safely skipped without affecting the ANT\'s functionality or tradability on Bazar.\n\nTransferring an ANT to a new wallet or AO process resets all authorized controllers, or non-owner entities that are allowed to update some settings on the ArNS name. It does not reset the Target Id that the ArNS name is pointing to. If you want to be able to update the Target ID and undernames from your wallet using arns.app, you will need to set your wallet address as a controller for the ANT while it is in your profile. The easiest way to do this is using aos.\n\nIf you have not used aos before, you can find installation instructions here\n\nUsing aos, you can log directly into your profile process with the command:\n\naos --wallet "/path/to/your/keyfile"\n\n\nBe sure to replace with the process Id for your profile process, and /path/to/your/keyfile with the path to the keyfile for the wallet you created the profile with.\n\nOnce you are logged in with aos, you can send a message to the ANT in your profile to set your wallet as a controller:\n\nSend({ Target = "", Action = "Add-Controller", Controller = "" })\n\n\nReplace with the process Id of the ANT you transferred into your profile, and with your wallet address.',normalizedContent:'# trading ants on bazar\n\n\n# overview\n\narweave name tokens are atomic asset spec compliant ao tokens that manage records and permission for arns names. because the ant spec is compliant with the atomic asset spec, they are tradable on bazar, which is a decentralized market place for atomic assets on ao. there are a few simple steps that are required in order to make an ant available on bazar to be traded.\n\n\n# bazar profile\n\nbazar relies on profiles for displaying user information and tradable assets. profiles are ao processes that contain user specified information like a name, a nickname, and images associated with the profile. profiles also track assets held by the profile in order to provide their information to bazar.\n\n\n# create a profile\n\nif you do not already have a profile associated with your wallet, you can easily create one on using the "create your profile" button on bazar after connecting your wallet:\n\nyou will be prompted to add, at a minimum, a name and handle (nickname) to associate with the profile. these values can be changed later.\n\nclick "save" at the bottom to finish creation of your profile.\n\nonce your profile is created, you can get its ao process id at any time by clicking on the user icon in bazar, and then the "copy profile address" button from the menu.\n\n\n# transfer ant to the profile\n\nbazar profiles only track assets that are held in the profile process, not in a user wallet. in order for an ant to be displayed and transferred on bazar, it must first be transferred into the bazar profile. this can be done easily using arns.app in your manage page for a given name.\n\n\n\nonce an ant is transferred into the profile process, it will automatically be detected and displayed by bazar. it can be transferred or sold just like any other atomic asset on the marketplace, with no additional steps required.\n\n\n# restore controllers\n\noptional\n\nthis is an optional step that will enable updating an ant\'s target id without transferring it back into your wallet. this step may be safely skipped without affecting the ant\'s functionality or tradability on bazar.\n\ntransferring an ant to a new wallet or ao process resets all authorized controllers, or non-owner entities that are allowed to update some settings on the arns name. it does not reset the target id that the arns name is pointing to. if you want to be able to update the target id and undernames from your wallet using arns.app, you will need to set your wallet address as a controller for the ant while it is in your profile. the easiest way to do this is using aos.\n\nif you have not used aos before, you can find installation instructions here\n\nusing aos, you can log directly into your profile process with the command:\n\naos --wallet "/path/to/your/keyfile"\n\n\nbe sure to replace with the process id for your profile process, and /path/to/your/keyfile with the path to the keyfile for the wallet you created the profile with.\n\nonce you are logged in with aos, you can send a message to the ant in your profile to set your wallet as a controller:\n\nsend({ target = "", action = "add-controller", controller = "" })\n\n\nreplace with the process id of the ant you transferred into your profile, and with your wallet address.',charsets:{}},{title:"Deploy a Website or Application",frontmatter:{permalink:"/guides/perma-deploy"},regularPath:"/guides/github-flow.html",relativePath:"guides/github-flow.md",key:"v-598bd946",path:"/guides/perma-deploy/",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:38},{level:2,title:"Getting Started",slug:"getting-started",normalizedTitle:"getting started",charIndex:741},{level:3,title:"Installing package",slug:"installing-package",normalizedTitle:"installing package",charIndex:761},{level:3,title:"Adding a Deploy Script",slug:"adding-a-deploy-script",normalizedTitle:"adding a deploy script",charIndex:1738},{level:3,title:"Providing Arweave Wallet Keys",slug:"providing-arweave-wallet-keys",normalizedTitle:"providing arweave wallet keys",charIndex:3380},{level:3,title:"Create Github Secrets",slug:"create-github-secrets",normalizedTitle:"create github secrets",charIndex:4364},{level:3,title:"Create Action Workflow",slug:"create-action-workflow",normalizedTitle:"create action workflow",charIndex:5232},{level:2,title:"Deploying App",slug:"deploying-app",normalizedTitle:"deploying app",charIndex:6555}],headersStr:"Overview Getting Started Installing package Adding a Deploy Script Providing Arweave Wallet Keys Create Github Secrets Create Action Workflow Deploying App",content:'# Deploy a Website or Application\n\n\n# Overview\n\nWith the growing popularity of permanently deployed apps, hosted on Arweave, along with the growing list of tools offered by ar.io, several methods have been developed to automate the process of deploying a website and updating the ArNS name pointed at it. A particularly useful tool for this is permaweb-deploy from Forward Research.\n\npermaweb-deploy is a cli tool that handles uploading a build folder to Arweave using Turbo, creating a manifest, and then updating an ArNS name to point at the new manifest. It being a cli tool makes it very easy to incorporate into a github actions flow. Setting up an automated deployment with permaweb-deploy is simple, but does require a few steps.\n\n\n# Getting Started\n\n\n# Installing package\n\npermaweb-deploy is an npm package, and must be installed in any project before it can be used. If you are using npm, you can install the package with the below command:\n\nnpm install permaweb-deploy\n\n\nIf you prefer yarn for your package installations, the process is slightly more involved. permaweb-deploy is not designed for installation with yarn, so you must provide the additional argument ignore-engines in order to skip over the yarn version error you would normally get with installation. There are two methods for doing so:\n\n * Directly in the install command\n \n yarn add permaweb-deploy --ignore-engines\n \n\n * In a .yarnc file\n \n You can provide a file, named .yarnc in the same directory as your package.json in order to assign specific instructions to all of your yarn commands. Creating a .yarnc file with the line\n \n ignore-engines true\n \n \n will have the same effect as providing the flag directly in your yarn command\n\n\n# Adding a Deploy Script\n\nThe simplest way to utilize the permaweb-deploy tool is to build it into a script in your package.json. Here you will provide all of the variables that permaweb-deploy needs in order to function properly, as well as ensure that your app is statically built before being uploaded.\n\n"scripts": {\n "build": "vuepress build src",\n "deploy": "npm run build && permaweb-deploy --deploy-folder ./src/.vuepress/dist --ant-process $DEPLOY_ANT_PROCESS_ID"\n },\n\n\nThe above example shows a build script for a vuepress app, which will build the app into a static folder for deployment, and a deploy script which runs build and then permaweb-deploy. Your build script will look different depending on the framework you are using, but most will provide that for you when you create your app.\n\nThe permaweb-deploy command has two required arguments:\n\n * --deploy-folder This is the relative path (from your package.json) to the build folder you want to upload. In a vuepress app, that will be ./src/.vuepress/dist unless you manually specify otherwise in your vuepress configuration. It will be different depending on your chosen framework and if you have modified the default location.\n\n * --ant-process This is the process id of the Arweave Name Token for the ArNS name you want to deploy to. You can find this id by viewing the name on arns.app. Providing the process id is crucial for making sure the update is sent to the ao process that controls the ArNS name.\n\nThere is also the additional, optional flag --undername. If you want to deploy your app to an undername on an ArNS name, provide that name with this flag.\n\n\n# Providing Arweave Wallet Keys\n\nWhile using permaweb-deploy, you will be uploading data to Arweave using Turbo, as well as performing protected actions on an Arweave Name Token. Because of this, you will need to provide the keys to an Arweave wallet in order for the actions to be successful. The wallet must contain Turbo Credits to pay for the upload, and it must either be a controller or the owner of the ArNS name you are trying to update.\n\npermaweb-deploy requires your wallet keyfile be encoded in base64 format. You can convert a local keyfile to base64, and copy the new value to your clipboard by using one of the below commands, depending on your operating system:\n\n * Linux\n\nbase64 wallet.json | xclip -selection clipboard\n\n\n * Mac\n\nbase64 wallet.json | pbcopy\n\n\n * Windows (CMD)\n\nbase64 wallet.json | clip\n\n\nBe sure to replace wallet.json with the path to your chosen wallet keyfile. Once you have this value saved to your clipboard, you can move on to the next step.\n\n\n# Create Github Secrets\n\nAnyone who has your wallet keyfile (including the base64 formatted keyfile) has full control over your wallet and any of its assets. Because of this, you do not want to include it directly in your package.json script. Instead, keep the value safe by storing it in a github secret. You will create the secrets in the settings tab on your github repo, and the secrets will act as environmental variables in the github actions workflow.\n\nYou will need to create 2 secrets"\n\n * DEPLOY_KEY: This is the base64 encoded version of your Arweave wallet keyfile.\n\n * ANT_PROCESS: This is the process id of the Arweave Name Token for your ArNS name. This value is not as sensitive, and may be provided in your package.json without issue, but it is a very long hashed string, and it is much easier to work with the variable name than the string itself.\n\n\n# Create Action Workflow\n\nGithub Actions allow you to perform specific actions whenever you push code to github. They are handled by using .yaml files provided in /.github/workflows.\n\nTo get started, create a new file named deploy.yaml in the workflows directory, then paste the below inside of it:\n\nname: Arweave Deploy\n\non:\n push:\n branches:\n - main\n\njobs:\n Arweave-build-and-deploy:\n runs-on: ubuntu-latest\n\n steps:\n - uses: actions/checkout@v2\n\n - name: Setup Node.js environment\n uses: actions/setup-node@v2\n with:\n node-version: "20"\n\n - name: Run deployment script\n env:\n DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}\n DEPLOY_ANT_PROCESS: ${{ secrets.DEPLOY_ANT_PROCESS}}\n run: |\n npm install\n npm run deploy\n\n\nThe above tells github to perform these actions when you push new code to the branch main\n\nIt then sets up a vps with nodejs v 20. When that is complete, it installs dependencies for your project using npm (You will need to add a step to install yarn if that is your preferred package manager), and runs your deploy script, which builds your static folder and then runs permaweb-deploy. It also loads your github secrets into environmental variables that can be used by your deploy script.\n\n\n# Deploying App\n\nWith the above setup complete, the only thing you need to do to deploy a new version of a permasite app to Arweave is push the updated code to branch main on github. Everything else is fully automated.',normalizedContent:'# deploy a website or application\n\n\n# overview\n\nwith the growing popularity of permanently deployed apps, hosted on arweave, along with the growing list of tools offered by ar.io, several methods have been developed to automate the process of deploying a website and updating the arns name pointed at it. a particularly useful tool for this is permaweb-deploy from forward research.\n\npermaweb-deploy is a cli tool that handles uploading a build folder to arweave using turbo, creating a manifest, and then updating an arns name to point at the new manifest. it being a cli tool makes it very easy to incorporate into a github actions flow. setting up an automated deployment with permaweb-deploy is simple, but does require a few steps.\n\n\n# getting started\n\n\n# installing package\n\npermaweb-deploy is an npm package, and must be installed in any project before it can be used. if you are using npm, you can install the package with the below command:\n\nnpm install permaweb-deploy\n\n\nif you prefer yarn for your package installations, the process is slightly more involved. permaweb-deploy is not designed for installation with yarn, so you must provide the additional argument ignore-engines in order to skip over the yarn version error you would normally get with installation. there are two methods for doing so:\n\n * directly in the install command\n \n yarn add permaweb-deploy --ignore-engines\n \n\n * in a .yarnc file\n \n you can provide a file, named .yarnc in the same directory as your package.json in order to assign specific instructions to all of your yarn commands. creating a .yarnc file with the line\n \n ignore-engines true\n \n \n will have the same effect as providing the flag directly in your yarn command\n\n\n# adding a deploy script\n\nthe simplest way to utilize the permaweb-deploy tool is to build it into a script in your package.json. here you will provide all of the variables that permaweb-deploy needs in order to function properly, as well as ensure that your app is statically built before being uploaded.\n\n"scripts": {\n "build": "vuepress build src",\n "deploy": "npm run build && permaweb-deploy --deploy-folder ./src/.vuepress/dist --ant-process $deploy_ant_process_id"\n },\n\n\nthe above example shows a build script for a vuepress app, which will build the app into a static folder for deployment, and a deploy script which runs build and then permaweb-deploy. your build script will look different depending on the framework you are using, but most will provide that for you when you create your app.\n\nthe permaweb-deploy command has two required arguments:\n\n * --deploy-folder this is the relative path (from your package.json) to the build folder you want to upload. in a vuepress app, that will be ./src/.vuepress/dist unless you manually specify otherwise in your vuepress configuration. it will be different depending on your chosen framework and if you have modified the default location.\n\n * --ant-process this is the process id of the arweave name token for the arns name you want to deploy to. you can find this id by viewing the name on arns.app. providing the process id is crucial for making sure the update is sent to the ao process that controls the arns name.\n\nthere is also the additional, optional flag --undername. if you want to deploy your app to an undername on an arns name, provide that name with this flag.\n\n\n# providing arweave wallet keys\n\nwhile using permaweb-deploy, you will be uploading data to arweave using turbo, as well as performing protected actions on an arweave name token. because of this, you will need to provide the keys to an arweave wallet in order for the actions to be successful. the wallet must contain turbo credits to pay for the upload, and it must either be a controller or the owner of the arns name you are trying to update.\n\npermaweb-deploy requires your wallet keyfile be encoded in base64 format. you can convert a local keyfile to base64, and copy the new value to your clipboard by using one of the below commands, depending on your operating system:\n\n * linux\n\nbase64 wallet.json | xclip -selection clipboard\n\n\n * mac\n\nbase64 wallet.json | pbcopy\n\n\n * windows (cmd)\n\nbase64 wallet.json | clip\n\n\nbe sure to replace wallet.json with the path to your chosen wallet keyfile. once you have this value saved to your clipboard, you can move on to the next step.\n\n\n# create github secrets\n\nanyone who has your wallet keyfile (including the base64 formatted keyfile) has full control over your wallet and any of its assets. because of this, you do not want to include it directly in your package.json script. instead, keep the value safe by storing it in a github secret. you will create the secrets in the settings tab on your github repo, and the secrets will act as environmental variables in the github actions workflow.\n\nyou will need to create 2 secrets"\n\n * deploy_key: this is the base64 encoded version of your arweave wallet keyfile.\n\n * ant_process: this is the process id of the arweave name token for your arns name. this value is not as sensitive, and may be provided in your package.json without issue, but it is a very long hashed string, and it is much easier to work with the variable name than the string itself.\n\n\n# create action workflow\n\ngithub actions allow you to perform specific actions whenever you push code to github. they are handled by using .yaml files provided in /.github/workflows.\n\nto get started, create a new file named deploy.yaml in the workflows directory, then paste the below inside of it:\n\nname: arweave deploy\n\non:\n push:\n branches:\n - main\n\njobs:\n arweave-build-and-deploy:\n runs-on: ubuntu-latest\n\n steps:\n - uses: actions/checkout@v2\n\n - name: setup node.js environment\n uses: actions/setup-node@v2\n with:\n node-version: "20"\n\n - name: run deployment script\n env:\n deploy_key: ${{ secrets.deploy_key }}\n deploy_ant_process: ${{ secrets.deploy_ant_process}}\n run: |\n npm install\n npm run deploy\n\n\nthe above tells github to perform these actions when you push new code to the branch main\n\nit then sets up a vps with nodejs v 20. when that is complete, it installs dependencies for your project using npm (you will need to add a step to install yarn if that is your preferred package manager), and runs your deploy script, which builds your static folder and then runs permaweb-deploy. it also loads your github secrets into environmental variables that can be used by your deploy script.\n\n\n# deploying app\n\nwith the above setup complete, the only thing you need to do to deploy a new version of a permasite app to arweave is push the updated code to branch main on github. everything else is fully automated.',charsets:{cjk:!0}},{title:"Delegated Staking",frontmatter:{permalink:"/delegated-staking"},regularPath:"/guides/delegated-staking.html",relativePath:"guides/delegated-staking.md",key:"v-0d0949e4",path:"/delegated-staking/",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:24}],headersStr:"Overview",content:"# Delegated Staking\n\n\n# Overview\n\nDelegated staking is a process by which a person can stake their own IO tokens on someone elses ar.io gateway. The additional staked tokens increase that gateway's chance to be selected as an observer, and so they have the potential to earn more rewards. In exchange, the person who delegates the tokens will receive a share of the gateway's rewards. Gateway operators can set the percentage of rewards are available for delegating wallets.\n\nYou can find more specific information about delegated staking and how rewards are distributed in the ar.io whitepaper.\n\nYou can easily delegate stake to a gateway by using the Gateway Portal at ar://gateways",normalizedContent:"# delegated staking\n\n\n# overview\n\ndelegated staking is a process by which a person can stake their own io tokens on someone elses ar.io gateway. the additional staked tokens increase that gateway's chance to be selected as an observer, and so they have the potential to earn more rewards. in exchange, the person who delegates the tokens will receive a share of the gateway's rewards. gateway operators can set the percentage of rewards are available for delegating wallets.\n\nyou can find more specific information about delegated staking and how rewards are distributed in the ar.io whitepaper.\n\nyou can easily delegate stake to a gateway by using the gateway portal at ar://gateways",charsets:{}},{title:"GraphQL",frontmatter:{permalink:"/guides/graphql/"},regularPath:"/guides/gql.html",relativePath:"guides/gql.md",key:"v-c8f0091c",path:"/guides/graphql/",headers:[{level:2,title:"Overview",slug:"overview",normalizedTitle:"overview",charIndex:14},{level:2,title:"Constructing a Query",slug:"constructing-a-query",normalizedTitle:"constructing a query",charIndex:1628},{level:3,title:"Basic Syntax",slug:"basic-syntax",normalizedTitle:"basic syntax",charIndex:1653},{level:3,title:"Customizing Searches with Tags",slug:"customizing-searches-with-tags",normalizedTitle:"customizing searches with tags",charIndex:2087},{level:3,title:"Understanding Edges and Nodes",slug:"understanding-edges-and-nodes",normalizedTitle:"understanding edges and nodes",charIndex:2775},{level:3,title:"Pagination",slug:"pagination",normalizedTitle:"pagination",charIndex:4422},{level:3,title:"General Tips for Optimizing Queries",slug:"general-tips-for-optimizing-queries",normalizedTitle:"general tips for optimizing queries",charIndex:6158},{level:2,title:"Making a Query",slug:"making-a-query",normalizedTitle:"making a query",charIndex:7207},{level:3,title:"GraphQL Playground",slug:"graphql-playground",normalizedTitle:"graphql playground",charIndex:7603},{level:3,title:"Using an API",slug:"using-an-api",normalizedTitle:"using an api",charIndex:8542},{level:3,title:"Using an SDK",slug:"using-an-sdk",normalizedTitle:"using an sdk",charIndex:9763}],headersStr:"Overview Constructing a Query Basic Syntax Customizing Searches with Tags Understanding Edges and Nodes Pagination General Tips for Optimizing Queries Making a Query GraphQL Playground Using an API Using an SDK",content:"# GraphQL\n\n\n# Overview\n\nGraphQL is a powerful query language designed for modern web applications to efficiently fetch data. It enables precise queries, allowing users to specify exactly which data they need and in what format, significantly reducing the amount of unnecessary data transferred. This approach is ideal for dealing with complex systems and large datasets, as it minimizes bandwidth and improves performance. GraphQL operates through a single endpoint, streamlining the way applications communicate with databases.\n\nThe integration of GraphQL with Arweave introduces a refined method for interacting with decentralized data storage. Arweave allows for the tagging of uploaded data, facilitating enhanced searchability and retrievability within its blockchain network. Utilizing GraphQL, users can perform targeted queries that leverage these tags, ensuring the retrieval of specific data swiftly and efficiently. This capability is particularly beneficial for the development of decentralized applications (dApps), the archival of content in a permanent and unalterable form, and the establishment of data marketplaces where precision and efficiency in data access are paramount.\n\nTogether, GraphQL and Arweave form a compelling combination, offering developers and users a robust framework for managing and querying data in a decentralized environment. This integration not only promotes the efficient and scalable retrieval of data but also supports the creation of more sophisticated and data-intensive applications on the decentralized web, maintaining a balance between technical depth and accessibility.\n\n\n# Constructing a Query\n\n\n# Basic Syntax\n\nIn GraphQL, you start with a root field and use braces to outline the fields you want to retrieve, allowing for precise, hierarchical data requests. For instance:\n\n{\n transactions {\n edges {\n node {\n id\n tags {\n name\n value\n }\n }\n }\n }\n}\n\n\nThis query demonstrates fetching transactions and their tags, illustrating the hierarchical nature of GraphQL queries.\n\n\n# Customizing Searches with Tags\n\nArweave utilizes a tagging system for transactions, enabling intricate search capabilities. You can filter queries using these tags:\n\n{\n transactions(tags: [{name: \"App-Name\", values: \"YourAppName\"}]) {\n edges {\n node {\n id\n data {\n size\n type\n }\n }\n }\n }\n}\n\n\nThis example filters transactions by a specific application name, and returns the id, size, and type of the transaction, showcasing how to customize queries for targeted data retrieval.\n\nNOTE: Tags are not the only option for filtering results, but are extremely useful due to the ability to add custom tags during the upload process.\n\n\n# Understanding Edges and Nodes\n\nIn the realm of GraphQL queries, especially when interfacing with Arweave, grasping the concept of edges and nodes is pivotal for constructing efficient and effective queries. This structure is not unique to Arweave but is particularly relevant due to the decentralized and interconnected nature of the data stored on its blockchain.\n\n * Nodes: At the heart of GraphQL's query structure, nodes represent individual data points or entities. In the context of Arweave, a node could be a transaction, a block, or any piece of data stored within the network. Nodes are the primary targets of your query, containing the data you wish to retrieve, such as transaction IDs, tags, or the content of data transactions.\n\n * Edges: Serving as the glue between nodes, edges are constructs that outline the relationship between different nodes. They can contain metadata about the connection, such as the nature of the relationship or additional attributes that describe how nodes are linked. In many GraphQL implementations, including those that interact with Arweave, edges are used to navigate through collections of related data, making them crucial for understanding the data's structure and lineage.\n\nThis hierarchical model is especially useful for querying complex and relational data sets, allowing for detailed navigation and efficient data retrieval within Arweave's decentralized storage system. By effectively utilizing the edges and nodes structure, you can precisely target the data you need, whether it's filtering transactions by tags, fetching related transactions, or exploring the blockchain's structure.\n\n\n# Pagination\n\nTo add pagination to your GraphQL queries, you can use the first, last, before, and after parameters. These parameters control the slice of data you're querying, making data retrieval more efficient and manageable.\n\n * first: Specify the number of items to retrieve from the start of the list or dataset.\n * last: Specify the number of items to retrieve from the end of the list or dataset.\n\n{\n transactions(first: 10) {\n edges {\n node {\n id\n }\n }\n }\n}\n\n\nThis query fetches the first 10 transactions.\n\nTo navigate through your dataset, you can use after and before in conjunction with first or last. These parameters accept cursors, which are typically provided in the response of your initial query.\n\n * after: Fetch items after the specified cursor, used with first.\n * before: Fetch items before the specified cursor, used with last.\n\n{\n transactions(first: 10, after: \"cursorOfLastItem\") {\n edges {\n node {\n id\n }\n }\n }\n}\n\n\nThis query fetches the next 10 transactions following the transaction with the cursor \"cursorOfLastItem\".\n\nIf no pagination terms are set, GraphQL servers may apply default limits to prevent excessively large datasets from being returned in a single query, potentially impacting performance. The default behavior can vary based on the server's configuration but often involves returning a predefined maximum number of items.\n\nFor instance, without specifying first or last, a query to the transactions field might return the first 5-10 transactions by default, depending on the server settings.\n\nThis behavior ensures that server resources are not overwhelmed by large requests and that client applications receive data in manageable chunks.\n\n\n# General Tips for Optimizing Queries\n\nTo optimize your GraphQL queries in Arweave, follow these general guidelines:\n\n * Specificity: Query with the most precise tags possible to narrow the search scope and enhance performance.\n * Minimalism: Limit your query to the essential set of tags to reduce processing time and data transfer.\n * Schema Design: Design your app's schema to reflect query patterns, possibly introducing tags that encapsulate frequent combinations of criteria.\n * Include Non-tag Fields: Adding fields like owner can refine your search, making your queries more efficient.\n * Order Your Tags: Arrange tags from most specific to most general to leverage Arweave's indexing more effectively.\n\nBy incorporating these strategies, developers can achieve faster and more precise data access from Arweave, enhancing the performance and responsiveness of decentralized applications. This balanced approach to query construction and optimization is key to navigating the expansive and decentralized storage landscape Arweave provides.\n\n\n# Making a Query\n\nExecuting GraphQL queries within the Arweave ecosystem offers flexibility and multiple avenues for developers and users alike. Whether you prefer a hands-on, manual approach to constructing and testing queries, or you aim for automation and integration within your applications, Arweave provides the tools necessary to interact with its decentralized data storage seamlessly.\n\n\n# GraphQL Playground\n\nFor those new to GraphQL or seeking to fine-tune their queries before implementation, the GraphQL playground offers an invaluable resource. This interactive interface allows users to manually construct queries, explore the schema, and immediately see the results of their queries. Accessible via web browsers, the playground can be found at the /graphql endpoint of most Arweave indexing services, such as https://arweave.dev/graphql. Here, you can experiment with different queries, understand the structure of the data, and refine your approach without writing a single line of code in your application.\n\nSteps for Accessing the GraphQL Playground:\n\n 1. Navigate to https://arweave.dev/graphql, or the graphql endpoint of any ar.io gateway, in your web browser.\n 2. Enter your GraphQL query in the provided interface.\n 3. Press the \"play\" button to execute the query to see real-time results and debug as needed.\n\n\n# Using an API\n\nFor application development and automation, making GraphQL queries programmatically is essential. You can send POST requests directly to the GraphQL endpoint of any indexing service that supports it, such as arweave.net or any ar.io gateway. These requests should contain your query in the body, allowing for dynamic and automated data retrieval within your application.\n\nWhen selecting an indexing service, consider the data coverage and reliability of the gateway to ensure it meets your application's needs. Different gateways might have varying degrees of indexed data available, so choosing one that is consistently up-to-date and comprehensive is key.\n\nExample of making a programmatic query:\n\nconst axios = require('axios');\n\nconst query = {\n query: `\n {\n transactions(tags: [{name: \"App-Name\", values: \"YourAppName\"}]) {\n edges {\n node {\n id\n tags {\n name\n value\n }\n }\n }\n }\n }\n `\n};\n\naxios.post('https://arweave.net/graphql', query, {\n headers: { 'Content-Type': 'application/json' },\n})\n.then(response => console.log(response.data))\n.catch(error => console.error('Error:', error));\n\n\n\n# Using an SDK\n\nFor an even more integrated experience, some Software Development Kits (SDKs) offer direct methods for executing GraphQL queries. The Arweave SDK, for example, provides built-in functionalities to interact with the blockchain, simplifying the process of making queries. By leveraging these SDKs, developers can bypass the intricacies of manual HTTP request construction, focusing instead on the logic and design of their applications.\n\nExample of using the Arweave SDK for GraphQL queries:\n\n// Assuming the Arweave SDK is already set up and initialized\nconst query = {\n query: `\n {\n transactions(tags: [{name: \"App-Name\", values: \"YourAppName\"}]) {\n edges {\n node {\n id\n tags {\n name\n value\n }\n }\n }\n }\n }\n `\n};\n\narweave.api.post('/graphql', query)\n .then(response => {\n console.log(response.data);\n })\n .catch(error => {\n console.error('Error:', error);\n });\n",normalizedContent:"# graphql\n\n\n# overview\n\ngraphql is a powerful query language designed for modern web applications to efficiently fetch data. it enables precise queries, allowing users to specify exactly which data they need and in what format, significantly reducing the amount of unnecessary data transferred. this approach is ideal for dealing with complex systems and large datasets, as it minimizes bandwidth and improves performance. graphql operates through a single endpoint, streamlining the way applications communicate with databases.\n\nthe integration of graphql with arweave introduces a refined method for interacting with decentralized data storage. arweave allows for the tagging of uploaded data, facilitating enhanced searchability and retrievability within its blockchain network. utilizing graphql, users can perform targeted queries that leverage these tags, ensuring the retrieval of specific data swiftly and efficiently. this capability is particularly beneficial for the development of decentralized applications (dapps), the archival of content in a permanent and unalterable form, and the establishment of data marketplaces where precision and efficiency in data access are paramount.\n\ntogether, graphql and arweave form a compelling combination, offering developers and users a robust framework for managing and querying data in a decentralized environment. this integration not only promotes the efficient and scalable retrieval of data but also supports the creation of more sophisticated and data-intensive applications on the decentralized web, maintaining a balance between technical depth and accessibility.\n\n\n# constructing a query\n\n\n# basic syntax\n\nin graphql, you start with a root field and use braces to outline the fields you want to retrieve, allowing for precise, hierarchical data requests. for instance:\n\n{\n transactions {\n edges {\n node {\n id\n tags {\n name\n value\n }\n }\n }\n }\n}\n\n\nthis query demonstrates fetching transactions and their tags, illustrating the hierarchical nature of graphql queries.\n\n\n# customizing searches with tags\n\narweave utilizes a tagging system for transactions, enabling intricate search capabilities. you can filter queries using these tags:\n\n{\n transactions(tags: [{name: \"app-name\", values: \"yourappname\"}]) {\n edges {\n node {\n id\n data {\n size\n type\n }\n }\n }\n }\n}\n\n\nthis example filters transactions by a specific application name, and returns the id, size, and type of the transaction, showcasing how to customize queries for targeted data retrieval.\n\nnote: tags are not the only option for filtering results, but are extremely useful due to the ability to add custom tags during the upload process.\n\n\n# understanding edges and nodes\n\nin the realm of graphql queries, especially when interfacing with arweave, grasping the concept of edges and nodes is pivotal for constructing efficient and effective queries. this structure is not unique to arweave but is particularly relevant due to the decentralized and interconnected nature of the data stored on its blockchain.\n\n * nodes: at the heart of graphql's query structure, nodes represent individual data points or entities. in the context of arweave, a node could be a transaction, a block, or any piece of data stored within the network. nodes are the primary targets of your query, containing the data you wish to retrieve, such as transaction ids, tags, or the content of data transactions.\n\n * edges: serving as the glue between nodes, edges are constructs that outline the relationship between different nodes. they can contain metadata about the connection, such as the nature of the relationship or additional attributes that describe how nodes are linked. in many graphql implementations, including those that interact with arweave, edges are used to navigate through collections of related data, making them crucial for understanding the data's structure and lineage.\n\nthis hierarchical model is especially useful for querying complex and relational data sets, allowing for detailed navigation and efficient data retrieval within arweave's decentralized storage system. by effectively utilizing the edges and nodes structure, you can precisely target the data you need, whether it's filtering transactions by tags, fetching related transactions, or exploring the blockchain's structure.\n\n\n# pagination\n\nto add pagination to your graphql queries, you can use the first, last, before, and after parameters. these parameters control the slice of data you're querying, making data retrieval more efficient and manageable.\n\n * first: specify the number of items to retrieve from the start of the list or dataset.\n * last: specify the number of items to retrieve from the end of the list or dataset.\n\n{\n transactions(first: 10) {\n edges {\n node {\n id\n }\n }\n }\n}\n\n\nthis query fetches the first 10 transactions.\n\nto navigate through your dataset, you can use after and before in conjunction with first or last. these parameters accept cursors, which are typically provided in the response of your initial query.\n\n * after: fetch items after the specified cursor, used with first.\n * before: fetch items before the specified cursor, used with last.\n\n{\n transactions(first: 10, after: \"cursoroflastitem\") {\n edges {\n node {\n id\n }\n }\n }\n}\n\n\nthis query fetches the next 10 transactions following the transaction with the cursor \"cursoroflastitem\".\n\nif no pagination terms are set, graphql servers may apply default limits to prevent excessively large datasets from being returned in a single query, potentially impacting performance. the default behavior can vary based on the server's configuration but often involves returning a predefined maximum number of items.\n\nfor instance, without specifying first or last, a query to the transactions field might return the first 5-10 transactions by default, depending on the server settings.\n\nthis behavior ensures that server resources are not overwhelmed by large requests and that client applications receive data in manageable chunks.\n\n\n# general tips for optimizing queries\n\nto optimize your graphql queries in arweave, follow these general guidelines:\n\n * specificity: query with the most precise tags possible to narrow the search scope and enhance performance.\n * minimalism: limit your query to the essential set of tags to reduce processing time and data transfer.\n * schema design: design your app's schema to reflect query patterns, possibly introducing tags that encapsulate frequent combinations of criteria.\n * include non-tag fields: adding fields like owner can refine your search, making your queries more efficient.\n * order your tags: arrange tags from most specific to most general to leverage arweave's indexing more effectively.\n\nby incorporating these strategies, developers can achieve faster and more precise data access from arweave, enhancing the performance and responsiveness of decentralized applications. this balanced approach to query construction and optimization is key to navigating the expansive and decentralized storage landscape arweave provides.\n\n\n# making a query\n\nexecuting graphql queries within the arweave ecosystem offers flexibility and multiple avenues for developers and users alike. whether you prefer a hands-on, manual approach to constructing and testing queries, or you aim for automation and integration within your applications, arweave provides the tools necessary to interact with its decentralized data storage seamlessly.\n\n\n# graphql playground\n\nfor those new to graphql or seeking to fine-tune their queries before implementation, the graphql playground offers an invaluable resource. this interactive interface allows users to manually construct queries, explore the schema, and immediately see the results of their queries. accessible via web browsers, the playground can be found at the /graphql endpoint of most arweave indexing services, such as https://arweave.dev/graphql. here, you can experiment with different queries, understand the structure of the data, and refine your approach without writing a single line of code in your application.\n\nsteps for accessing the graphql playground:\n\n 1. navigate to https://arweave.dev/graphql, or the graphql endpoint of any ar.io gateway, in your web browser.\n 2. enter your graphql query in the provided interface.\n 3. press the \"play\" button to execute the query to see real-time results and debug as needed.\n\n\n# using an api\n\nfor application development and automation, making graphql queries programmatically is essential. you can send post requests directly to the graphql endpoint of any indexing service that supports it, such as arweave.net or any ar.io gateway. these requests should contain your query in the body, allowing for dynamic and automated data retrieval within your application.\n\nwhen selecting an indexing service, consider the data coverage and reliability of the gateway to ensure it meets your application's needs. different gateways might have varying degrees of indexed data available, so choosing one that is consistently up-to-date and comprehensive is key.\n\nexample of making a programmatic query:\n\nconst axios = require('axios');\n\nconst query = {\n query: `\n {\n transactions(tags: [{name: \"app-name\", values: \"yourappname\"}]) {\n edges {\n node {\n id\n tags {\n name\n value\n }\n }\n }\n }\n }\n `\n};\n\naxios.post('https://arweave.net/graphql', query, {\n headers: { 'content-type': 'application/json' },\n})\n.then(response => console.log(response.data))\n.catch(error => console.error('error:', error));\n\n\n\n# using an sdk\n\nfor an even more integrated experience, some software development kits (sdks) offer direct methods for executing graphql queries. the arweave sdk, for example, provides built-in functionalities to interact with the blockchain, simplifying the process of making queries. by leveraging these sdks, developers can bypass the intricacies of manual http request construction, focusing instead on the logic and design of their applications.\n\nexample of using the arweave sdk for graphql queries:\n\n// assuming the arweave sdk is already set up and initialized\nconst query = {\n query: `\n {\n transactions(tags: [{name: \"app-name\", values: \"yourappname\"}]) {\n edges {\n node {\n id\n tags {\n name\n value\n }\n }\n }\n }\n }\n `\n};\n\narweave.api.post('/graphql', query)\n .then(response => {\n console.log(response.data);\n })\n .catch(error => {\n console.error('error:', error);\n });\n",charsets:{}},{title:"ar-io sdk",frontmatter:{prev:!1,next:!1,permalink:"/sdk"},regularPath:"/guides/sdk.html",relativePath:"guides/sdk.md",key:"v-e8e2a6fc",path:"/sdk/",headers:[{level:2,title:"Prerequisites",slug:"prerequisites",normalizedTitle:"prerequisites",charIndex:218},{level:2,title:"Installation",slug:"installation",normalizedTitle:"installation",charIndex:269},{level:2,title:"Quick Start",slug:"quick-start",normalizedTitle:"quick start",charIndex:337},{level:2,title:"Usage",slug:"usage",normalizedTitle:"usage",charIndex:1523},{level:3,title:"Web",slug:"web",normalizedTitle:"web",charIndex:196},{level:2,title:"Typescript",slug:"typescript",normalizedTitle:"typescript",charIndex:2227},{level:2,title:"IOToken & mIOToken",slug:"iotoken-miotoken",normalizedTitle:"iotoken & miotoken",charIndex:null},{level:3,title:"Converting IO to mIO",slug:"converting-io-to-mio",normalizedTitle:"converting io to mio",charIndex:3829},{level:2,title:"IO Process",slug:"io-process",normalizedTitle:"io process",charIndex:4119},{level:3,title:"APIs",slug:"apis",normalizedTitle:"apis",charIndex:4134},{level:3,title:"Configuration",slug:"configuration",normalizedTitle:"configuration",charIndex:21911},{level:2,title:"Arweave Name Tokens (ANT's)",slug:"arweave-name-tokens-ant-s",normalizedTitle:"arweave name tokens (ant's)",charIndex:22584},{level:3,title:"APIs",slug:"apis-2",normalizedTitle:"apis",charIndex:4134},{level:3,title:"Configuration",slug:"configuration-2",normalizedTitle:"configuration",charIndex:21911},{level:2,title:"Logging",slug:"logging",normalizedTitle:"logging",charIndex:28284},{level:3,title:"Configuration",slug:"configuration-3",normalizedTitle:"configuration",charIndex:21911},{level:2,title:"Pagination",slug:"pagination",normalizedTitle:"pagination",charIndex:28840},{level:2,title:"Developers",slug:"developers",normalizedTitle:"developers",charIndex:30161},{level:3,title:"Requirements",slug:"requirements",normalizedTitle:"requirements",charIndex:30176},{level:3,title:"Setup & Build",slug:"setup-build",normalizedTitle:"setup & build",charIndex:null},{level:3,title:"Testing",slug:"testing",normalizedTitle:"testing",charIndex:30413},{level:3,title:"Linting & Formatting",slug:"linting-formatting",normalizedTitle:"linting & formatting",charIndex:null},{level:3,title:"Architecture",slug:"architecture",normalizedTitle:"architecture",charIndex:30869}],headersStr:"Prerequisites Installation Quick Start Usage Web Typescript IOToken & mIOToken Converting IO to mIO IO Process APIs Configuration Arweave Name Tokens (ANT's) APIs Configuration Logging Configuration Pagination Developers Requirements Setup & Build Testing Linting & Formatting Architecture",content:'# ar-io sdk\n\nThe ar.io SDK provides functionality for interacting with the ar.io ecosystem of services (e.g. gateways and observers) and protocols (e.g. ArNS). It is available for both NodeJS and Web environments.\n\n\n# Prerequisites\n\n * node>=v18.0.0\n * npm or yarn\n\n\n# Installation\n\nnpm install @ar.io/sdk\n\n\nor\n\nyarn add @ar.io/sdk\n\n\n\n# Quick Start\n\nLoading the gateway list in NodeJS.\n\nimport { IO } from \'@ar.io/sdk\';\n\nconst io = IO.init();\nconst gateways = await io.getGateways();\n\nconsole.log(gateways);\n\n\nOutput\n\n{\n "QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ": {\n "end": 0,\n "observerWallet": "IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs",\n "operatorStake": 250000000000, // value in mIO\n "settings": {\n "fqdn": "ar-io.dev",\n "label": "AR.IO Test",\n "note": "Test Gateway operated by PDS for the AR.IO ecosystem.",\n "port": 443,\n "properties": "raJgvbFU-YAnku-WsupIdbTsqqGLQiYpGzoqk9SCVgY",\n "protocol": "https"\n },\n "start": 1256694,\n "stats": {\n "failedConsecutiveEpochs": 0,\n "passedEpochCount": 30,\n "submittedEpochCount": 30,\n "totalEpochParticipationCount": 31,\n "totalEpochsPrescribedCount": 31\n },\n "status": "joined",\n "vaults": {},\n "weights": {\n "stakeWeight": 25,\n "tenureWeight": 0.9031327160493827,\n "gatewayRewardRatioWeight": 0.96875,\n "observerRewardRatioWeight": 0.96875,\n "compositeWeight": 21.189222170982834,\n "normalizedCompositeWeight": 0.27485583057217183\n }\n }\n}\n\n\n\n# Usage\n\nThe SDK is provided in both CommonJS and ESM formats and is compatible with bundlers such as Webpack, Rollup, and ESbuild. Utilize the appropriately named exports provided by this SDK\'s package.json based on your project\'s configuration. Refer to the examples directory to see how to use the SDK in various environments.\n\n\n# Web\n\n# Bundlers (Webpack, Rollup, ESbuild, etc.)\n\nimport { IO } from \'@ar.io/sdk/web\';\n\n// set up client\nconst io = IO.init();\n// fetch gateways\nconst gateways = await io.getGateways();\n\n\nNote: polyfills are only provided when using the named @ar.io/sdk/web export (which requires moduleResolution: nodenext in tsconfig.json). If you are using the default export within a Typescript project (e.g. moduleResolution: node), you will need to provide your own polyfills - specifically crypto, fs and buffer. Refer to examples/webpack and examples/vite for references in how to properly provide those polyfills. For other project configurations, refer to your bundler\'s documentation for more information on how to provide the necessary polyfills.\n\n# Browser\n\n + diff --git a/concepts/sandboxing.html b/concepts/sandboxing.html index c6711ee7..07718215 100644 --- a/concepts/sandboxing.html +++ b/concepts/sandboxing.html @@ -20,7 +20,7 @@ - + @@ -34,6 +34,6 @@ console.log(expectedTxSandbox);

Example Output:

qj2yubvbk4yjv24syelk24wqivcbaqpbmg7yxfof5mdqlrh4rova
 

View the full code for generating browser sandbox values here (opens new window).

- + diff --git a/contribute.html b/contribute.html index c86ce2ef..07de53d9 100644 --- a/contribute.html +++ b/contribute.html @@ -20,7 +20,7 @@ - + @@ -159,6 +159,6 @@

# Development and Deployment

# Launching Development Server

From inside the docsGenerator/docs directory in your terminal, you can launch a development server in order to preview your edits. This will automatically update as you are making edits, but if some changes do not immediately appear you can shut the server down and restart it for a hard refresh:

yarn dev
 

The development server will, by default, launch at localhost:8080. The server can be shut down with ctrl+c or by killing the terminal used to start it.

The most common error when attempting to launch the development server comes from not having a compatible version of Nodejs. If you get an error, try switching to Node version 16.15.1

# Building Static Files

The Vuepress docs portal is nested inside a static html website. For ease of deployment, Vuepress can build the docs portal into static html files and place them in the docs/ folder in the root of the website. This is not necessary for submitting a pr, but it may be useful for local testing. You can do this by navigating your terminal inside the docs portal Vuepress app docsGenerator/docs and running the command:

yarn build
 

# Creating Your Pull Request

Once you have all of your local changes committed and synced to your github account, you can create a Pull Request and have the team review the changes for integration into the public site.

  1. Ensure that all of your changes are committed to your own repository. All commits should follow the Conventional Commits (opens new window) standards.

  2. Navigate to your forked repository's page on GitHub.

  3. Switch to the branch you created for your changes.

  4. You should see a banner indicating that you recently pushed a new branch. Click on the "Compare & pull request" button on that banner.

  5. Make sure the base repository is set to the original AR.IO repository and the base branch is set to "staging".

  6. Provide a brief description of your changes in the pull request form. Ensure your title adheres to the Conventional Commits (opens new window) standards.

  7. Review the changes and confirm they appear as expected.

  8. Once you're ready, click on the "Create pull request" button. The AR.IO team will review the request and, if approved, merge your changes into the staging branch of the repository. The changes will later be merged into the main branch for production deployment.

- + diff --git a/delegated-staking/index.html b/delegated-staking/index.html index c6b25ed0..95e1bf37 100644 --- a/delegated-staking/index.html +++ b/delegated-staking/index.html @@ -20,12 +20,12 @@ - +

# Delegated Staking

# Overview

Delegated staking is a process by which a person can stake their own IO tokens on someone elses ar.io gateway. The additional staked tokens increase that gateway's chance to be selected as an observer, and so they have the potential to earn more rewards. In exchange, the person who delegates the tokens will receive a share of the gateway's rewards. Gateway operators can set the percentage of rewards are available for delegating wallets.

You can find more specific information about delegated staking and how rewards are distributed in the ar.io whitepaper (opens new window).

You can easily delegate stake to a gateway by using the Gateway Portal at ar://gateways (opens new window)

- + diff --git a/experimental/frames/index.html b/experimental/frames/index.html index df5e88a6..02fb57a1 100644 --- a/experimental/frames/index.html +++ b/experimental/frames/index.html @@ -20,11 +20,11 @@ - +

# Farcaster Frames

# Overview

Frames by Farcaster (opens new window) is a standard for posts, or "casts", that allows them to be interactive and easily authenticated self contained apps. Because the standard relies on HTML Meta tags, they can easily be integrated into dApps hosted permanently on Arweave. Until recently, the full capabilities of Frames hosted on Arweave were not accessible through ar.io gateways. This is because a specific type of interaction between the frame and the hosting server, a POST, is needed to facilitate interactivity, and ar.io gateways did not support this interaction type.

# Experimental Gateway Support

With Release 9 of the ar.io gateways, a new experimental endpoint was added that supports the POST requests needed by frames. The /local endpoint on a gateway is used to facilitate experimental new features, as well as features which may be specific to an individual gateway. Operators and users should be fully aware that all endpoints stemming from /local are experimental, and may not always perform exactly as expected.

# Using Frames

The full path for accessing a frame hosted on Arweave is https://<gateway>/local/farcaster/frame/<ID> where <gateway> represents any ar.io gateway using release 9 or higher, and <ID> represents the txId of the frame on Arweave. Since frames require full, absolute url paths, you will need to choose specific, supported gateway when you are embedding the frame in your cast.

Beyond that, simply embed the url for a frame in a cast and farcaster will be able to render it.

# Example

Arweave community member K, who is a pioneer in permaweb frames, created the below frame to demonstrate how permaweb frames can be interactive when embedded from ar.io gateways.

The ID for the frame he uploaded to Arweave is JFfYkpW5--I5UOxnJTYHhY9-F8X6WrvDsXQv8jYr0WE. Using this, He made a Farcaster cast with the embedded url https://erl5reuvxh56eokq5rtsknqhqwhx4f6f7jnlxq5roqx7enrl2fqq.ar-io.dev/local/farcaster/frame/JFfYkpW5--I5UOxnJTYHhY9-F8X6WrvDsXQv8jYr0WE/. This full url includes the sandbox prefix generated by an ar.io gateway when serving content.

When embedding this full url in a cast, farcaster will render the content into a frame:

View the original post here (opens new window) to experience the interactivity first hand.

- + diff --git a/foundation/index.html b/foundation/index.html index 6990e432..7a5975df 100644 --- a/foundation/index.html +++ b/foundation/index.html @@ -20,11 +20,11 @@ - +

# AR.IO Foundation

# What is the AR.IO Foundation?

The AR.IO Foundation is dedicated to the stewardship and prosperity of The AR.IO Network and its associated token ecosystem. It holds a non-revocable, exclusive license to promote the development of the network, prioritizing the ecosystem's wellbeing, particularly the users.

Key strategies employed by the Foundation (with the assistance of third-party teams) in support of the network include:

  • Providing grants and incentive programs

  • Making strategic investments

  • Engaging in direct software development

  • Producing educational content

  • Conducting publicity and marketing initiatives

  • Forming partnerships

# Guiding Philosophy

The AR.IO Foundation serves as a unifying force within the ecosystem, facilitating communication, fostering innovation, and driving overall progress. Its primary aim is to function as a supportive entity rather than exerting excessive control over the network or disrupting its economic processes.

The key objectives of the AR.IO Foundation are as follows:

  • Sustaining and advancing the AR.IO Network: The Foundation takes responsibility for the continued development and enhancement of the AR.IO Network. It works collaboratively with developers, contributors, and stakeholders to ensure the network remains robust, secure, and adaptable to evolving technological landscapes.

  • Allocating resources to promote ecosystem and community growth: The Foundation is entrusted with managing and allocating resources to fuel the growth and expansion of the AR.IO ecosystem. This includes funding research initiatives, supporting innovative projects, and encouraging community-driven initiatives that contribute to the network's overall health and vitality.

  • Managing the core development of the AR.IO Network: The Foundation oversees and coordinates the core development efforts of the AR.IO Network. This involves coordinating with developers and technical teams to implement upgrades, address vulnerabilities, and introduce new features that align with the network's vision and community consensus.

  • Fostering collaboration and inclusivity: The Foundation actively fosters a culture of collaboration and inclusivity within the AR.IO ecosystem. It encourages diverse perspectives and welcomes contributions from individuals and organizations, fostering an environment where all participants can thrive and collectively shape the network's future.

By diligently pursuing these objectives, the AR.IO Foundation aims to create an environment where the AR.IO Network can flourish as a decentralized, secure, and resilient platform, contributing positively to the broader permaweb and decentralized storage landscape.

- + diff --git a/gateway-network/index.html b/gateway-network/index.html index 6954e6b1..b9f53c61 100644 --- a/gateway-network/index.html +++ b/gateway-network/index.html @@ -20,11 +20,11 @@ - +

# Gateway network

# Overview

The AR.IO Network consists of AR.IO Gateway nodes, which are identified by their registered Arweave wallet addresses and either their IP addresses or hostnames, as stored in the network's smart contract Gateway Address Registry (GAR).

These nodes adhere to the AR.IO Network Protocols, creating a collaborative environment of Gateway nodes that vary in scale and specialization. The network ensures a fundamental level of service quality and trust minimization among its participants.

Being part of the network grants AR.IO Gateways an array of advantages, such as:

  • Simplified advertising of services and end user discovery via the Gateway Address Registry.

  • More rapid bootstrapping of key Gateway operational data due to prioritized data request fulfillment among Gateways joined to the network.

  • Sharing of data processing results.

  • Access to support channels tailored for operators.

  • Enhanced trust and transparency through the use of AGPL-3 licenses, which mandate public disclosure of any software changes, thereby reinforcing the network's integrity and reliability.

  • Improved network reliability and performance through an incentive protocol, which uses a system of rewards and evaluations to encourage high-quality service from Gateways.

# Gateway Address Registry (GAR)

Any Gateway operator that whishes to join the AR.IO Network must register their node in the AR.IO smart contract's "Gateway Address Registry", known as the GAR. Registration involves staking a minimum amount of IO tokens and providing additional metadata describing the Gateway service offered.

After joining the network, the operator's Gateway can be easily discovered by permaweb apps, its health can be observed, and it can participate in the AR.IO data sharing protocol.

The Gateway operator can modify their Gateway's GAR configuration as needed, which includes adding more tokens to their stake or removing them. Operators can completely remove their stake and leave the AR.IO Network following a minimum network exit wait time. This exit time ensures that Gateways cannot quickly escape from an anticipated penalty.

The GAR advertises the specific attributes of each Gateway including its stake and settings. This enables permaweb apps and users to discover which Gateways are currently available and meet their needs. Apps that read the GAR can sort and filter it using the Gateway metadata, for example, ranking Gateways with the highest stake at the top of the list. This would allow users to prefer the lower-trust, higher staked Gateways before settling on a higher-trust, lower staked Gateway.

# Staking

Staking tokens serves a dual purpose in the AR.IO Network:

  • It acts as a method of public commitment, and

  • It qualifies participants for reward distribution.

In the AR.IO Network, "staking" designates the act of locking a specified amount of IO tokens into a protocol-controlled vault. These tokens act as a form of collateral and public commitment, encouraging network participants to act in the network's best interests. Once tokens are deposited in the vault, they remain locked until either the participant triggers the "unstake" function or the vault's predetermined lock period expires.

It is important to note that unlike other protocols, the IO token is non-inflationary. Therefore, the staking mechanism in the AR.IO Network is not designed to function as a yield-generation tool. By staking their tokens, participants become eligible for potential rewards, fostering an atmosphere of mutual trust within the network. Specifically, Gateway operators stake tokens to facilitate their Gateway integration and establish public trust. Once connected, they become eligible for rewards driven by the protocol and gain access to the network's shared resources.

# Schema

# Gateway Schema

Gateway
Name Type Description
operatorStake number The total stake of the Gateway's operator.
start number Block number in which the Gateway joined the network.
end number Block number in which the Gateway can leave the network, setting to 0 means no end date.
status string Participation status of the Gateway, "joined" - participating in the network, "hidden" - not leaving, but not participating, "leaving" - in the process of withdrawing from the network.
vaults array of objects The locked tokens staked by the Gateway operator, view schema.
settings object Additional configuration settings for the Gateway, view schema.
delegates object Wallets that have delegated a stake of IO tokens to the Gateway.
totalDelegatedStake number The total number of IO tokens delegated to the Gateway
observerWallet string The public address for the wallet being used to sign and upload Observer reports
stats object Information about the Gateways Network performance

# Token Vault

Token Vault
Name Type Description
balance number Positive integer, the number of IO tokens locked.
start number Block number in which locking starts.
end number Block number in which locking ends. Setting to 0 means no end date.

# Gateway Settings

Gateway Settings
Name Type Required Description
label string yes The friendly name used to label the Gateway.
fqdn string yes The fully qualified domain name at which the Gateway can be reached. e.g. arweave.net
port number yes The port used by the Gateway. e.g. 443
protocol string yes Web protocol used by this Gateway "https", or "http"
properties string no An Arweave transaction ID containing additional properties of the Gateway.
note string no An Arweave transaction ID containing additional notes the Gateway operator can set to include things like announcements, maintenance, or other operational updates.
allowDelegatedStaking boolean no The Gateway Operator can allow or disallow other wallets to stake IO tokens on the Gateway.
delegatedRewardShareRatio number no The percentage of Gateway rewards given to delegated stakers
autoStake boolean no If true, Gateway rewards will automatically be added to the Gateway's Operator stake
- + diff --git a/gateways/ar-io-node/admin/admin-api.html b/gateways/ar-io-node/admin/admin-api.html index 270e5cd8..153dfc70 100644 --- a/gateways/ar-io-node/admin/admin-api.html +++ b/gateways/ar-io-node/admin/admin-api.html @@ -20,7 +20,7 @@ - + @@ -64,6 +64,6 @@ "source": "Example source" }
  • id: This should be the transaction id of the content you want to block.
  • notes: Notes regarding the reason this content was blocked. For documentation purposes only.
  • source: Identifier for the source of TX IDs you are blocking. For example, the name of a public block list. For documentation purposes only.

Your Gateway will either respond with an error, or { message: 'Content blocked' }

- + diff --git a/gateways/ar-io-node/advanced-config.html b/gateways/ar-io-node/advanced-config.html index 994063fb..b0bd0c03 100644 --- a/gateways/ar-io-node/advanced-config.html +++ b/gateways/ar-io-node/advanced-config.html @@ -20,7 +20,7 @@ - + @@ -46,6 +46,6 @@ TRUSTED_ARNS_RESOLVER_TYPE=resolver TRUSTED_ARNS_RESOLVER_URL=http://resolver:6000
  • RUN_RESOLVER is a boolean representing an on/off switch for the local resolver.
  • TRUSTED_ARNS_RESOLVER_TYPE sets the method the gateway uses for resolving ArNS names. Use resolver for the local resolver, or gateway for default functionality.
  • TRUSTED_ARNS_RESOLVER_URL is the url a gateway will use to request ArNS name resolution.
- + diff --git a/gateways/ar-io-node/api.html b/gateways/ar-io-node/api.html index fc5d6529..fd9f0bbd 100644 --- a/gateways/ar-io-node/api.html +++ b/gateways/ar-io-node/api.html @@ -20,11 +20,11 @@ - +

# AR.IO HTTP API

Up to date documentation of endpoints for the AR.IO HTTP API used to access your Gateway can be found here (opens new window).

You can also view endpoint documentation and test the endpoints against your own Gateway by going to <your-Gateway>/api-docs

- + diff --git a/gateways/ar-io-node/arnsoip/observer/index.html b/gateways/ar-io-node/arnsoip/observer/index.html index f25a5710..ae20dc5e 100644 --- a/gateways/ar-io-node/arnsoip/observer/index.html +++ b/gateways/ar-io-node/arnsoip/observer/index.html @@ -20,7 +20,7 @@ - + @@ -28,6 +28,6 @@
  • This payout rewards gateways and observers who have performed their duties.
  • Gateways that did not meet the performance threshold will not receive rewards.
  • Observers that did not perform their duties are not rewarded and in addition, are penalized on any gateway rewards received.
  • Community builders and application users can verify and leverage the report and distribution information to make more informed decisions on which gateway to use.
  • # Onchain Reports

    The to-be-evaluated ArNS names include a set of names randomly determined by the protocol, known as “prescribed names”, which are common across all observers within the epoch, as well as a set of “chosen names” picked at the discretion of each individual observer. “Prescribed names” are assigned to act as a common denominator / baseline while “chosen names” allow each observer to evaluate names that may be important to their operation.

    Each observer shall assess the performance of the selected ArNS names (across all gateways) and summarize those findings in a report which details the following:

    • General Information: Observer's Arweave address, starting and concluding block heights for the epoch.

    • Gateway Operator Assessment: The expected and actual Arweave addresses of observed gateways, along with a summary verdict (pass or fail), and accompanying reasons for failure.

    • Detailed ArNS Evaluations: For each gateway, it includes the domain name, evaluated ArNS names, the associated block height, transaction IDs, data hashes, a "pass or fail" score, reasons for failure (if any), and performance metrics like time to the first byte.

    A comprehensive list of report criteria can be found in the Appendix.

    Observers shall upload their completed reports (in JSON format) to the Arweave network as an onchain audit trail. In addition, observers shall submit an interaction to the AR.IO smart contact detailing each gateway that they observed to have “failed” their assessments. This is tallied and used to determine the reward distribution.

    # Selection of Observers

    The observer selection process employs a random-weighted selection method. By combining random selection with weighted criteria like stake, tenure, and past rewards, the process aims to ensure both fairness and acknowledgment of consistent performance. This method allows for a systematic yet randomized approach to selecting gateways for observation tasks.

    # Criteria for Selection

    Up to 50 gateways can be chosen as observers per epoch. If the GAR contains 50 or fewer gateways, then every gateway is designated as an observer for that epoch. If there are greater than 50, then randomized selection shall be utilized.

    The weighted selection criteria will consider the following for each gateway:

    • Stake Weight (SW): This factor considers how financially committed a gateway is to the network. It is the ratio of the amount of IO tokens staked by the gateway relative to the network minimum and is expressed as SW = Gateway Stake / Minimum Stake.

    • Tenure Weight (TW): This factor considers how long a gateway has been part of the network, with a maximum value capped at 4. It is calculated as TW = Gateway Network Tenure / 6 block-months. This means that the maximum value is achieved after 2 block-years of participation in the network.

    • Gateway Reward Ratio Weight (GRRW): This factor is a proxy for a gateway’s performance at resolving ArNS names. The weight represents the ratio of epochs in which a gateway received rewards for correctly resolving names relative to their total time on the network.

    • Observer Reward Ratio Weight (ORRW): This factor is a proxy for a gateway’s performance at fulfilling observation duties. The weight reflects the ratio of epochs in which a gateway, as an observer, successfully submitted observation reports relative to their total periods of service as an observer.

    # Weight Calculation and Normalization

    For each gateway, a composite weight (CW) is computed, combining the Stake Weight, Tenure Weight, Gateway Reward Ratio Weight, and Observer Reward Ratio Weight.

    The formula used is: CW = SW x TW x GRRW x ORRW.

    These weights are then normalized across the network to create a continuous range, allowing for proportional random selection based on the weighted scores. The normalized composite weight (N_CW) for each gateway indicates its likelihood of being chosen as an observer and is calculated by dividing the gateway's CW by the sum of all CWs.

    # Random Selection Process

    The selection of observers is randomized within the framework of these weights. A set of unique random numbers is generated within the total range of normalized weights. For each random number, the gateway whose normalized weight range encompasses this number is selected. This system ensures that while gateways with higher weights are more likely to be chosen, all gateways maintain a non-zero chance of selection, preserving both fairness and meritocracy in the observer assignment process.

    # Performance Evaluation

    Consider the following classifications:

    • Functional or Passed Gateways: are gateways that meet or surpass the network’s performance and quality standards.

    • Deficient or Failed Gateways: are gateways that fall short of the network's performance expectations.

    • Functional or Submitted Observers: are selected observers who diligently perform their duties and submit observation reports and contract interactions.

    • Deficient or Failed Observers: are selected observers who do not fulfill their duty of submitting observation reports and contract interactions.

    At the end of an epoch, the smart contract will assess the results from the observers during a “tallying period” and determine a pass / fail score for each gateway:

    • If greater than or equal to 50% of submitted observer contract interactions indicate a PASS score, then that gateway is considered Functional and eligible for gateway rewards.

    • Else, if greater than 50% of submitted observer contract interactions indicate a FAIL score, then that gateway is considered Deficient and ineligible for gateway rewards.

    These results will determine how reward distributions are made for that epoch. Rewards shall be distributed after the epoch’s tallying period is complete.

    # Reward Distribution

    Each epoch, a defined portion of the protocol balance (e.g., 0.05%) is earmarked for distribution as rewards. From this allocation, two distinct reward categories are derived:

    1. Base Gateway Reward: This is the portion of the reward allocated to each Functional Gateway within the network and is calculated as:

      [Epoch Reward Allocation x 90% / Total Gateways in the Network]

    2. Base Observer Reward: Observers, due to their additional responsibilities, have a separate reward calculated as:

      [Epoch Reward Allocation x 10% / Total Selected Observers for the Epoch]

    # Distribution Based on Performance

    The reward distribution is contingent on the performance classifications derived from the Performance Evaluation:

    • Functional Gateways: Gateways that meet the performance criteria receive the Base Gateway Reward.

    • Deficient Gateways: Gateways falling short in performance do not receive any gateway rewards.

    • Functional Observers: Observers that fulfilled their duty receive the Base Observer Reward.

    • Deficient Observers: Observers failing to meet their responsibilities do not receive observer rewards. Furthermore, if they are also Functional Gateways, their gateway reward is reduced by 25% for that epoch as a consequence for not performing their observation duty.

    # Undistributed Rewards

    In cases where rewards are not distributed, either due to the inactivity or deficiency of gateways or observers, the allocated tokens shall remain in the protocol balance and carry forward to the next epoch. This mechanism is in place to discourage observers from frivolously marking their peers as offline in hopes of attaining a higher portion of the reward pool.

    # Handling Inactive Gateways

    To maintain network efficiency and reduce contract state bloat, gateways that are consistently offline, specifically for thirty (30) consecutive epochs, and thus fail to receive rewards, will be automatically removed from the Gateway Active Registry (GAR) as well as have their staked IO tokens unlocked and returned to the gateway operator.

    # Observer Report Details

    Each observer shall assess the performance of the selected ArNS names (across all AR.IO gateways) and summarize those findings in a report which details the following:

    # General Information

    • The observer's Arweave address.
    • The starting block height of the epoch.
    • The block height at which the report was generated.

    # Overall Gateway Operator Assessment

    • Gateway FQDN.
    • The Arweave address that the observer expects to be the owner / operator of the gateway.
    • The Arweave address that the observed gateway actually reports.
    • A final “pass or fail” rollup determination for each observed gateway.
    • Failure reason (if applicable).

    # ArNS Assessments

    • Observed ArNS name (for all prescribed and chosen names).
    • The block height at which the name was assessed.
    • The expected status code.
    • The resolved status code.
    • The transaction ID that the observer expects the associated name to resolve to.
    • The transaction ID that the gateway actually resolves to.
    • The data hash that the observer expects the associated name to resolve to.
    • The data hash that the gateway actually resolves to.
    • The “pass or fail” score associated with the observed name, at the observer’s discretion.
    • Failure reason (if applicable).
    • Timing / performance information associated with the name resolution such as time to first byte and total duration.

    The above is repeated for the entire name pool and across each gateway in the GAR.

    # Example Observation Report

    https://arweave.net/GG1YCFc7wQxKvQ1qD1lTEp2OAMBs4VzrpfdmeeLyjDI (opens new window)

    # Viewing Observation Reports

    You can easily view an observation report in a human readable format through your terminal with the following command:

    curl -L https://arweave.net/<txId> | zcat | jq .
     

    Be sure to replace <txId> with the txId of the report you want to view.

    # example

    curl -L https://arweave.net/H3zDmoDkpOg0U95rejBEq6gUnww_CEVscTuQVqfSbxk | zcat | jq .
     
    - + diff --git a/gateways/ar-io-node/env.html b/gateways/ar-io-node/env.html index 83993708..8c107739 100644 --- a/gateways/ar-io-node/env.html +++ b/gateways/ar-io-node/env.html @@ -20,11 +20,11 @@ - +

    # Environmental Variables

    # Overview

    The AR.IO Gateway allows configuration customization through environmental variables. These variables dictate the gateway's behavior, from block synchronization settings to log formatting. Detailed below is a table enumerating all available environmental variables, their respective types, default values, and a brief description. Note that certain variables, such as SANDBOX_PROTOCOL, rely on others (e.g., ARNS_ROOT_HOST) to function effectively. Ensure proper understanding of these dependencies when configuring.

    # Variables

    Sets the minimum Gateway release version to check while doing a gateway version assessment Sets the current ar.io node version to be set on X-AR-IO-Node-Release header on requests to the reference gateway Sets the location for chunked data to be saved. If omitted, chunked data will be stored in the `data` directory Sets the location for contiguous data to be saved. If omitted, contiguous data will be stored in the `data` directory Sets the location for header data to be saved. If omitted, header data will be stored in the `data` directory Sets the location for sqlite indexed data to be saved. If omitted, sqlite data will be stored in the `data` directory Sets the location for temporary data to be saved. If omitted, temporary data will be stored in the `data` directory Sets the location for LMDB data to be saved. If omitted, LMDB data will be stored in the `data` directory
    ENV Name Type Default Value Description
    START_HEIGHT Number or "Infinity" 0 Starting block height for node synchronization (0 = start from genesis block)
    STOP_HEIGHT Number or "Infinity" "Infinity" Stop block height for node synchronization (Infinity = keep syncing until stopped)
    TRUSTED_NODE_URL String "https://arweave.net" Arweave node to use for fetching data
    TRUSTED_GATEWAY_URL String "https://arweave.net" Arweave node to use for proxying reqeusts
    TRUSTED_ARNS_GATEWAY_URL String https://NAME.arweave.dev ArNS gateway
    INSTANCE_ID String "" Adds an "INSTANCE_ID" field to output logs
    LOG_FORMAT String "simple" Sets the format of output logs, accepts "simple" and "json"
    SKIP_CACHE Boolean false If true, skips the local cache and always fetches headers from the node
    PORT Number 4000 AR.IO node exposed port number
    SIMULATED_REQUEST_FAILURE_RATE Number 0 Number from 0 to 1, representing the probability of a request failing
    AR_IO_WALLET String "" Arweave wallet address used for staking and rewards
    ADMIN_API_KEY String Generated API key used for admin API requests (if not set, it is generated and logged into the console)
    BACKFILL_BUNDLE_RECORDS Boolean false If true, AR.IO node will start indexing missing bundles
    FILTER_CHANGE_REPROCESS Boolean false If true, all indexed bundles will be reprocessed with the new filters (you can use this when you change the filters)
    ANS104_UNBUNDLE_FILTER String {"never": true} Only bundles compliant with this filter will be unbundled
    ANS104_INDEX_FILTER String {"never": true} Only bundles compliant with this filter will be indexed
    ARNS_ROOT_HOST String undefined Domain name for ArNS host
    SANDBOX_PROTOCOL String undefined Protocol setting in process of creating sandbox domains in ArNS (ARNS_ROOT_HOST needs to be set for this env to have any effect) accepts "http" or "https"
    START_WRITERS Boolean true If true, start indexing blocks, tx, ANS104 bundles
    RUN_OBSERVER Boolean true If true, runs the Observer alongside the gateway to generate Network compliance reports
    MIN_RELEASE_NUMBER string "0"
    AR_IO_NODE_RELEASE string "0"
    OBSERVER_WALLET String undefined The public wallet address of the wallet being used to sign report upload transactions for Observer
    CHUNKS_DATA_PATH string "data/chunks"
    CONTIGUOUS_DATA_PATH string "data/contiguous"
    HEADERS_DATA_PATH string "data/headers"
    SQLITE_DATA_PATH string "data/sqlite"
    TEMP_DATA_PATH string "data/tmp"
    LMDB_DATA_PATH string "data/LMDB"
    CHAIN_CACHE_TYPE String "redis" Sets the method for caching chain data, defaults to redis if gateway is started with docker-compose, otherwise defaults to LMDB
    REDIS_CACHE_URL String (URL) "redis://localhost:6379" URL of Redis database to be used for caching
    REDIS_CACHE_TTL_SECONDS Number 28800 TTL value for Redis cache, defaults to 8 hours (28800 seconds)
    ENABLE_FS_HEADER_CACHE_CLEANUP Boolean false If true, periodically deletes cached header data
    NODE_JS_MAX_OLD_SPACE_SIZE Number system default Sets the memory limit, in Megabytes, for NodeJs. Default value depends on hardware
    SUBMIT_CONTRACT_INTERACTIONS Boolean true If true, Observer will submit its generated reports to the ar.io Network. If false, reports will be generated but not submitted
    REDIS_MAX_MEMORY String 256mb Sets the max memory allocated to Redis
    REDIS_EXTRA_FLAGS String --save "" --appendonly no Additional CLI flags passed to Redis
    WEBHOOK_TARGET_SERVERS String undefined Target servers for webhooks
    WEBHOOK_INDEX_FILTER String {"never": true} Only emit webhooks for transactions and data items compliant with this filter
    WEBHOOK_BLOCK_FILTER String {"never": true} Only emit webhooks for blocks compliant with this filter
    CONTIGUOUS_DATA_CACHE_CLEANUP_THRESHOLD Number undefined Sets the age threshold in seconds; files older than this are candidates for contiguous data cache cleanup
    RUN_RESOLVER Boolean false If true, enables the experimental local ArNS resolver service
    TRUSTED_ARNS_RESOLVER_TYPE String gateway Sets the type of ArNS resolver the gateway will use, either `gateway` or `resolver`. Set `resolver` to use experimental local ArNS resolver.
    TRUSTED_ARNS_RESOLVER_URL String https:__NAME__.arweave.dev Sets the url a gateway will use to request ArNS name resolution when type is set to `resolver`
    ENABLE_MEMPOOL_WATCHER Boolean false If true, the gateway will start indexing pending tx from the mempool
    MEMPOOL_POLLING_INTERVAL_MS Number 30000 Sets the mempool Polling interval, in milliseconds
    - + diff --git a/gateways/ar-io-node/linux-setup/index.html b/gateways/ar-io-node/linux-setup/index.html index 5971f9b0..c87fc970 100644 --- a/gateways/ar-io-node/linux-setup/index.html +++ b/gateways/ar-io-node/linux-setup/index.html @@ -20,7 +20,7 @@ - + @@ -110,6 +110,6 @@
  • Save and exit nano.

  • Test the configuration:

    sudo nginx -t
     
  • If there are no errors, restart nginx:

    sudo service nginx restart
     
  • Your node should now be running and connected to the internet. Test it by entering https://<your-domain>/3lyxgbgEvqNSvJrTX2J7CfRychUD5KClFhhVLyTPNCQ in your browser.

    Note: If you encounter any issues during the installation process, please seek assistance from the AR.IO community (opens new window).

    - + diff --git a/gateways/ar-io-node/observer-upgrade.html b/gateways/ar-io-node/observer-upgrade.html index d6f1c471..129f85aa 100644 --- a/gateways/ar-io-node/observer-upgrade.html +++ b/gateways/ar-io-node/observer-upgrade.html @@ -20,13 +20,13 @@ - +

    # Upgrading to the Observer Module

    # Overview

    From time to time, significant updates to the AR.IO Gateway node software might necessitate additional configuration steps to harness the entirety of the new features. The recent addition of the "Observer" module, designed to monitor the health of the AR.IO network, is a case in point. To integrate this module successfully, users will need to undertake two supplementary steps beyond the conventional upgrade routine:

    1. Supply the keyfile for an active Arweave wallet.

    2. Configure specific environmental variables.

    Both of these steps can be completed during the normal upgrade process BEFORE you rebuild your gateway (step #5).

    # Supply a Keyfile

    A primary function of the Observer Module is to upload reports on the health of the AR.IO network to the Arweave blockweave. In order to do this, transactions must be signed and paid for. This requires the keyfile for an Arweave wallet be provided to your gateway.

    You may use the same wallet linked to your gateway in the AR.IO network (AR_IO_WALLET in your .env file) but in most situations it is safer to use a separate fresh wallet, or a "hot" wallet you use for safely interacting with Dapps, especially if you host your gateway on a remote server where other people may have access. Find more information about creating fresh wallets here (opens new window).

    Remember, your keyfile contains the public keys to your Arweave wallet, always be extremely careful not to expose it to unsafe conditions.

    Your keyfile must be saved in the new wallets directory in the root of the gateway repository, with the name <public address>.json

    For example: QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ.json

    # Environmental variables

    There are two new environmental variables that should be set when upgrading to Observer. Both of these should be added to the .env file prior to rebuilding your gateway:

    • RUN_OBSERVER (optional) - This is the on/off switch for Observer. The default value is true, so omitting this from your environmental variables will not prevent Observer from running. Set the value to false if you want your gateway to run without Observer.
      • RUN_OBSERVER=true
    • OBSERVER_WALLET - This should be set to the public address of the wallet you are using to sign Observer transactions.
      • OBSERVER_WALLET=QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ

    Note: If you encounter any issues during the upgrade process, please seek assistance from the AR.IO community (opens new window).

    - + diff --git a/gateways/ar-io-node/operation.html b/gateways/ar-io-node/operation.html index 9cc181c6..5d74755d 100644 --- a/gateways/ar-io-node/operation.html +++ b/gateways/ar-io-node/operation.html @@ -20,7 +20,7 @@ - + @@ -68,6 +68,6 @@

    # Chunks

    Get existing chunk offset information

    /chunk/{offset}

    Example

    Request

    https://arweave.net/chunk/146788128412032
     
    Response
    {"tx_path":"hdWq1ZszBltk9XIkGv2yDLijyWbG7tnrRGT7VLc3hrKq2uqaqCHhijNLumytek1GK_EfsHS5zGYSyXP218ZrlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAL9xRcPRiJdHwKIwqVWFc03WLQPX_pdPK6eBkGDyoyglINUplsTV9ctXMDznPacmopzSYyxvbMbEql8jRW9z3uvdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAHWcAO5fnvS8i1dR0DMvq47fvjc6BCAKRYUyEQj1HeOkrQwuFz108Gvrl6UZteWygR75jjAmC3XxnY6hjnGMvTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtAAAAp86EvExjN5pmMbgA0epeTQQSmcu48Y2VDDcPA_lKJ6IQow56ogsMrzbS8S5IQG-7_L5dWzKCKDsAeaZ_az4CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAA8r751YA8Kq2_AleQT_A_R7HU59WAPFZaAlzRwXB8aYTpsfD9gtQXIN87OK0DEkDrBif6D-0YYrDVEG-8JCZtfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAA5Kqqj2vVHEG_K4NunOiODeMSfXnXyT0eCaf_xJDDIAbfUzMg0K612E47CYUVQSbeR46GAPRm7bHMXjtmJii7YQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAME1z0BlQq8hEamYDmMnYo2ESNoQ33F466PT9IccTwKdxGcmv67CXThF9yIhkiiujvXaVK8lJ7jSJei_OTNLA1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABE7CKeu3Xce8mGabqh6VQhlht_SdtFe94-UuuKdYCWkfMQIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAROwig","packing":"unpacked","end_offset":"146788128412032","data_path":"yGaK4gUHpKT592HBM52EPtYPTOlXQ0xEsYAtsTLDKZf5DH-Cgsm9ozNJz1GyUWfGl1821cKPzRYEXyS-2ElccAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA0tWhxbuyMy_85pTq-fKmzglh8tf7enrnc0CTObxp4B1h6Bbz_ro2lKtst64jbBFv2hmJULiXZFuS2FGiOTXxFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAkLsCIhZqqii07Ogt1xLB9tcJCy6nXb-PLCX4uJffDUEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQewig","chunk":"aWNhdGlvbhhDeWJlckNvbm5lY3QOQ2hhaW5JZAQ1NhxDb250ZW50LVRhcmdldIABMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZQxTb3VyY2VIMTU1MzFmYTItMTIwNS00ZjYxLWI2ZTQtYzlmNjhlY2Y4MWY3FENvbnRlbnQtSWSAAWE5ZTRhMGRkZGY4ZWJmNjFlNzAxM2I1YzEwMGM2ZWE5YjM5MDg1YzZmMjhjZTc4ZGI5YjVhODU4YTUwZGQ5YzIcQ29udGVudC1EaWdlc3SAAWE5ZTRhMGRkZGY4ZWJmNjFlNzAxM2I1YzEwMGM2ZWE5YjM5MDg1YzZmMjhjZTc4ZGI5YjVhODU4YTUwZGQ5YzIcQ29udGVudC1BdXRob3IYanZwbm1hemUxcHhhAHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweDVlOWIxNDY4YjIyYWQ1Yzg5MzliZGY5MmE3MjRjZmFkZjg0YWE5MmRcIixcInRzXCI6MTY5MTQ2MDYxODMwMSxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwianZwbm1hemUxcHhhXCIsXCJ0YXJnZXRcIjpcIjM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2VcIixcInRpdGxlXCI6XCJGbGFwcHlNb29uYmlyZFwiLFwiYm9keVwiOlwiU28gZnVuIHRvIHBsYXkgaW4gbXkgc3BhcmUgdGltZS5cIn0iLCJkaWdlc3QiOiJhOWU0YTBkZGRmOGViZjYxZTcwMTNiNWMxMDBjNmVhOWIzOTA4NWM2ZjI4Y2U3OGRiOWI1YTg1OGE1MGRkOWMyIiwic2lnbmF0dXJlIjoiMHhlM2Y2ZjlkMjliMjQ4N2M0ODQ4MjNiZDdhNDAzMWZiZjRjNTE2OTAzNmUxYzhlOGZiM2VmMWRjYmU2YTM2MmRhYzFlNzgxNzllYjljYzdjM2U3MGUzMzE1OWYyMjVlNzIxNjYzNzk2NmNjOGVkYTg0MjJmZmM5YjU3M2YyZmI0MyIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFT1IvZ3gxMmh1L1hSZzB1QTlXbnpFQXU5VFg5Mk8vTVRBY3VmT3YxNElVbVhuajNlWWthYXZVazFZczNDNk1ObGtVaEt4Z2orYnhaN3k4SUVYTUhiUkE9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4NWU5YjE0NjhiMjJhZDVjODkzOWJkZjkyYTcyNGNmYWRmODRhYTkyZCIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDZjYmFiYTVmZjg4OTc1MTc2MzFlYzcxNjJmZGE3MzU1MzcxYjVlN2NhMGJjODQ2MmU2ZGMzMDQxZjZjZTU5YjM3OTFiYmJlY2RiMWUwN2U5MmI3NDgxMTc1YjExYjUwM2Q1OTIwNzNjNDM0MzE4MzEwZDYyNzEzNTM4NDFlZGZmMWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFT1IvZ3gxMmh1L1hSZzB1QTlXbnpFQXU5VFg5Mk8vTVRBY3VmT3YxNElVbVhuajNlWWthYXZVazFZczNDNk1ObGtVaEt4Z2orYnhaN3k4SUVYTUhiUkE9PSJ9fQEASjduLbz5q9JRuhdSD8Q4R2o9F24qLprPskKXQYkFd25ZGu1vrtLX1rXr1H-EcBCJAXacKORIgHErMDgI1oaS0txlQeeOPlrp-XmJW2dZWMOaY2SDplmI60dvHtsh7ZzfQPdKkGfWUo7lK6SUKbZV8q_2bmqIP0Tgfu5lTQbHqu9lpDaW5gmmh8f66bftafRsj1OZaGoGcieIl2QlbEAVsetyIxVvw7gFC0nyFkErRb8nTyKJoK-5KG92Ql8HUkvdbbCE3KPPnRyWPEjUUSlMO7bOhyrV1m4TbWguIJrnDF9ctIm-NeGAUmDOJYxo24RCm5stAMvUc90hAN4eFh3LgesvEpTqNNJP1A2cemxT8CxZ2UlX1IRNMKicvvYCDvOPv_OpP1NfVsDyPrHLUTq-9cMkGfD4JbIQjmnrca0lT6F_mLaXc-siu8mw4GD6UCSLmnvg_yQ38nVpQUwtcXyoYbiSefotE-J2CV9SlqQwyYjicmNnxJxWkTwOYWMuUeooiAJqUPsnp_zkEHanFG1LgFTYRQls58ef4AhKX_yZJ-hYTK2Fw0BSSiibZSNxcfu0tD-cK6eblIDYPSWBnLYaw0ZqE2A6MvlwDP-_9E8WQA6uLpZvQejApeCk3p4bE3bKl6AV7_yt3dachNmkFaPCmU_4bPVDDQ0AP4KyceW-o1ic-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAACAAAAAAAAAB9AQAAAAAAAA_yBRhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QUQ29udGVudC1JZIABYTJjNjIwYzUwZWM0YmQ0OWZhMGUyNDAxNDUxNGM3NTlmZjZjZDRlYjFiOTRjNDRjMzc0Y2NkNGNmNGVmYzAwMRxDb250ZW50LURpZ2VzdIABYTJjNjIwYzUwZWM0YmQ0OWZhMGUyNDAxNDUxNGM3NTlmZjZjZDRlYjFiOTRjNDRjMzc0Y2NkNGNmNGVmYzAwMRxDb250ZW50LUF1dGhvchg1aTNhNTZzZjY5NjQOQ2hhaW5JZAQ1NhxDb250ZW50LVRhcmdldIABMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZQxTb3VyY2VIMTU1MzFmYTItMTIwNS00ZjYxLWI2ZTQtYzlmNjhlY2Y4MWY3AHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweDY3NzM2YjI5MGFhZWI1ZjM1NzZmOWEyZGVhYzYwYTVlNmY4ZWRlNjBcIixcInRzXCI6MTY5MTQ2MDYxODA5NSxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiNWkzYTU2c2Y2OTY0XCIsXCJ0YXJnZXRcIjpcIjM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2VcIixcInRpdGxlXCI6XCJGbGFwcHlNb29uYmlyZFwiLFwiYm9keVwiOlwiU28gZnVuIHRvIHBsYXkgaW4gbXkgc3BhcmUgdGltZS5cIn0iLCJkaWdlc3QiOiJhMmM2MjBjNTBlYzRiZDQ5ZmEwZTI0MDE0NTE0Yzc1OWZmNmNkNGViMWI5NGM0NGMzNzRjY2Q0Y2Y0ZWZjMDAxIiwic2lnbmF0dXJlIjoiMHhhNDhjOThiM2FkZGQ0MDdiMjk1ZTUzYjJmMzgwZmJjNDBlNDFkZjY1OWQ4MmM2YjMyZjIxOGUzZjdkNGI3OTZkMjAyZDdjMDhhZDFlNWUyMTUzMWM2N2FhNjFmM2EwMWQ5MjhmZDY0Yjk2YmFhMmE3NjA5NDQ0YjI0NTQyZjFmMCIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFY0xOY1Nqcm1PdHJIN2hSQTBaZkRKc29kbE5UWDYyc0YrWG16R3Q3OFFHZS9IdFlaZ1EvWGlCc1ZUUTV1VUhHQTd3RGdsOUxUenZhUzAzSUZsN1dzb0E9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4Njc3MzZiMjkwYWFlYjVmMzU3NmY5YTJkZWFjNjBhNWU2ZjhlZGU2MCIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweGNlMzJjYjMzOTUzZDJmZGIwNDNlNzhjZjBlM2JlYWNkZDgzMDI0NDEwYmMyNDc3YjE4ODAxY2Q5M2E0YTI0ZDg1Y2RiMWMxODM1MjQ5ODI2ZWI1NmRkZWNkNTc3MjA2YWExOWMxNDlmYjdlZjU0OTcxMmIwMzFhNTliZjEzZDRkMWIiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFY0xOY1Nqcm1PdHJIN2hSQTBaZkRKc29kbE5UWDYyc0YrWG16R3Q3OFFHZS9IdFlaZ1EvWGlCc1ZUUTV1VUhHQTd3RGdsOUxUenZhUzAzSUZsN1dzb0E9PSJ9fQEAFKoU3ie5lW7RMjwwmy_pGSxGlqkxRwEi3WQrUec028qreZy4lna8hpiPnu2wMo88hHOt51MXRnzVCX686M3_igQddk5iH-BI-GS0B3bOUo7ytMkMWwA9jRLPPSZOSwiUwTlu3xRJtt9Zy80ikx8V2XAEx0TK2E1FKnf3P4c4waN5RBURsqYVFGV0JpjRvXAk9D1hTkQGC7mga5RWiJJIGc6wbBuFdsXnZhgBiryNYThnUsu1hki1tJrppVfH_Y7gXThrsSS6ltuCnGZ5wtwhq2TqMeY78BBAAcMcnYSN56DSh0NNPqzKRsyfVFhpBc1CFh7cJogwW1LK5iCTCmXkE9TDndnftGERxPJK3L5ELWfAhckHAWwBj01KZ0-nVQoLGt2msWApiyoqVHeU09tPlCD9EA0v_jsOS6MnS2bUFb6XqVFiqMCueOW_0Sbq2s_J8PWn90lorfkZjLps21LNRnlenxy7qeCC2x_7Ui1TbGmCFajA9iA8LI27lBRBF1kvnM-ME7xXJx68lbqkxiDvGNJthQXKxnL8O4GcaOEVyXG5TITT35TuKs9HIiUB3L6tO0ILw2YMi5-Gxldr4PqZqmTbuB44N_AzYbbVkxhGvabT4Jx1eXtN2YT7kgBChGGEBWgMytaw4GCeavXHuIxygxriOG-ODQF_EnusyuFSJh-c-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAABwAAAAAAAAAMAQAAAAAAAA2QBBhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QUQ29udGVudC1JZIABNzY0NWQ0MGM1NjhkZDdmMDdmNDg2MTgxYTc0OGE3Y2FlZTM4ZmMwZjA4Y2NmOWYyYzI3NTkzZWI3ZWY1MDg4NRxDb250ZW50LURpZ2VzdIABNzY0NWQ0MGM1NjhkZDdmMDdmNDg2MTgxYTc0OGE3Y2FlZTM4ZmMwZjA4Y2NmOWYyYzI3NTkzZWI3ZWY1MDg4NRxDb250ZW50LUF1dGhvchhraWIwMDY1ZWUyMXgOQ2hhaW5JZAQ1NgxTb3VyY2UIYXRlbQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwicG9zdFwiLFwiYWRkcmVzc1wiOlwiMHg0NzM1YTBkMjY1YzEwYmZkMzdmYjllZjUwYjg1MGQ1MzUzOGI1NDZjXCIsXCJ0c1wiOjE2OTE0NjA2MTg2OTQsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcImtpYjAwNjVlZTIxeFwiLFwidGl0bGVcIjpcIjExMTEyXCIsXCJib2R5XCI6XCIyMjIyMjIyMjIyMjIyMjIyMjJcIn0iLCJkaWdlc3QiOiI3NjQ1ZDQwYzU2OGRkN2YwN2Y0ODYxODFhNzQ4YTdjYWVlMzhmYzBmMDhjY2Y5ZjJjMjc1OTNlYjdlZjUwODg1Iiwic2lnbmF0dXJlIjoiMHhmZjBiNGY0ODk3OWUzZDJiYzc3MWY3NGVlMDEyOTcxZDQ3MDZlOWM4MDI0MmZlYWE5Y2Q0NTRlMmM5N2E3ODQyMDI0NGFkYjFkMzI2ZmU2NjNlNDc1MzEwYjg1MTBjYTFkODJiNzYwZjdkMTYxODQxMzE4M2M2NWRkMGI4ZWU5OSIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFRUp6WUt5TXF6ZnRueDJsbWkvZ1lSNXFWN1U1Q1NGWjR0QUZhb1NFbGhGTUhrYWdRcW5sM1NKTWpEWllXK2RaV0NqNGtUR1pIL29acE94WFN2TENWc0E9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4NDczNWEwZDI2NWMxMGJmZDM3ZmI5ZWY1MGI4NTBkNTM1MzhiNTQ2YyIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDZlZjk1M2M1ODkyNTZiYjI4MWQ4Njg5NjY0ODE1ZjZkOTlmYTc1ZGZlNjJhNjEyOWNjODQ5OGEzYWY0YWIxN2U1NGQzM2I1MDMzNzkwNzEyYzkyNjUyODUxZDgyZWRhZWUzYjY5MGE2OTg0ZDVmYThkY2E5OTUxZTBkMDZjODU5MWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEF0ZW1SZXZpZXcgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUVKellLeU1xemZ0bngybG1pL2dZUjVxVjdVNUNTRlo0dEFGYW9TRWxoRk1Ia2FnUXFubDNTSk1qRFpZVytkWldDajRrVEdaSC9vWnBPeFhTdkxDVnNBPT0ifX0BAI_bnzo7AAftuAxV83Ap1Slip7XUxT5CPuq0mXIDhpdX-P9Eigb3ujKiNHBfz7T4kwQnMQd0OGkie6Gl41QA_oJENvlA3HqC08nQghvUVafaPaepioRVgeOk1RdbsTly8hW9as7kY_qX0shdVtWFPASlXlnoB8tDd2wqdRf9hDop1J7EkySOwCx5s3NoSsgJEJ6r7Fhp5iNOdj2aG8LPJ95rOhec0qcSv1GFUxRJRB9Wm9o6vplDQk4uPmqjlywkXKGZmgPY4c_6IigO0F1XWJq5ubAqmO4ijovTZpuy4ZydM2WC6xZaSpngNLqn8_oGLwMvoYxZiPcPxFAiSIcVDRtzPtBvw-VbpI-a5TxdSZSshWVeA7sE8oKf8XNZameaNAg7UmYez3YYOfXt4lJeWDudyqceiYLtyjfLd0fIGAXh7q4PLhlhYzybFjOjuHKkOA-msoXwvYfAgfOzkQZTFQk6W7uAqqB11RPWLb_QT2mZ00y1fBLwG9W_NOnEBgP0iNNDIcLU5H-XbctDHbCkWjy9Ra0ofXm9De7B61kxEis0GCmwBXfguQRtq54edxlftewe_0UYHsMBckGfJDXba39f4z14vqyqYj03IIJKs3at_ITEp01TF9Of5lcLgtswX6qrrkQ-bLBcJqrigEowlzo-v6PYkPLm7K3V7Y38Cew4nPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAfgEAAAAAAAAP9AUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0DkNoYWluSWQENTYcQ29udGVudC1UYXJnZXSAATM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2UMU291cmNlSDE1NTMxZmEyLTEyMDUtNGY2MS1iNmU0LWM5ZjY4ZWNmODFmNxRDb250ZW50LUlkgAE1NDQxYzhiZWZjMjNhY2JiODcyNjcwZmM2NjI3MzBkOWU1NWM0NDMyYjI3ZjEyODQyMTZmMjI4MmM1MTZmMWUwHENvbnRlbnQtRGlnZXN0gAE1NDQxYzhiZWZjMjNhY2JiODcyNjcwZmM2NjI3MzBkOWU1NWM0NDMyYjI3ZjEyODQyMTZmMjI4MmM1MTZmMWUwHENvbnRlbnQtQXV0aG9yGjAwNjYxMDU1OTY3MzEAeyJjb250ZW50Ijoie1wib3BcIjpcImNvbW1lbnRcIixcImFkZHJlc3NcIjpcIjB4MGYwMTIzMGYwNjVkYjljMzQ4ZDNmZTZjNThlODZkNGRlMjk1MDhlZlwiLFwidHNcIjoxNjkxNDYwNjE5OTI1LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCIwMDY2MTA1NTk2NzMxXCIsXCJ0YXJnZXRcIjpcIjM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2VcIixcInRpdGxlXCI6XCJGbGFwcHlNb29uYmlyZFwiLFwiYm9keVwiOlwiU28gZnVuIHRvIHBsYXkgaW4gbXkgc3BhcmUgdGltZS5cIn0iLCJkaWdlc3QiOiI1NDQxYzhiZWZjMjNhY2JiODcyNjcwZmM2NjI3MzBkOWU1NWM0NDMyYjI3ZjEyODQyMTZmMjI4MmM1MTZmMWUwIiwic2lnbmF0dXJlIjoiMHgzNTZlMmRkNmI2NmQ4MjEwMDZjNWMxMDk0ZDRkZDk0ZjA5MTJmNjZkMTVmZDc4OTc1YmY4MmE0MzJlMDcwNjE5YmZkMjE0ODg5OTU4MmVkN2M5NWYwNTExMmE0MDBhYmU2MzcyOTdhMmExYTJkYjVkYjMzMjIyODFmNWZhOWE1ZCIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFbWs3aks3M2Uwb0FyQjJyS0VpclVvSjZ1Mmp1N3ZVQnRLSGozckdTSDFGQVJka1UvTUVPd2x5blZ2czltMHFEOVFhV2hmVU1pUXhNb2x0c2dvN2gzRlE9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4MGYwMTIzMGYwNjVkYjljMzQ4ZDNmZTZjNThlODZkNGRlMjk1MDhlZiIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDE4MmU3ZmM2YzhjYjI2YTExNzJiMDk0YjEwOWI3Y2FjNTBiOWVkYmE4ZDE4ZjgyZDJkN2ZjODI5ZTcwZGI3OGQ0ZDUyMTI1ZjkzMDNmMWFhZDFjNGQ4MmU3YjAzMWQyNDNhM2FmN2Y0NWMwOGVjN2JlMGQ4ZTExMDM4YjcwY2Q5MWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFbWs3aks3M2Uwb0FyQjJyS0VpclVvSjZ1Mmp1N3ZVQnRLSGozckdTSDFGQVJka1UvTUVPd2x5blZ2czltMHFEOVFhV2hmVU1pUXhNb2x0c2dvN2gzRlE9PSJ9fQEAQWbiM7sww_5Us231eAaPVnM7FPqcGlMV0c-8rLTO2sKuZnsqcx21n29y1vQgTklGcxyLOOVTjxokynhjtwmnJsYUYvT0LSnYjFvNQtjv7HnPKGtAafL2ns4th8B4ImVqeb3SznqnAZ6PH5Q1lNe9R1YxpyQ_HahuL3g00nOSastUaLMCAdPBQdGsfyu-Y3k2XhxDXa8V0EQWTFrhPtGZzZl8zr0D9pktOni79gQT9aVq_3CJPRuiYNjfZlCFun1TdlA_AIIK-LaGDrwfV5DAsDX5-WtsrccL6dWe0ULHY3mfNvBSi0nn0wPG30K4WAPS7VDCg5mYDJfS1lv0p65w4A1sJzMrSmgZ6ohb_XTwn1wb-5h-E_wom6wJqFlVpSGMspUPqgi1Ycp46Qa8elWSPTF1zHjQtOUWACHjkKPElFak98ZThdM4LYQ7tOdDPAJCdINejMAtr3lrVHTdkza68oSFs1g8Ob5K5n-bmE67uK9EkXIx1fqfZuU46asBXkIqK9DkMtSjIAd16ghHGyamDXNPtKZm3Z6oS7jH5YrwXp5afOa30-RagepyS5f6jwb4HRUPxhweyqE6LJ812y_CZF4uW352tdOKNStGZTA6QddobGPHZdn-j8D7MiZSgnUlhYQMedLQPmxLPS5ypPt6TagQ6MneHyTV9H2Ldcc_rMyc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAACAAAAAAAAAB9AQAAAAAAAA_yBRhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QUQ29udGVudC1JZIABNTU3ZmM5ZDBkODgzYzU3NDU0YjNhMTE2OTBkN2YyYmMzYWUyYjAyZDcxOTVhMTdiYjkwYWQ4ZDEyYWU1NTBhNRxDb250ZW50LURpZ2VzdIABNTU3ZmM5ZDBkODgzYzU3NDU0YjNhMTE2OTBkN2YyYmMzYWUyYjAyZDcxOTVhMTdiYjkwYWQ4ZDEyYWU1NTBhNRxDb250ZW50LUF1dGhvchhtYXdtdnMxcml3bHEOQ2hhaW5JZAQ1NhxDb250ZW50LVRhcmdldIABMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZQxTb3VyY2VIMTU1MzFmYTItMTIwNS00ZjYxLWI2ZTQtYzlmNjhlY2Y4MWY3AHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweDYxMzA4MTIyNWExNGI0OGYzMWFmZmIzNzNhYTA0YTBlZDk5YzAxNDdcIixcInRzXCI6MTY5MTQ2MDYxOTg2OSxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwibWF3bXZzMXJpd2xxXCIsXCJ0YXJnZXRcIjpcIjM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2VcIixcInRpdGxlXCI6XCJGbGFwcHlNb29uYmlyZFwiLFwiYm9keVwiOlwiU28gZnVuIHRvIHBsYXkgaW4gbXkgc3BhcmUgdGltZS5cIn0iLCJkaWdlc3QiOiI1NTdmYzlkMGQ4ODNjNTc0NTRiM2ExMTY5MGQ3ZjJiYzNhZTJiMDJkNzE5NWExN2JiOTBhZDhkMTJhZTU1MGE1Iiwic2lnbmF0dXJlIjoiMHhmZTE3NTc0NGJkZjU3MDQ5MjljZmE5NzMwNDhiODM0ZTkxMTMyMjcwMmIxMTkyMjIyMzZhNDlmOGVmMDZlNTdjYjRiNTA1OTBjY2VjZjBmYjdkOTEzNWE5MmFlOTIwMDJjMGZkODQwODc3Mjg5NTNkODQ4YTNkOTI1ZjZkZGRjOSIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWkQ4UXJmUktVc2ZkME9iTjdvZlEvZkN1K2N1akIrNlMvZVY3eml0dUlWa3lId2d6UlBRejZBVUJSaFRYQVRNSGZNemRMQmNCQ2phTFE2ZWtjbGhpeFE9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4NjEzMDgxMjI1YTE0YjQ4ZjMxYWZmYjM3M2FhMDRhMGVkOTljMDE0NyIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweGFmOGZmY2UyYjMyZGI5ZGIxNzJjZTdmMDI4OTc0ODMwZDliMmY1YjI1YWNkMzMwOWVkNGEwY2VhODRmZjFjOGQ1MDQ1NjRiY2UzZDNjZmYxMTkxOGNhYjUzNzNjYzFkNDM0MDU1OTNmNGIzOGVlOTVlZDE4MzFkNzNkMDlhMDI0MWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWkQ4UXJmUktVc2ZkME9iTjdvZlEvZkN1K2N1akIrNlMvZVY3eml0dUlWa3lId2d6UlBRejZBVUJSaFRYQVRNSGZNemRMQmNCQ2phTFE2ZWtjbGhpeFE9PSJ9fQEAjrnmlMttmqdj5USxoJyAfCOFt-hjCsTQQ3c98q9-jSNHbe6oSfQngjqG5C30nMI5OkoWDYHulfVeqDBoLeepmYDR_BHQKURXfadEXzqrtt4Cn8HMXgULO7DuF7iXZ9eec3WQvCbtFhUy-MwszxRw7kMqkTdYxVj9Hp8Qx3_eJe6JFus1MNJSZN-PC6w1R9t-vnDD-c8RNrjcwwwdRFY1DRH1POCQnOOJg0KyO8837G1IaoFc9hickgk5gw3ykyWqspmcMPDHFSGJt6eYSq67O0Ez-TPhPPURxaKWHlLG4_QbEHKWuJTjNMo-X6bElDLZfdF1wgQ-5Ja_8rJZ29m78e7lnnzeToqKAlitvg0LPl7-T20l0E4_VHi32YkiYMDDDZ49sRR7Ygm0bIpP6CclJCF0tBnEJQe_VQ3BiPxv9JxOOXewXhPAKKyZnOHgDN6p-_g9joHXDyD_1H-EdXpltIKBAumKjJAloqP9J9FDaCwqULqQmi0u_zC2Xwbq-tPurRKG_evsJlbVEEFJe6-HNaSCrMEgKRPjjgHmxBjQIj5wGv_ZTLkpbtdZ3ZL5tMPu2GhIEgudhKj5eW3NXjyW2sX6nXBz1JbF30vFIMmBupJTJ5m9rhnflUeCKS466QROfb844dpQTtfZVWwunMHOU_Yh9WlQvxnINdRR_fX616mc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAACAAAAAAAAAB9AQAAAAAAAA_yBRhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QcQ29udGVudC1EaWdlc3SAATVlZWJjNmM2NzZmNzMyN2JkZjkzNDkzYmIxMzM2ZmQ5Yzk5MWUyNzQ0ODlhODdmZjczY2EwZTcwODNkNDQwOTUcQ29udGVudC1BdXRob3IYOTFpZG9ybnh2ZmczDkNoYWluSWQENTYcQ29udGVudC1UYXJnZXSAATM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2UMU291cmNlSDE1NTMxZmEyLTEyMDUtNGY2MS1iNmU0LWM5ZjY4ZWNmODFmNxRDb250ZW50LUlkgAE1ZWViYzZjNjc2ZjczMjdiZGY5MzQ5M2JiMTMzNmZkOWM5OTFlMjc0NDg5YTg3ZmY3M2NhMGU3MDgzZDQ0MDk1AHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweDZmNGE5Mjk5OWJhZDc0OWY5MWZlMzJhNjIyYjhlM2VmNDE2MzY3MDVcIixcInRzXCI6MTY5MTQ2MDYxOTM5MixcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiOTFpZG9ybnh2ZmczXCIsXCJ0YXJnZXRcIjpcIjM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2VcIixcInRpdGxlXCI6XCJGbGFwcHlNb29uYmlyZFwiLFwiYm9keVwiOlwiU28gZnVuIHRvIHBsYXkgaW4gbXkgc3BhcmUgdGltZS5cIn0iLCJkaWdlc3QiOiI1ZWViYzZjNjc2ZjczMjdiZGY5MzQ5M2JiMTMzNmZkOWM5OTFlMjc0NDg5YTg3ZmY3M2NhMGU3MDgzZDQ0MDk1Iiwic2lnbmF0dXJlIjoiMHg2ZDUzZDcwNzc2ZGIyMWNmNDY1NjMzNTJlMWY4MGIyNzE1ZDg2YzA3ZGNmMThjNjcxZmM1YWU2NjY4NDAzN2Q5MWRhNTJkYzJlZmJiYzQzZjk2NWI5YjQ3Y2ZhZjBiNGNkYTg1NGE3ZWFhZGEzOTVhYTk0M2JmMGUzZDBmNjI2MiIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFOVc5eGhjN2lucUtWRWxRL05zNnpqdTlrcXpEVkNQSTRNWmxxVkFyWTF5djRzV3IwSEIycEloazZOUjlycW1ha2Jza2Z2VzRoUjgzU0k1UGxLZEJiL3c9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4NmY0YTkyOTk5YmFkNzQ5ZjkxZmUzMmE2MjJiOGUzZWY0MTYzNjcwNSIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDQ5MzAyMGY1MzgxYTkwY2E5NzQ4MGU5ZDNjNGRiN2Y4MjE4NWMyYjMyZjczNjYxMjA0MjFhMDk1NTVjYTZkZGE2YWM5Y2Q4OGEzYjBhNzE2MTczNGQ0ZDNiYzQyM2EzYjk2YTRhMmJmYTZkNzU2MDJmMDFkYWRkYmExNmFlMjQyMWIiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFOVc5eGhjN2lucUtWRWxRL05zNnpqdTlrcXpEVkNQSTRNWmxxVkFyWTF5djRzV3IwSEIycEloazZOUjlycW1ha2Jza2Z2VzRoUjgzU0k1UGxLZEJiL3c9PSJ9fQEAkAh0rKMc6sJlO4yZoP6oexiYJjklR2yvaOauUJt4aYIQjIc3IWjTjTdQEBC3KST5zlFadDi-8D-sY4O0IOFkE5JfOVIjPe5PBDw10YY_eydOF73KYdEebEjcWiLWQMtbE64HbElsetrRqZBmrMcEgqDs815rwoXUvCfqGZ8NSt9LanXE5BFVWMbfJlDXiQ5gXBGYk44aCTli1KRBdsF3KwQLEOci-3t9LkQTMU7adLwzxbSh-oJFZsBq-gZSuDfaQzeHwzhicPzZ-Qoq80nZW0I-W8f4W1NnRnUL6qJcLJcCamR0aeqioc7286v6FgSNOu7wqCfmzx7JEWNS0De7ZhP3LkFf3K1Fwpl23M_MFlWAzdSZg5JuigWjsH4GSAWIKW7-7XdgjFi6WwEC7yzzUaSKeIqdopjtmOmALeKvbYzmfsiXiM20pz-dgOPsEn3upopgENfr_GhoEzCh3e_rQ66Xc9tAO6ZKaNi8whN90nehJc7tOR9JSFLPveS03gVEYIA9BffkAdZHDmh--EZWgenU67VKDAOJtoi_rzYJo_ylQ1HKUEcclFw67rCuih5HJlGhZKRdxgBkzo43tdwRgK_e-__3tOo_2UdM5sJJ2bDgf8m-bJkI3RJhOHDvLl3k3T9F1xJRCMzm7-v8FLH_g-PbwX1SI5S8iVRRYM3-ynKc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAACAAAAAAAAAB9AQAAAAAAAA_yBRhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QUQ29udGVudC1JZIABOWY5MGYwOTdkMzJlNzkyZDQyMjNkZGM3ZTJmMmU1ODhjYjNkMGEyYzZjNzMzMmZmNmEzZTI3MGQ5ZDE2NDhlZBxDb250ZW50LURpZ2VzdIABOWY5MGYwOTdkMzJlNzkyZDQyMjNkZGM3ZTJmMmU1ODhjYjNkMGEyYzZjNzMzMmZmNmEzZTI3MGQ5ZDE2NDhlZBxDb250ZW50LUF1dGhvchhkbjYzYTdkYTdvM2IOQ2hhaW5JZAQ1NhxDb250ZW50LVRhcmdldIABMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZQxTb3VyY2VIMTU1MzFmYTItMTIwNS00ZjYxLWI2ZTQtYzlmNjhlY2Y4MWY3AHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweGQ1ZDkxMTc2ZGIxYjIyMjk4YTMzNGI5YzMzMmZiYTJmM2MzZGYwMmJcIixcInRzXCI6MTY5MTQ2MDYxOTQyMixcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiZG42M2E3ZGE3bzNiXCIsXCJ0YXJnZXRcIjpcIjM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2VcIixcInRpdGxlXCI6XCJGbGFwcHlNb29uYmlyZFwiLFwiYm9keVwiOlwiU28gZnVuIHRvIHBsYXkgaW4gbXkgc3BhcmUgdGltZS5cIn0iLCJkaWdlc3QiOiI5ZjkwZjA5N2QzMmU3OTJkNDIyM2RkYzdlMmYyZTU4OGNiM2QwYTJjNmM3MzMyZmY2YTNlMjcwZDlkMTY0OGVkIiwic2lnbmF0dXJlIjoiMHg3YzMyNzZiN2RkZDExYTA0MWE1NWYwMGJkNTIxOTIxNDA4MDgxYWQ4MDk5Yzk1YzZiNTI1YWI4MmM4MmZmNThiMGRlN2QyZmQ1NmJmODJkZjAzNGYyMzkzNGRlNDY2YmUwZTcyOTUyNjUyMTQyMDQzODk4M2M1ODkwOTAwMDQzNyIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFNGVCRTBMcXJFS1Q4NHMvZkgvL2RmK1NYeUFTRnVQNzZxNkJ3T05tcU0wWGlCUzNnR25DTHEyam9vVkZCUXhVYUxkeFJTRnp2U0w0blFRU291NHpiK0E9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4ZDVkOTExNzZkYjFiMjIyOThhMzM0YjljMzMyZmJhMmYzYzNkZjAyYiIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDQwNTI1NGRmYjY0YmY4YzM3ZjFjMTIyNjYwOGI1ZDliZTQ4YWJmMmEwNjUzZjhhZDZlMmQ0ZDA1NTk5MDUxZTIyMTJiZDdjZGJiNTM3YjJjZDc5MWUwODkxZmU3MzcxMTFjOTM3OWQxZDY5MDkyYjZiYTZmZDNiYjhkOWE0YWQzMWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFNGVCRTBMcXJFS1Q4NHMvZkgvL2RmK1NYeUFTRnVQNzZxNkJ3T05tcU0wWGlCUzNnR25DTHEyam9vVkZCUXhVYUxkeFJTRnp2U0w0blFRU291NHpiK0E9PSJ9fQEAZI4AV8tE7Ly8f6711NK5XCYbc5P5w6lx4s1JTeyC1lDtySrlLEgQHc7Kqra94ZtTz0ywgi2fUu7BCfyrIgKSFGPvGEiJ9IrxwXAfULUkwaRQVnFdAp7ZIFXWkGSFv2LTlBEHBg8-dflIQhbo77-fisDCpwP5cNzR2s2zk2JevhCtiA6nSbe6Y6V7JlL-yZ7wT3cujH1yA4jgZzLECOlOAdWU8J8NNIU_RGK9YsVv4_XUimaWv6XmVnn16t9lsCF-eGRNF3fqRcSXR5vhvz5CfuO4Cq2m8-mhKbdnbXAA8OpfmXRpF8FINXq9XeTNUN7FEbSzcqjXvISE7nCuSSQiGBolf4_RS-rhLtwYPBauSsLp2B9Nx_duKjry-7MFZp1Jzp1qksttfx3arm7BY2DdebaYexiOk7bgm33X5ZKLu1Jld6RWToIzJTIztlhzwQIggyMNpkKDxUS63C5qohu-6rCH1j_FQvcKcTTDDDA19sTCr9RD6vg5OUq541LqA75_0bzFilkxe4F877AZ9DS1xix44sGym87_8FHWPxSBxK10S2S9a0Zn-1DMb7zig4TSlRxMrDusDFIW46Kjm6ptIjeAqDaRGN_AgWm_Ao8rOCiudKVdCr4HYTg0KWs1fz8IQpPL7CY8E89EH5SXewIoM2LKxHV3zH4MpPt4BmpZa8yc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAABwAAAAAAAAAMAQAAAAAAAA2QBBhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QUQ29udGVudC1JZIABMmYwMzgyN2M1NTNkOTAzYWNlZDcxNTY5OWEyMzFjMDk0YzQzMmZiMzhlZDBlNDZhNjkwOWRmZjA0OWFjOTIyYhxDb250ZW50LURpZ2VzdIABMmYwMzgyN2M1NTNkOTAzYWNlZDcxNTY5OWEyMzFjMDk0YzQzMmZiMzhlZDBlNDZhNjkwOWRmZjA0OWFjOTIyYhxDb250ZW50LUF1dGhvchhscmczNnc3MmEydHEOQ2hhaW5JZAQ1NgxTb3VyY2UIYXRlbQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwicG9zdFwiLFwiYWRkcmVzc1wiOlwiMHg2M2NkNzhlZDVjOGIzZDdmMGYxMjJjOThmMDRjMmE3YTYyN2JhOGIzXCIsXCJ0c1wiOjE2OTE0NjA2MTkzNDQsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcImxyZzM2dzcyYTJ0cVwiLFwidGl0bGVcIjpcIjExMTEyXCIsXCJib2R5XCI6XCIyMjIyMjIyMjIyMjIyMjIyMjJcIn0iLCJkaWdlc3QiOiIyZjAzODI3YzU1M2Q5MDNhY2VkNzE1Njk5YTIzMWMwOTRjNDMyZmIzOGVkMGU0NmE2OTA5ZGZmMDQ5YWM5MjJiIiwic2lnbmF0dXJlIjoiMHgzZmQyZDFmNDdmZTM3ZWMyNmNkMGE1OTVmOTEwYTYxMWRlNDM1MWM0ZjEzMWJhOTg4ZWY2ZGYxMTNlMzE3ZTlmZmMxZjk3MjkwMTk4ZjcxZWFlMDg0MGI5MDM2NGYwZDdhODA1ZDhjYzM5YjhiYzMzYTA4MjkwYWE0YjcwNGU4MSIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFejhOdHN1TGdiWFpaekdkajZ4NnFLTVp0S0tkSEIzM0MvNjdUT2F2aXNLczhNY1dnS0hMaEhNVUxmUjhBZjhXSk11YUJvcFVORUJHSjlOcndWaUNITGc9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4NjNjZDc4ZWQ1YzhiM2Q3ZjBmMTIyYzk4ZjA0YzJhN2E2MjdiYThiMyIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweGYwMzExOTdhN2M3OTEzNmI3OTNkZDYzNmY3ZjhiZDY4MjFiZmNmOTJhYmI3NDE2YTRhNTQwZTgyOTdmMjk0YTQ3NjFiYmM5Y2NmZmU3M2I1MWIzZTc0ZjY4NGU0NjQ4OGE5MjVhM2VkOWYzNDYyOTAwZmNhYzZhYzA2MzNiNmY1MWIiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEF0ZW1SZXZpZXcgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXo4TnRzdUxnYlhaWnpHZGo2eDZxS01adEtLZEhCMzNDLzY3VE9hdmlzS3M4TWNXZ0tITGhITVVMZlI4QWY4V0pNdWFCb3BVTkVCR0o5TnJ3VmlDSExnPT0ifX0BAEu5x3Usma1zD3MSvE6GBWqsczzjBQvqobYYtD6wUygmB7ASUDv138eUZndcTY2PgkC0WzoghvLnSXDm0pptOnpv5HbNRfJ-luipdZHoUam9K0t23arG2Rj5uixIxI6M_X2MCT8rY4nMMGGjwAE-Rff5JLNAcRekNgauzfwI4vkSWJ6MTIpIot3t3X_QFv0D7G1Y4Mlev36Juv939S81Id5EBnrWqGDTlU4ezrrHZSjmUtBYNX8_gCLjIu1KE82RLpI5L7R9w934OurQLCUrhDGAaTVsU8ejJ0e5SFBHnM0K-vXTS52LIxQ4uM1lopdzdLyvNjMICISj3Ds5R-9ICnCqvAh3TZr22t21P3cayHasZBI3E61XcWUsKpSrMS9FoIUcD6RfyJvTURPJG9GjYuLo-rZXL1LELM4Jx2zmKeuDv33Ug3duSYQaBzEUNCPWnLe1-jdze44kYmc6R8xQ9zs2cKw6C9htviMPbQVWdrj1L5Tk6nhDafj8RnwJ_0tAVtb3yiefxN4NB_Q5j2vpyhSWDtR0MSwn9QcXyUyrHu9nX480HijHgWbZvJXIuK5KAZ8GmcO9jdQmMHEwYghfJJG0LrTEhk5Pea7nX6foFr8xLIR44GVMzZZV27FjzC-gmeH_z_fhq9YoC6ASp3IJ1tL4_68umOfVNsHu05LX_w5wnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAfQEAAAAAAAAP8gUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0DkNoYWluSWQENTYcQ29udGVudC1UYXJnZXSAATM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2UMU291cmNlSDE1NTMxZmEyLTEyMDUtNGY2MS1iNmU0LWM5ZjY4ZWNmODFmNxRDb250ZW50LUlkgAE0MGFmOTRhMWE4YTFiZGJhZDlmMjdjZTRlYmY4YTIxMzkwM2MyNjMyNGJlNjIxYmNlOTRkNmNjMjg4YzFhNjM2HENvbnRlbnQtRGlnZXN0gAE0MGFmOTRhMWE4YTFiZGJhZDlmMjdjZTRlYmY4YTIxMzkwM2MyNjMyNGJlNjIxYmNlOTRkNmNjMjg4YzFhNjM2HENvbnRlbnQtQXV0aG9yGGY0MDExNjUzMTIyeQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwiY29tbWVudFwiLFwiYWRkcmVzc1wiOlwiMHg2ZGIyMjY1ZWNiYjRmNDYxNDNiNmEyNjZiNWUxNDZkMWUyOGM4MjAyXCIsXCJ0c1wiOjE2OTE0NjA2MjAyMzUsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcImY0MDExNjUzMTIyeVwiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIlNvIGZ1biB0byBwbGF5IGluIG15IHNwYXJlIHRpbWUuXCJ9IiwiZGlnZXN0IjoiNDBhZjk0YTFhOGExYmRiYWQ5ZjI3Y2U0ZWJmOGEyMTM5MDNjMjYzMjRiZTYyMWJjZTk0ZDZjYzI4OGMxYTYzNiIsInNpZ25hdHVyZSI6IjB4NWViMGVkZWU4YjU3N2Q0MjllZmUxNTllZTVhNGIwMGNmNDRjZGYxODVmOGY2Zjc5Y2QwM2VmMjhiMzg4NWIzZWViNDg3NTU3NjlhZWMxN2Y4OGYzZDY3NWI5ZDZhY2RmZmQ0ODJkYmU3MmE5NjViMDY2YjAyZjVjMmRmZTMyYjEiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVhHWU9VK21STlk5RzM5L1lzcWFBV0dqbGpyMC9GSHZlWWFFRmxSODlHcDdqQitMNFhmKzRGRjNiOTF0V0NBcGhaZ0N6NElNRVRtU0Q1Qit0QjdmSmt3PT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDZkYjIyNjVlY2JiNGY0NjE0M2I2YTI2NmI1ZTE0NmQxZTI4YzgyMDIiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHhlM2UxM2Q2NWJkNGMxOTkyMzgzMDBiMDIwYmIwOTUyNmNiOWQwZTk0NGE1MTQzYTA4MzUyZDBiZDU2YzNhYzZjNDFjYjUxMTYzYzg5YzIxNGViN2Q2MDMzZDc5MjcwYWUzMzE3YjU1NjJhMWQ1YWE2ZTk0NzgxYmU2OTEwYWEwMDFjIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBDeWJlckNvbm5lY3QgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVhHWU9VK21STlk5RzM5L1lzcWFBV0dqbGpyMC9GSHZlWWFFRmxSODlHcDdqQitMNFhmKzRGRjNiOTF0V0NBcGhaZ0N6NElNRVRtU0Q1Qit0QjdmSmt3PT0ifX0BACC2-5l3m6KnICUDwWqKYLcQGGED9In1BzfP_A3ZTKfMNXzE4RuLxoJzlBpyGK01dduflBTE02xHwYxVWF9yf1XSXm5vu4AZIf3CbNolzp0smMgaeEq15lmT736tKNd9lcFnV2iXwKN5p9Pkg0fP5CpRjbUVE7pcaYbSwevj_VVSADkmJgwatL_o2k6kyMD5OoRYL0Ipli1Y9ZsnvDu3RhhqudDPh0I39PLU72ZamHzzRM2Hhm6vL1hbcDHk11lE7TP8V0410hO8epHPIiIAncOaEb1OmhkNKkK4X2iyqtpjUYwCBhKDo2WaayQAcZimwh3WZmszM1GzbyxX0UMSczFidurhmWHZ3iHHSH4shDri5vMp7_3WFo6VxkPajaiG4f3EKDhM5-zO-LjLloLBODT9_mC_V24IvRYJ5Gz8t6NrTsSL5QWk4pgUCkxTz3gN6oxbgz08MkryOujba-cBUXYsjqnZasN931QEd70DSlYhL6sP7T9ettgctWyE7oRcgMiG2WzLfFqU3FTm-6IarLgGBkf5IHCXEy8aQ0q2DREexYHiMOb6f0w1ixQmncPB_VLastirPxsSAcZa1pkXNEqvmSmr8xXnUuPoQwmu9tKLYMOL_jkPczHAX1LD9U85nKEdctLhdnSoudxEhKx4Ho33HcStZmh0PZD1rbZ5uhVfnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAcAAAAAAAAAEwEAAAAAAAANngQYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0FENvbnRlbnQtSWSAATU3YTlmNTE2NTNjYjg5OTc2MTY2ODJjOWRiNWQzNWFlNDc1MzFmYzYwNGJkZGMxMzBlMDk1OWJmOTY3MTA4NTQcQ29udGVudC1EaWdlc3SAATU3YTlmNTE2NTNjYjg5OTc2MTY2ODJjOWRiNWQzNWFlNDc1MzFmYzYwNGJkZGMxMzBlMDk1OWJmOTY3MTA4NTQcQ29udGVudC1BdXRob3IcaGllbmRoMTEyMjAwMjMOQ2hhaW5JZAQ1NgxTb3VyY2USY3liZXJ0dW5lAHsiY29udGVudCI6IntcIm9wXCI6XCJwb3N0XCIsXCJhZGRyZXNzXCI6XCIweGQwOTA2OTE4ZDRiZGYyZDc3NWY5OTExZWNiOTVhZWQzYjAxMjY1OGFcIixcInRzXCI6MTY5MTQ2MDYyMDYzMSxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiaGllbmRoMTEyMjAwMjNcIixcInRpdGxlXCI6XCI1NDU0NVwiLFwiYm9keVwiOlwiNDU0NVwifSIsImRpZ2VzdCI6IjU3YTlmNTE2NTNjYjg5OTc2MTY2ODJjOWRiNWQzNWFlNDc1MzFmYzYwNGJkZGMxMzBlMDk1OWJmOTY3MTA4NTQiLCJzaWduYXR1cmUiOiIweGEwZDE4YzMxNTMxYTM3ODYxMjUzYTcwZWE0NmQ1MzZiZmUwNmNiMGY4YTJmZjYxYzZiOGIwOWE0MmJiNTM0MmIyMWZkMTliOTJlMTg3MDUzN2JiMGNjMjMxNDcxY2MwNTM4ZjkxOGIwNDMyZjg4ZWIxYjZlYzIyZTYwYmQzYWFhIiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVHVWp5M09oNnNzemZXTjg0U1BsMHdQYTVjUVRUWEJ0YXVYMDdid0l5d3lSRU5GMGk4SjErZUZSUG5PRHF1SmVxbjduVGNjQmFvVWtTelFlejh4M0pMZz09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHhkMDkwNjkxOGQ0YmRmMmQ3NzVmOTkxMWVjYjk1YWVkM2IwMTI2NThhIiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4NDQ4NzE0ODg3MTkxYjgzYTRmOTczN2QyMWU0Njc3ZDE3ZTNiYWRlNTcxMGRiMzI4MzE1ZjFjYjg1NzczZDNjNjNhZGYxODNkZDNmZmUxNzY3NDkyMGYxOTEzYmFkMmI0MTJjODJmNTc0NzEyYzdhZTE4YjAzZDAxYjg4ZGZmMzIxYyIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgSSBhdXRob3JpemUgQ3liZXJUdW5lLnh5eiBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OiAgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUdVankzT2g2c3N6ZldOODRTUGwwd1BhNWNRVFRYQnRhdVgwN2J3SXl3eVJFTkYwaThKMStlRlJQbk9EcXVKZXFuN25UY2NCYW9Va1N6UWV6OHgzSkxnPT0ifX0BAIXJUsxYSPA4WDT5Blj_h3_fHLOgrqifbHA9UPiDlEoS8pvd51Xw_gnfjbPBhyavhCP0l3ym1yl0OpzRsNmN3cnY-kzS4midZEj-FP-_4HYikBz06m8tz0SPDaxLBHcWC03buGm3Hg3WtL-_giYBkjjPDC9DCN9d5jGYcDQnpIlxy2O7R66SSP84BEgwfqmw-qd9K7WmsPrvkv31r2CujGcsFaVjtBWjrDcp77_GHIZtc28xVv14fXTKbaQcy2_boehRKj5BfllHB-4CqY_xRsd_pC2N7Qu5N1iW9XMVz5scFy-kKdhnCBhfhSEpHrUYrOLpLUxrLmNIlnEpwYY3SIqLfvL9jj8B30VZKl2TqsbHABXTWoSNBstl3F9bcS5fKcg9kSOZWJ_CxpzfNiZ03pB9eETV1d6r5tflxDQn2oOHgwsi3iH66aFpJZ0Ou90TMYPOaQbKArDNVLkjVRhTtr0dJ3fQdyGTJxogaWXAHG1H18OmwH_AnXTMoH7eQi3CD6ndyjjnzOJk2Sm-LlfKBBJ1x3QrVZpFDztOztJbY7K85QB0yiGJqeGdn8s3KPgC91yMAcFvnEFxq_ZFI-WmOKWlyDWdQU1tcm6xX339dZwZJbkAJ_QEdZhk5a3AN0BEUS7N_ALl-ugBNuQ5XKc4i2GYlb9Pbxg0NF5i49Xyo_mEnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAgwEAAAAAAAAP_gUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0HENvbnRlbnQtRGlnZXN0gAFlYzc1YWI5NzQ2NWE0NmUxZDI1NGU0MmJlYzUyZWQwMjg0OTJlMWRhYWMxN2Y3YjZkYjUyYWFjNWI0OTAyOTNkHENvbnRlbnQtQXV0aG9yJGVsbGlzb25iZXJuYXJkb200Yw5DaGFpbklkBDU2HENvbnRlbnQtVGFyZ2V0gAEzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlDFNvdXJjZUgxNTUzMWZhMi0xMjA1LTRmNjEtYjZlNC1jOWY2OGVjZjgxZjcUQ29udGVudC1JZIABZWM3NWFiOTc0NjVhNDZlMWQyNTRlNDJiZWM1MmVkMDI4NDkyZTFkYWFjMTdmN2I2ZGI1MmFhYzViNDkwMjkzZAB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwiY29tbWVudFwiLFwiYWRkcmVzc1wiOlwiMHg4OTBhODM4ZTExNmY2ZDQ2N2E1ZmFlMTc2M2RkODFhZjZhZjQ0N2JmXCIsXCJ0c1wiOjE2OTE0NjA2MjAyMjAsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcImVsbGlzb25iZXJuYXJkb200Y1wiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIk9NRywgSSB3b24gYSBsb3Qgb2YgRk1CIGp1c3Qgbm93LlwifSIsImRpZ2VzdCI6ImVjNzVhYjk3NDY1YTQ2ZTFkMjU0ZTQyYmVjNTJlZDAyODQ5MmUxZGFhYzE3ZjdiNmRiNTJhYWM1YjQ5MDI5M2QiLCJzaWduYXR1cmUiOiIweGNhYTk5NzgzNDM0ODEwZTkyMWIwNzk2MWE2Y2I1MDlmNzUxNGI4OWVmZTYwYjc5YmMwMGRkYjM1YTYwOTA3NzUwNzcwNjRlOTkzYTcwNWFkNzkzMmM2Y2IxNzY2NDFmZGE2YzZiYmIzZTk4MTg3ZDRhODE3M2M4Y2RhNWQ0N2JkIiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUViQWhma3gyUmJuWW5oMitmTWhnV1NKamR1cXRXU3Fyd2tnZUYyU29HM01HR2YwSTY1bk1MVGNhU3BvakMvRXBWM09iVDVrOCtQdHVmckhoeWlHejVyQT09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHg4OTBhODM4ZTExNmY2ZDQ2N2E1ZmFlMTc2M2RkODFhZjZhZjQ0N2JmIiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4NWYyZjI5NDgxY2ZmMDQxN2ZmZmVlNDUxYzhkNDQ5MjFjMmUzNDk4MjFkYjIyMzc3ZTlmMzFjMDA0NzMyM2IyMTE4YjQwMjk2NzQ3ZDM4OGZlMTVjM2Y2Mzc2NjExYmEzOGQyMDQyN2E0YjcxOTk0NmNiMGRjNmZkOTAxZWY3MmIxYiIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQ3liZXJDb25uZWN0IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUViQWhma3gyUmJuWW5oMitmTWhnV1NKamR1cXRXU3Fyd2tnZUYyU29HM01HR2YwSTY1bk1MVGNhU3BvakMvRXBWM09iVDVrOCtQdHVmckhoeWlHejVyQT09In19AQBseznYeayR5lK8-xfQ0E-ojrsihxMW7QEL-rIeUXfnzM67HFzgCFg1BsafeJGtd82k6oACp2fiqCMO0KaDhyMqQikgX2fERlp3Tp5SScvpq2O93ow8luVBgJwxR3qfc3G48FPUy7CvjMxm1Ex7l7ZCZCBi0LGqVjN6Ho09GuZ4idJnHx_Q5TAIzI5ObEHOkUKgDqsChbRxE2YeqjjqQ4Lwmx93ecSZ12sMmXfYqmolSI6Fzpth64mszlTW4HId4hlEr1iLHcYj7B1kcNKdX2TLsrCiLnidwpXjQSA02XLENrWixL1_zBOU3VQ4_AtEoGMPhD-PtDlL3vL-JAMOm98gSb7j4Kiq9H63j1tq9EixtZpeKKvAi8cdo350ANgvU0WZv9z_ie2GaQ9ilgA2WZ7o70sGPiAb5doNCXbTWGh_TtMhfWb-SfuAwexsCVuICH0JW6k-8VZXGrQMIb0KH20O7xJbIZnm8__OndcB41W0RooSDGrnwLj2mFuISwIvHCt1f6OStEhJiL3r_I9bG9ru4QAw6i1NrnCbh-fVz658Cm8WGZf4klakadft-lfqtaig4nyQELc-ouhMtUT0xNFGFjrtKt7aVvIerkb7-NTVn5ak9M7c0ZOxHmoXHUlzxbWfk_dJcvCXAyLbda4rH6Q97m8g6jErF0quZtRA182i4pz4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAHAAAAAAAAAAwBAAAAAAAADZAEGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdBxDb250ZW50LUF1dGhvchhieHY2ZXVtcXdlajAOQ2hhaW5JZAQ1NgxTb3VyY2UIYXRlbRRDb250ZW50LUlkgAEwZDFkNmRiYmZiOGYxMWZiZDYxZTBhNTZiYThiYjU2YTYwNDg4ZmE0OWYwMmMwZjNlYzc3ZmRhZGYyODA4NGZiHENvbnRlbnQtRGlnZXN0gAEwZDFkNmRiYmZiOGYxMWZiZDYxZTBhNTZiYThiYjU2YTYwNDg4ZmE0OWYwMmMwZjNlYzc3ZmRhZGYyODA4NGZiAHsiY29udGVudCI6IntcIm9wXCI6XCJwb3N0XCIsXCJhZGRyZXNzXCI6XCIweGYwYzQxMDgxYzMzM2Y2YzQ4ZTE4ZjU3OTQ5OWY4OGQ1ODYzNGMwZmVcIixcInRzXCI6MTY5MTQ2MDYxOTgyNCxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiYnh2NmV1bXF3ZWowXCIsXCJ0aXRsZVwiOlwiMTExMTJcIixcImJvZHlcIjpcIjIyMjIyMjIyMjIyMjIyMjIyMlwifSIsImRpZ2VzdCI6IjBkMWQ2ZGJiZmI4ZjExZmJkNjFlMGE1NmJhOGJiNTZhNjA0ODhmYTQ5ZjAyYzBmM2VjNzdmZGFkZjI4MDg0ZmIiLCJzaWduYXR1cmUiOiIweDYwNjY4OGMyYjYxMDAxMjBmNDRmNjIyOTA5ZDU4NjdlN2RhZjEyYTI4NGU5OTk1MmM5ZWNiM2U1MjFhNTNlYTg2NjFjNDZiYzI4YTc1YTA2MGFlZDk3Y2FiZmFiMjk5YTk4MTgxZDIyOWMwN2VkMTkwZDVmMTkyMWQ3MGI4YjlkIiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVYckNhUnVzdFQweHZLeUlsZ0NIandqUlVNR1JOWVQ3QUE5MUVEcU5EbkVsYzhsTlhqcjU0eHRiK0Q5aW9aQlRXOWlpWmJpdHJDWVNtQWtwTTVNRjgrQT09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHhmMGM0MTA4MWMzMzNmNmM0OGUxOGY1Nzk0OTlmODhkNTg2MzRjMGZlIiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4Y2E4Mjg4NGM0ODA2YjE0NTllM2Q1MzYzYmI1NGQ3ZjEzMWVkNmExODQzMzY2OTJlMzZiYzQ4OTI2ODQwMzU2MTNjNmY4YmY5MzY4NzEzOGM5Y2IwM2Q1NjBkODY4Yzc4Y2U4OTg2OWE2MDRhZThkYWNjNjUwZGYyZGUxNjUyNGMxYiIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQXRlbVJldmlldyBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWHJDYVJ1c3RUMHh2S3lJbGdDSGp3alJVTUdSTllUN0FBOTFFRHFORG5FbGM4bE5YanI1NHh0YitEOWlvWkJUVzlpaVpiaXRyQ1lTbUFrcE01TUY4K0E9PSJ9fQEAApBkElnWSNOxTOlfy9gS3KMmydUXeiuk-8CEofvfAbayeo5fGZvmH6tnSGWI5Ni2V6Htf1fGWYWOZbERwjhUe1I301OwBDZOdvgVxV_cQTCY-Wn3ekyuZUqhcbK8NhPZuOane1neoR8dvi74i7DudpxE7-NFHTFKsIE9Hs03W7-OjsGFgL-gQUVQ_hwxautY7ILSHqJlkcW6cq46yI9v1Uy6pgkJO3oksmJ2M_LgXyScAFmFL_qeIgGkyRiPZyE9BJaaVfc8bE_lRqIUjED412CH-hHFQWtLkPUWR7i8zs9Xp7qtMRmG7oEJl9qXzOCFPzrA12Lb6_SpaDmSpH6qsu3lmhs2LJxqZK6zxgeVqxhMdXuUvJCivnyQ6r6V3n2usij6G4BnU8tIkvkAIyG0eZmTpYwwNUUdtFnb9fl3LNHivrFfdHFGqHK2ARdhBF2-q8x9uRzsZOv3Z_R9YEH1KJvszgvAiDrdY6z1BDH-Vwn1oTRQEWN3_JaJB9GRxoa4omMWvhHEo9vsfE6p_Tf7Jce3pPqD3wovosRiWtShNpzLWsT4VSlgw-UHHwunRSuDoPF0mNCuT3Hr10HH6YV6RxHKCZ-4Mrs075wrtgA2sgkzqTwJxa0w8ban_3bvRnFUsG40skGQnZOMpWoRTsrR1nNJGauFbSMDyZM35Po5Yvmc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAACAAAAAAAAAB-AQAAAAAAAA_0BRhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QUQ29udGVudC1JZIABNGIwNzllNmRmZWExMTU2MjgxY2Q2NjdjZGMwYjU1NzU1YWMyZDcwZTA5NmMxNmQ2YzU4ZDdkZDdiNjJmOTI3YxxDb250ZW50LURpZ2VzdIABNGIwNzllNmRmZWExMTU2MjgxY2Q2NjdjZGMwYjU1NzU1YWMyZDcwZTA5NmMxNmQ2YzU4ZDdkZDdiNjJmOTI3YxxDb250ZW50LUF1dGhvchoxMTMyODYzMDEzOTYxDkNoYWluSWQENTYcQ29udGVudC1UYXJnZXSAATM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2UMU291cmNlSDE1NTMxZmEyLTEyMDUtNGY2MS1iNmU0LWM5ZjY4ZWNmODFmNwB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwiY29tbWVudFwiLFwiYWRkcmVzc1wiOlwiMHg1YWYxZGYwY2ExMDc4YjkyYmNhMDc0ODU2MTA2MThhNzBhMjk3NGUwXCIsXCJ0c1wiOjE2OTE0NjA2MjA1NDAsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcIjExMzI4NjMwMTM5NjFcIixcInRhcmdldFwiOlwiMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZVwiLFwidGl0bGVcIjpcIkZsYXBweU1vb25iaXJkXCIsXCJib2R5XCI6XCJTbyBmdW4gdG8gcGxheSBpbiBteSBzcGFyZSB0aW1lLlwifSIsImRpZ2VzdCI6IjRiMDc5ZTZkZmVhMTE1NjI4MWNkNjY3Y2RjMGI1NTc1NWFjMmQ3MGUwOTZjMTZkNmM1OGQ3ZGQ3YjYyZjkyN2MiLCJzaWduYXR1cmUiOiIweGUwN2ZmZWViMzI1MDg2OTJkYTA4MzZlZDk2MGRjOGFlZDFlNTcyZDk3MmJiNDVmOTIyNDc1MDNjYTc4ZmUzZjIyYmNlMTlhNDgwOWYwNTcyOTE5MTY1OWRjMDZkNjUxYWQyMTViNjNkY2RjZTA4MDQxZGI0NmYzMzBiM2RjN2JhIiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVsZXR3YjBXUi9VT01XN2JQUy9NWE1ZSWY0WEZ5SVI3TWR0S0ZCWjlFb3VmbXlna3F0MjJTWFhpVlVQYnpjdFhCV1hqR1Exa29EWHkyNHlmcjFwQnVWUT09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHg1YWYxZGYwY2ExMDc4YjkyYmNhMDc0ODU2MTA2MThhNzBhMjk3NGUwIiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4ZDQzMjBmMGY1OWZkM2QwMWJmZTcxNmJlMDgwN2NmZmEyZDcwMjlhOGNhMjkyNTBjMWRmY2FkOTYwNjM5ZDM0ODE4MTc2ZjRlN2VhYmQwNjA0NGU3YWQ5M2ExOGYzNjE0NmVkMTRmNTAyMjJmNzZlYzYxNzNiNmJmNzZlYTcxOTcxYiIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQ3liZXJDb25uZWN0IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVsZXR3YjBXUi9VT01XN2JQUy9NWE1ZSWY0WEZ5SVI3TWR0S0ZCWjlFb3VmbXlna3F0MjJTWFhpVlVQYnpjdFhCV1hqR1Exa29EWHkyNHlmcjFwQnVWUT09In19AQCGx6Akn1fizpaeFg6vWJhSdGRrLM5SjgVccqwlWJV71itRyxnnxNsDWjLfBa3Lwbrs-pAKPCEx46EKTPJA8aP9eObgQQihwhXJqJMNSCs8_pm-_yCxvpN48RpcQSp-kb3CFvlZt86uOHtzcHvwnP0UtLebpSkWXzaqSuWMssghw9SAfYkoqSyGrkz5L-GVRXZZXFyAnQ6BEAu3fgFWKXDkLgujs1PoUtLuDUMOOTuWMa81kYXcfB5pS3myJaBl_c8qEMFoFelegOl3ao12DuKozJShLcvAZmoby4hd0yDvb8ZAPppC1KRqX6qLR9fdwtKvNIn7VXwVdLY9ki9s-jVBel_KcNeMR7QLseYcFExDZ4sGf8MKL8v8YzIJUFrJd2rBOJM5QyrcrjCbxEOaHWAiBo4EWKto3BbUAjZY_Fm42vXuVHgM7Lbn0jGlWRIV-ODkZAq184guqQ2XPTMHrVs87lRU_EMWP0FKxpImr4gZFn7VlCBob0QInOGPPvkh_dPsqf6woS2CeQn_NKJDSgKPX7IMe83Q7HGNwiJfjR5OpJ1qLN4XZhERohYxbiuNN0ivL2Rah5rMDm8pPcgywYoMx_UevNa43HEQzQwtLVIxpum6_kb-UsNNiWQkaOm0yhTOC3zGCnIICLump0F13gaNrqJM8ZpHncA3C4i-fFV3upz4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAIAAAAAAAAAH0BAAAAAAAAD_IFGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdBRDb250ZW50LUlkgAFiNmRmOWJjYmJjYTgzNjhiN2I4ZTgxZWVjOTRjY2IxYjk3ODY3M2M5NjJjMTM3NjhjYzJkOWYzYzc5MDlmNzE0HENvbnRlbnQtRGlnZXN0gAFiNmRmOWJjYmJjYTgzNjhiN2I4ZTgxZWVjOTRjY2IxYjk3ODY3M2M5NjJjMTM3NjhjYzJkOWYzYzc5MDlmNzE0HENvbnRlbnQtQXV0aG9yGHcwODg4NTE2MDYzdA5DaGFpbklkBDU2HENvbnRlbnQtVGFyZ2V0gAEzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlDFNvdXJjZUgxNTUzMWZhMi0xMjA1LTRmNjEtYjZlNC1jOWY2OGVjZjgxZjcAeyJjb250ZW50Ijoie1wib3BcIjpcImNvbW1lbnRcIixcImFkZHJlc3NcIjpcIjB4YzVlZGQ5YmI2NDdmZDY2MjQ5ZmVlYTA2NjBmNTBmZTM4YjE5ZTNiZVwiLFwidHNcIjoxNjkxNDYwNjE5MzE1LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJ3MDg4ODUxNjA2M3RcIixcInRhcmdldFwiOlwiMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZVwiLFwidGl0bGVcIjpcIkZsYXBweU1vb25iaXJkXCIsXCJib2R5XCI6XCJTbyBmdW4gdG8gcGxheSBpbiBteSBzcGFyZSB0aW1lLlwifSIsImRpZ2VzdCI6ImI2ZGY5YmNiYmNhODM2OGI3YjhlODFlZWM5NGNjYjFiOTc4NjczYzk2MmMxMzc2OGNjMmQ5ZjNjNzkwOWY3MTQiLCJzaWduYXR1cmUiOiIweGUwMTNhMTM3ZDE3N2U0OWM2MmI4OWFlZDVlMmZlNzZkNTQ1ZGJlNDdjY2E4MTE1YjI0YTAxNWUzYzNhOGMyN2E3OTQ3MDljMmFlNDFkMzAxNjBjOTI1YTU3ZTM0YzNjMzQzNTY3ZGFkZmFkNjNlOGIyYTE3NTlmOWQxZjU0NmQxIiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUV0Qzd1TFdWRjRyV042UGU2YzQwQ2QzNTlQc2sxM3RMZFROOCtlY0pHYzhldC8xbFh6N3hKYUZ6SURudXN5VE8wRUxwdU12NzJxelc4RXk1dlFYa1pUUT09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHhjNWVkZDliYjY0N2ZkNjYyNDlmZWVhMDY2MGY1MGZlMzhiMTllM2JlIiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4MzJlNTZjM2EyOWNjN2VkZjdlNDY2YTc0YjZhNmU0OWFjMDNmNDM3N2I2OWQ0MGJkYzQ2YjA0MzdjMTNkYzZkOTNjZTJiNTk3MTBhNTM3MmU1MzU5OGQ3ZjhiYWNmMmRiYmM4OWI2MzBlMGMwNTM1OTA5MTYzNjJkYTFjMWJlYjQxYiIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQ3liZXJDb25uZWN0IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUV0Qzd1TFdWRjRyV042UGU2YzQwQ2QzNTlQc2sxM3RMZFROOCtlY0pHYzhldC8xbFh6N3hKYUZ6SURudXN5VE8wRUxwdU12NzJxelc4RXk1dlFYa1pUUT09In19AQADfbg7hHNbSnuyvcwbq4zlvLUrvbjaeT65Q_piS-mpVYug3PSg4QjIcEt_AdW9d3lJPLOjl3NC9zJYoiDTQNDcpzzx1q0hcg7_wMROF56-Fq-jlW691jxFjc8i5GDYbYIWXYBkqwiZXnuKMqkRi2cG3RXYxqmaP4biVx4hVHSJL9wD1J1brnhmGG11timDGdm5w-IQ-zvCWAGOTQ-Orv5bUJUrbETorVgFZUzxWjdTWtSm36mAdGq5XeDTE_k-4CfcrCZAnOKIPiyJBnVC1LigboJR1rqcmwk5FV9zQrG4Rt8LokQ6dOPmC4HA6Bu_uujQEMKKYmoEUp5nJJX9YViKo2a3VCh4GjSp7UbavQ8Zl65VVyfUpesCxcBmjIcyFfz8564gUIAJMFNbykSXgoC6OBb_FdfB_ziX97yTdM7YpvuVApaMrrsXo9m9utDG-BksmTkZq6n2SwNt5oCRGHG4f7ks5uewA7hjhkg238RoJJiHL84fXI8FA_hxosepqqB4_oZ-g9MgNul38CA9KPX56ranae_AvSAdWkmM7aaJwKaSo9uLX-WX9cHZ82N5UxVGEZ_4v3xyWn1z2C2wTdXY-JUpsJkMKczDeETYvH-vpmpOMG-P-A2ZbUaAyZXdmSdBDTby0N7k-3HEtEs7Z3iUqFkyU93iNPsGzdgK8b5gppz4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAIAAAAAAAAAH0BAAAAAAAAD_IFGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdBRDb250ZW50LUlkgAEwMjhkZmQzMWViMTljOTgwNjhlZTY2YzA2YTU0NmM4NWM5NjM5NWM4YzI4MzYzOGMzMTQ1Y2E3ZTdkYTY4OWE4HENvbnRlbnQtRGlnZXN0gAEwMjhkZmQzMWViMTljOTgwNjhlZTY2YzA2YTU0NmM4NWM5NjM5NWM4YzI4MzYzOGMzMTQ1Y2E3ZTdkYTY4OWE4HENvbnRlbnQtQXV0aG9yGG1oOGx2a2psM2I1Ng5DaGFpbklkBDU2HENvbnRlbnQtVGFyZ2V0gAEzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlDFNvdXJjZUgxNTUzMWZhMi0xMjA1LTRmNjEtYjZlNC1jOWY2OGVjZjgxZjcAeyJjb250ZW50Ijoie1wib3BcIjpcImNvbW1lbnRcIixcImFkZHJlc3NcIjpcIjB4MDBmYjdiY2Y0MWU5Yjc0NTBlNDFlMmIwMmQxNTNjNTA4MzNhYjkzOFwiLFwidHNcIjoxNjkxNDYwNjIwMDIzLFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJtaDhsdmtqbDNiNTZcIixcInRhcmdldFwiOlwiMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZVwiLFwidGl0bGVcIjpcIkZsYXBweU1vb25iaXJkXCIsXCJib2R5XCI6XCJTbyBmdW4gdG8gcGxheSBpbiBteSBzcGFyZSB0aW1lLlwifSIsImRpZ2VzdCI6IjAyOGRmZDMxZWIxOWM5ODA2OGVlNjZjMDZhNTQ2Yzg1Yzk2Mzk1YzhjMjgzNjM4YzMxNDVjYTdlN2RhNjg5YTgiLCJzaWduYXR1cmUiOiIweDc1MGYyZTkwNmEyNGJhYWI3NWU0NTcyMDA0YmFlNTVlZGQ4MTQ5ZWU1MzUxM2VjMWMzODJjM2U5NmMyZTI2NjRiNmQzNDhmMWM4MjZjZWU3OWFkZTNjOGZkZmZlNzI4ZWI0MGZiMzEzMmFiNmEzMDBiOGU2MmYyNmIxYzk0NjE3Iiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVpRkJlTU9xbmVERTZ6V1BybHJObU5OSWZ3UUJYdFVVYlVSN2tQRVN2RzlTTkdBcHFrRVZMRENEY3lOaGpxd0c2NTYydExqTzQyWlNZZnRkdER3TC9IZz09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHgwMGZiN2JjZjQxZTliNzQ1MGU0MWUyYjAyZDE1M2M1MDgzM2FiOTM4Iiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4ZTVhOTk2NDlhODE0YmEyNTAxZjc0YzFiNTllZDc1YjdhNDk0NDNmYzM0MDRiYTc5MzNmYjAxNzI5ZDgwMGQ5NDU5NmFiYTIyMjhlMmQ5MzkyOWI5NTNmYWNiN2Q4NWI3ZjMzNGI4YWM2MTI3ZGM4YTg5NDM5N2VhZDE4OTlkOWMxYyIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQ3liZXJDb25uZWN0IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVpRkJlTU9xbmVERTZ6V1BybHJObU5OSWZ3UUJYdFVVYlVSN2tQRVN2RzlTTkdBcHFrRVZMRENEY3lOaGpxd0c2NTYydExqTzQyWlNZZnRkdER3TC9IZz09In19AQBW_DBFCnOmzFjJCbzWYmUI4ae8xSl5C41e54rgJhzyl70VIAhra2HaP38lpqJJgxcLVzuk-Ja_SWPHdUIwQ3khj-6vZQzewbjjR5Zu1G2FfztcIrW6Ylj0rNMWtsd0h6uA3T7b_3zVwAFr9VomS3AK1czo6QBDlk7Agfx_FpOjVYVwaqrwUptNVVCFGYrYeh7Y_nG4EgLmRndYyFmXAbrZ8m4L2zc0TKeiQNMHQYjuOO9fl1-3ta2Sz4VgOgBQUMYx9-IfEk3WvIeJmhCZo-wwgjjmfM14QrHTkGRNB9sd8GIB94kqQdTSMPKecH45a27Vut4CsI_fCIVpVuJhd9l6rr5cI-NO1--n_FMx-Rrc7Wclg7sF5QdZTbA1FTn_ARbpo2YdDUs6LnJbvhi23z4p3zopyGC5B7SVMCYtpnSF4IOezSicMkbx1Ld2I-692MotdPNaEMVLzPKDxjWd4RPnQRlVcziANRIVY0oE4a6QjFfmK7JSK6D1cAgzMa5LjkEoZHPaA2awphp7IQdQl7e7gFoximm38GLVhYBP3FHrQZ8rbe56-jZdi6qGZi1o3ZcAUNl6ElQjKmEZS1zy2s842-NuE3jgRXOBR4xJoFT6rmqMrrzsIpGdie0-7bZE_o2l7LuupOlkvqa3Cdk7H9NSS0lzv7qIMi6WntqeznoRhpz4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAHAAAAAAAAAA0BAAAAAAAADZIEGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdBRDb250ZW50LUlkgAFjMjcyMDlmYWFiNDNiMWQ4YzgwODAxM2NkZDM3ZWUyNzJjZDRiNTkyN2MwMjczYTkxOTExNDRiYThlOWQxZTVkHENvbnRlbnQtRGlnZXN0gAFjMjcyMDlmYWFiNDNiMWQ4YzgwODAxM2NkZDM3ZWUyNzJjZDRiNTkyN2MwMjczYTkxOTExNDRiYThlOWQxZTVkHENvbnRlbnQtQXV0aG9yGjgxNjI1NTg2NTE1OTEOQ2hhaW5JZAQ1NgxTb3VyY2UIYXRlbQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwicG9zdFwiLFwiYWRkcmVzc1wiOlwiMHg4YzMwYWYyNTQ3MTBiNTJlNWJiZjM5MTJjOTJmZjY2MGQ3NTRkNTBiXCIsXCJ0c1wiOjE2OTE0NjA2MjA2MDUsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcIjgxNjI1NTg2NTE1OTFcIixcInRpdGxlXCI6XCIxMTExMlwiLFwiYm9keVwiOlwiMjIyMjIyMjIyMjIyMjIyMjIyXCJ9IiwiZGlnZXN0IjoiYzI3MjA5ZmFhYjQzYjFkOGM4MDgwMTNjZGQzN2VlMjcyY2Q0YjU5MjdjMDI3M2E5MTkxMTQ0YmE4ZTlkMWU1ZCIsInNpZ25hdHVyZSI6IjB4ZjkxOGVmYWMyMzY1YjVmMTY0YzdiMDgzOWI4N2YzNmZhNmE5MjBjODhjZDIwY2RkOWI3ZTkxYmEwODE5NDM5YTQ3MzUxZWYzMTAxMGU4MTVkMTNkNmRjMmEzMGUxMDc0NmQ4ODg5ZDU4OWY3MzE1M2I5NmRiODViYTBiMDlmN2QiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRWhGWWF1Z0RLcXRVK05RbFVoUmVjUjNIdmJGK1hLVGYxWmI2cmhodEt4ZVFZN0w0OWp5anVGY0k0K3daQTJkTjJIdGlycS8xMmlpS2IyWDg2N0hLd3RnPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDhjMzBhZjI1NDcxMGI1MmU1YmJmMzkxMmM5MmZmNjYwZDc1NGQ1MGIiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHgzNWU3ZmExZjc3ZTVkYjhkODgzM2NjYmFmNTgwMGJkMTg2YTI2NmUyZWU2NWUyYzBmYzBhNTNhM2IzMzE1NzFkMDQ2NzA5MDAwNmIzNGE4ZjMwZTFkMDJjMmYzNDFhN2VhODZkZTM2NTg0ZGM0Yjc1MzYyZGRkNWE2M2YzMzg3NDFiIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBBdGVtUmV2aWV3IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVoRllhdWdES3F0VStOUWxVaFJlY1IzSHZiRitYS1RmMVpiNnJoaHRLeGVRWTdMNDlqeWp1RmNJNCt3WkEyZE4ySHRpcnEvMTJpaUtiMlg4NjdIS3d0Zz09In19AQAvdWd4Bv5gLKO6-6Eit1GykEJkKwbzIyteTikMasGtD3D9_x2wpA9Ad0Oe6XmKEo7f5biWeIkU_Yqcu-7M5w_LK6hEDpDq6YC-bWBzIG5YAWmvTfS40wdNnQoFl1QDVKdF8yRJ_HYvdkgFLMCNIZiB3Nnzb2mO4w69wQMkNUQ88bKEVIwq0-A4v6_L0--3ijAXJMVudstYL2digiqlWJklJCGpFAhqwmumQmj4Fq2VG11VraYj3W1TDn3hJWAnzneIXztz7QFGSu4qk17hzND0NRkZL5YkZFLS4NYZINhYyunGBw89at0RUY9vQAkpfZl73TlRFL8_rH4wwOQZy3SnuAOBx72dsNXQazfOYAefk5a5iAAkyq_tfBSUBZow7PrdQe39CgFPhXY9iuJ7p3QzuOxiiBXPqhnVRUz62xdWzz1gVxZWprGeCszCOqhDTAuRogeQg4l5E_okiWoAGb-n6fE0Zxa3C_RMC9nYnNSKmNyP2P4iho2zpEfExV2N-zQGwclN6F_fdpS43XawJKbBzxLYS8Quf20T0wORzz02tDI59S4at7S0PX6KR3NDQfc_X90Ot9DFqFXxryYT6nVS2WI6Ylce8VFVnoc0VopY8gKieDDjyoMIL9UFmz0BtdLnOb12eyjKoLs5eH4oRSPEr7ORitA0s8BJ03nk0uwRf5z4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAIAAAAAAAAAIMBAAAAAAAAD_4FGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdAxTb3VyY2VIMTU1MzFmYTItMTIwNS00ZjYxLWI2ZTQtYzlmNjhlY2Y4MWY3FENvbnRlbnQtSWSAATdlNWJjNGE1ODNkODY3NzRiNDE3YmMyZTc2YmRhNjcxMzBiODUyYWI0MzlkMTQ3YzYzNDI2ODU0MjgyZjA3N2McQ29udGVudC1EaWdlc3SAATdlNWJjNGE1ODNkODY3NzRiNDE3YmMyZTc2YmRhNjcxMzBiODUyYWI0MzlkMTQ3YzYzNDI2ODU0MjgyZjA3N2McQ29udGVudC1BdXRob3IkY29sdG9uYW5nZWxhbGpmbDM0DkNoYWluSWQENTYcQ29udGVudC1UYXJnZXSAATM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2UAeyJjb250ZW50Ijoie1wib3BcIjpcImNvbW1lbnRcIixcImFkZHJlc3NcIjpcIjB4ZjIwMmVmMGNmNDhjYmM5ZTgyZWQ4ZWMxYTIzZDMzNmIyYTMwMzMwMFwiLFwidHNcIjoxNjkxNDYwNjIwNzQ1LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJjb2x0b25hbmdlbGFsamZsMzRcIixcInRhcmdldFwiOlwiMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZVwiLFwidGl0bGVcIjpcIkZsYXBweU1vb25iaXJkXCIsXCJib2R5XCI6XCJEYW1uIGl0LiBTbyBlbmdhaW5nIHRoYXQgSSBwbGF5ZWQgYWxsIG5pZ2h0LlwifSIsImRpZ2VzdCI6IjdlNWJjNGE1ODNkODY3NzRiNDE3YmMyZTc2YmRhNjcxMzBiODUyYWI0MzlkMTQ3YzYzNDI2ODU0MjgyZjA3N2MiLCJzaWduYXR1cmUiOiIweDc4OWNlMGFkMDU3MTUzZTZlMGRlYTliYWNlYmQ4MjM2YjE0YjhmMjNjOTg2YzUwYzRmNGRhOTRmYWM1NmJmMzAyOWVhMDhkZjIxZTkyNzE0ZjlkYWU3MmU3ZDI0ZmZmODZhMjQxMGQyZGYwYzM0ZGYwZDQzMmY0N2ZkZjBhYWZhIiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVCZzZ0V1pyd05yRXVtN21FdWZRVit0dzViSnhjZ2gvNzVTc05RZEEwUFhGQ1RqbkZkSnlaQXo4YW5GS1FKL3VFa0dFSDZJM1k1NWp4UG9UZUYwZGdDZz09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHhmMjAyZWYwY2Y0OGNiYzllODJlZDhlYzFhMjNkMzM2YjJhMzAzMzAwIiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4ZTY3MzhhZjM4ZTFiZjg2MTFjY2UxOGNjN2QyNjAxMTllZWEzOWEyMGFjMzYyMDZhNGUwZDAxZDk3OWI4NjI3NzcxOGVkODZlOGEyOTkwNTQ5ZWQwNTM4YTljYjU5YTRmNjFlYjFkODdmYTc1MjJjMWViZWEzMTk1ZjFmYjY1ZWIxYyIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQ3liZXJDb25uZWN0IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVCZzZ0V1pyd05yRXVtN21FdWZRVit0dzViSnhjZ2gvNzVTc05RZEEwUFhGQ1RqbkZkSnlaQXo4YW5GS1FKL3VFa0dFSDZJM1k1NWp4UG9UZUYwZGdDZz09In19AQCI6rlxFMer8FzvqekmclPzmJfPgnqGBWF_B8DnlQg_mDpLATWYrn7c2nv53E_P9IKmmbnriuIBxP-ujJKlu0sB0FmkTZpWX0H5IHNV8DppeS1HeHutBgySgSpkjEAdhrA1thbtdCplYSYCPfo-mzS_Q6b5xEX6WvqTFtls0Z405GWe1ob-sdUc5RDHBqmxBwWtoStn7p71vKuEyn9Y0XAAjcyKFksXnPqlpuX-9tHpVoHIFmIzfdRdrPU3qhxtna3u3jX4v9ksz-nqAkQedk3DDHnCHQ0WWRBvBDL82in06MldqTnkQL3Ih2lkyvtfcysE-3Nfx4mVxSyFFfkeZHcwZNE-1Guw3OeuDOA6GJzrZjBLPMsH6f95Fdn0B9vPNT8Y5_IOO_FumvBa5Be5nShI-ad7FcWDXhOtmA3aE0asMKdiUV9zV-MeT-dUxWWDw7T7zbknFoYU-eHjlwP3oRRYzeccv6qUAGnI_38evf5druIkgG4fHn4J4rzpnHNfdiZ4bvOQbWNd2c661aXcLZ89y-MfnOgqKowGg8vlqDdn6Yp17fQnfZsyGpkoXdMvO0Z2LRDeEdwZRrfZSCP1GKzPBusYgjxNbIICKMW3ZYeqZZFnI9HEdlGf8qeXVJspBOUWoWnPRE3ANHP9SLik9LqhR85Tpd1kOKG2RfeDzGJcd5z4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAIAAAAAAAAAIQBAAAAAAAAD4AGGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdBxDb250ZW50LURpZ2VzdIABZDlmMmRlMzMxZTU1MDRjZmRlOTkyYjIyZWYyYmEwMGU0ZWY1NWI1YjBiZGQ1MTcxY2JmYTk0ZDYwYmM4NzhiZBxDb250ZW50LUF1dGhvciZsYWJvcmVsd2F1dGVtX2N5YmVyDkNoYWluSWQENTYcQ29udGVudC1UYXJnZXSAATM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2UMU291cmNlSDE1NTMxZmEyLTEyMDUtNGY2MS1iNmU0LWM5ZjY4ZWNmODFmNxRDb250ZW50LUlkgAFkOWYyZGUzMzFlNTUwNGNmZGU5OTJiMjJlZjJiYTAwZTRlZjU1YjViMGJkZDUxNzFjYmZhOTRkNjBiYzg3OGJkAHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweGRiY2IwZTMzMjU4M2JjMmRjNDEwODA2ZTgxZmRmNWFjODI1MzAwOGZcIixcInRzXCI6MTY5MTQ2MDYyMTE1MCxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwibGFib3JlbHdhdXRlbV9jeWJlclwiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIlNvIGZ1biB0byBwbGF5IGluIG15IHNwYXJlIHRpbWUuXCJ9IiwiZGlnZXN0IjoiZDlmMmRlMzMxZTU1MDRjZmRlOTkyYjIyZWYyYmEwMGU0ZWY1NWI1YjBiZGQ1MTcxY2JmYTk0ZDYwYmM4NzhiZCIsInNpZ25hdHVyZSI6IjB4OTQzZjBmMTIyOTgwZmZkZGYwMDQ0Y2NhNTVjNjU3MDI0YzNiZWY1NWMzZjdiMjEwYmE0N2EwY2VlZWU3Njk1MThlYTYyYjJkNDJlYmNjYmU2YjJjYjMzYTcyZGRhYjQ4YTM4NjRmZTIwZWQyMzQxOTA3YTM3ZTc1ZDMxZWQ4MmMiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRW1FK0FvYW9HYkhHb0ZkWUZwMDFucVpCZDBqYVJLelNWZ3hsUWU1U04zd09LKzhCZE1YTGR6S0dIMkdpRHJHNGJFb25mSWh3Wkp1OU9xc0VvZExiVEVnPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweGRiY2IwZTMzMjU4M2JjMmRjNDEwODA2ZTgxZmRmNWFjODI1MzAwOGYiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHg5YzdmMWVjNTkwMjU3YmQ1Njc2Yjk0ZTgwNzE0ZjViYzJhZGMwNTQ0NjYyMzQ3MDJlYWZhNzdhOTIxMGQ4MTUwNjMwZWYxOTg4Mzc3ZjE0ZDQ5ZmNjYzllOGFhNzg3YjhiOTFhNmQ2ZTQ2NGJmZDczZjU5Y2Q0NmI3OGI3ZDdiOTFiIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBDeWJlckNvbm5lY3QgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRW1FK0FvYW9HYkhHb0ZkWUZwMDFucVpCZDBqYVJLelNWZ3hsUWU1U04zd09LKzhCZE1YTGR6S0dIMkdpRHJHNGJFb25mSWh3Wkp1OU9xc0VvZExiVEVnPT0ifX0BAIi0MGv509ewzuQcTTGaXlKVMCJ8D7zliOgOx01j2ryMyIHg_T52PHYV4L8hBo0ByOvlzDrq28ROBFCUuxF6jDfZZLwgBSIQXSdkCGJgpBgO6JcDfAEKWecMR4JEKrWu4_fGzTrHqY2GGjQhXP6-fjGRSkYanurI0yYvsQOi7VMIGvu0o7edWgqTentohFSTimDCSmjazg_M2Uka1IG1dLvEcuJGXmyG4vYIoYvtXb4SBcn-VT3VHX6K__EkdB0iEfTlU0lsp4JGOoSCXkPdX4LG2cfMTTbWRf6wqnz-rNQUIHM05UVPVgkVbEK25eZCkrCOeZ2gOpBu91P98ytR638jw_pg2wtxJod-0mCOPwbr0x0aMHtZpmV223bQ0pGHiPTtBQjLTtF-wLP8GEzRvHHwPrx73bmPe6V3uw8H0cQ0at4OLHVvn412V6FLTS2MySJhV6x4K4ggPrlksfdASAH6flKfYi8_6gxBNoVIUCISADXEifalt0Iy5d33s1TAzF9s-9tI-U0Lydpt1Xy3Nsd58maACHep0C5OjX2G0hebeLKQN6rbnMwFZUE0vSfmoSVEUcbCNdbudoyGwXkjfR2TJ-XCTixPJf-Skes2G4PoVVcXs9u6pgl_6bn1LvCkL8ZPrmBMEuQTIuLazN732QqnAVkEsp6um7MIiaUx8S2CnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAcAAAAAAAAADAEAAAAAAAANkAQYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0HENvbnRlbnQtRGlnZXN0gAEyM2ZiN2YzNzkyNTVkOTY5Njc4ZTlhMTBjNmM2MjZkODc3YWRhMmUwZTg3MTQ0ZTA4MzRjMGU4YjQ0NGY1NDhiHENvbnRlbnQtQXV0aG9yGHBtaDVoM2E4bzhuYQ5DaGFpbklkBDU2DFNvdXJjZQhhdGVtFENvbnRlbnQtSWSAATIzZmI3ZjM3OTI1NWQ5Njk2NzhlOWExMGM2YzYyNmQ4NzdhZGEyZTBlODcxNDRlMDgzNGMwZThiNDQ0ZjU0OGIAeyJjb250ZW50Ijoie1wib3BcIjpcInBvc3RcIixcImFkZHJlc3NcIjpcIjB4MGQ1NTIyNGZhM2QxZGRjNjVkZjYzYjMwYmYwZTkzYWQ1OGVlNTI5NlwiLFwidHNcIjoxNjkxNDYwNjIwMzAxLFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJwbWg1aDNhOG84bmFcIixcInRpdGxlXCI6XCIxMTExMlwiLFwiYm9keVwiOlwiMjIyMjIyMjIyMjIyMjIyMjIyXCJ9IiwiZGlnZXN0IjoiMjNmYjdmMzc5MjU1ZDk2OTY3OGU5YTEwYzZjNjI2ZDg3N2FkYTJlMGU4NzE0NGUwODM0YzBlOGI0NDRmNTQ4YiIsInNpZ25hdHVyZSI6IjB4YTNlMWM0MDVkZDdhZmNlMzNmZDRlMTU0YzA2NDEzOTNiM2EwODJiYjBmNWMzZTk0MTM2MzZmM2Q3MzYwZmE4YTY5ZTgxMjgyNWI5N2E2MzYyNmFjNDFiOTBmZjk0MGMyMTZiYTY1NTIwODYwNDk0Mzc3ZTY1NDY2Zjc1MGI4ZTIiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXpXSlE3c1dtRHg4RTQxNHBUOHhmOTI5eTdQVkk5ckNVeTlzcGVDRlc1RDFpNjJoVTNsZGZnS3pJT1hNN1pSbnBPV1FYZWV2UW5BZGsvWCs1bnI3a1d3PT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDBkNTUyMjRmYTNkMWRkYzY1ZGY2M2IzMGJmMGU5M2FkNThlZTUyOTYiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHhjMTQ3MzE5YTI2MzYwYjIxMWFiNjM5NDlhNjZjOTgxMGZmYzVkM2JmZmU3MzgyZGU4ZTg2ZGUyZWJhY2JhYTEwNTQ5MjU2YjJjY2M4OGEzYWZlMGMwMjk5ODYzODU4Y2Q2ZjExYWRjZWQ5OWM4YTljODBkZDYzNGUwZGIyZWI5MzFjIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBBdGVtUmV2aWV3IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUV6V0pRN3NXbUR4OEU0MTRwVDh4ZjkyOXk3UFZJOXJDVXk5c3BlQ0ZXNUQxaTYyaFUzbGRmZ0t6SU9YTTdaUm5wT1dRWGVldlFuQWRrL1grNW5yN2tXdz09In19AQBDNk_te6kOKW6sliJ6ugnnlvgZSpFs53SEw3XjmeOhZSg8Ox_xUZ7RCAY2LTIugNiWJ7Vr-IGJu2j9uXvijgfWnDFTy5GRHJUfdFFa7Ug6PQocdLtLODz4CSewe23RZvuToof5QlUqC0YJQ7k_2TppYTjlO1s2SKZEiCi_ls-0BkPMauPf9-8i9aBlKiCbrlVPMYkg1daAgpJG5BqQmqUBXfY5AMwk5_Sp1JukIaigGAGLoAkQRlMBXF-PJ05NCeeooPVLHt05P3JbXmow96OmH2bKAr_Oq_wysRBsLft3Dz2rddZCIaRO3gKFNHAW3fpjirXGW8zr4PC7HeUPJ0cBn4uiZNFrgz8dVWWyuRoyD6SnxWOdcehqBmvXktAzb-6iB6Nkg4oPI5I-g_MBtKciwesQUnQ6k7DpDDnqpNr3Yn9l7r1OaelL-iz3omerVFGcAgV-MHu6rXTSeScGzMy_V73O03BFM2Hs2mZZUnPFaVykqAsh5rFwFIZjZ3ZzFrFd9uDZ1TCnAHLDnji1r_PiT-7Hxo_svPoKs2H-Wt9ONYWLTDJ7fITuR598o5Yclp_DTOJHg3w_9pIiYszm7fz-eEOU1Hll_2LNbZDk-EuATvJ-bcT6H9qTI7-9zNZ4fF_fkg3Y5Q59Rx-wKbG2fxc2-Opiyyxq1FmXH9y1MkN7zpz4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAIAAAAAAAAAH0BAAAAAAAAD_IFGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdBRDb250ZW50LUlkgAE0N2I3OGYyYjdiYTAwZjg1ZWYyYzFmMTRiNzk5OTRiOWY2NGI5ZjA1YzBjODYxODEwZmZiMzNiNGMwZWE1YmI5HENvbnRlbnQtRGlnZXN0gAE0N2I3OGYyYjdiYTAwZjg1ZWYyYzFmMTRiNzk5OTRiOWY2NGI5ZjA1YzBjODYxODEwZmZiMzNiNGMwZWE1YmI5HENvbnRlbnQtQXV0aG9yGGtlczZnYzllY2NlZA5DaGFpbklkBDU2HENvbnRlbnQtVGFyZ2V0gAEzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlDFNvdXJjZUgxNTUzMWZhMi0xMjA1LTRmNjEtYjZlNC1jOWY2OGVjZjgxZjcAeyJjb250ZW50Ijoie1wib3BcIjpcImNvbW1lbnRcIixcImFkZHJlc3NcIjpcIjB4YjQyOTY4NGNmNDRkMzhiYTAxOTk0ZGNmOWY5MzQ5YWRkNmUyZGZlZVwiLFwidHNcIjoxNjkxNDYwNjE5NjY2LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJrZXM2Z2M5ZWNjZWRcIixcInRhcmdldFwiOlwiMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZVwiLFwidGl0bGVcIjpcIkZsYXBweU1vb25iaXJkXCIsXCJib2R5XCI6XCJTbyBmdW4gdG8gcGxheSBpbiBteSBzcGFyZSB0aW1lLlwifSIsImRpZ2VzdCI6IjQ3Yjc4ZjJiN2JhMDBmODVlZjJjMWYxNGI3OTk5NGI5ZjY0YjlmMDVjMGM4NjE4MTBmZmIzM2I0YzBlYTViYjkiLCJzaWduYXR1cmUiOiIweDE4ZDYwZjM1YmMzMmEzOGRlYjZkODg2M2I3NmE2MzNkN2NjZGI5OGU0YTBiYTdkOTUxYTk3Zjg0MWFhYzE3ZDM5OTIwZThjNjVhMGRhNjU0NDRlZWIwZjM2ZTJiMzZiZTg4NDVhYTNhYzg4NTY3Y2EzY2U4MmE5MGQ0MGUzMmY2Iiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVOS1RaR3dXUzV0U0prakVkOEMzVXpZWEdnNHVaSzlheWJBV0hQd3RUSE52NHVtanZ0SzR2WkVTUFRFY015OFZxc2dtN3k2dlA1b2RmeFJycnVXVVJYZz09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHhiNDI5Njg0Y2Y0NGQzOGJhMDE5OTRkY2Y5ZjkzNDlhZGQ2ZTJkZmVlIiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4ZjdhOTZhMDEyYjFjNzkwOWMxYjYwOGMwYjQyYTI3NDJiMmJjNmViMjlhNDE5NTQxNTE1MjllZDVkMGIyNjZjMjRkMzcxZjY4OTZlNDEwNTQ5ZWQ1MWY1ZGU2ZjUzZGEzNjhkYjJiMzg4OTU2ZDE2OTdjZmM2ODkwZTc5ODc2NWMxYiIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQ3liZXJDb25uZWN0IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVOS1RaR3dXUzV0U0prakVkOEMzVXpZWEdnNHVaSzlheWJBV0hQd3RUSE52NHVtanZ0SzR2WkVTUFRFY015OFZxc2dtN3k2dlA1b2RmeFJycnVXVVJYZz09In19AQACXtWtuiKouB5IRrgTDUyqxLcRdtTzC3oOQbINn-Ij4knOvd8O7jjcBSjrplTaSU5_q9N53c_DpqSjBYl_aw4rAINgpN4wl_06iyv0baYCR-Dw4aDoQtoiy-ue00uAUfcVINTvqUYgalB0f6wiI4hnsixTFSHzYrvlmPuJN1OFzzRiqbTOByRMS9DVIcnMHbPkgaWgm7IS1GflEHdembPTMRpKz5taW1N-QqPNNCNbwl7P1TK9dmf0AJtDkmg7WC6oHbxBBYqt0Kzrlt5RQaWpYI1TsVWjTsfxBHcUAp0fzkQ2Tsg0d8XwNf-qReAeD1SFmdWIwoeDssCLsmYHeeUw5GKwR-S_UFkk8dKlYpu2oS7XODcX-PAgtTE7X2EXrtOhpNaIE49h-JUXD9AE-Z0rofzj69O5K8TpcQVrA3Q-uS4hsUV5XVEGferuCR8nHoyzKoIOqxQqncJj3dXN48Z91w5zcNK8KLkRAHhc_IA5SqPtVlU8jFpS3HUcIWxUPdz85ZKUpSuulvX6xa5Le9xp4iFQ3AcvqjQ-4Vqm_-cNV9JuVlPmJ88DsWgfVWYcZEhHmh408UR52hEhJjH5ArQ8V2hMFUvUNhdAfhpRevU403b_Ak-wHpdaEjdhV3AEVGY7vcHQnudUR6PmuTagkI0i57Gl2pPeskc6YB0MfPom15z4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAHAAAAAAAAAAwBAAAAAAAADZAEGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdBRDb250ZW50LUlkgAE5MTBkYjRjN2YyMDY5MTU3ZTQ4OGM3MmU3NjUwMjRkNDRiY2RjY2U5NTBhYjg5YWFjYWE2NWMzYzAyNmJjMTYwHENvbnRlbnQtRGlnZXN0gAE5MTBkYjRjN2YyMDY5MTU3ZTQ4OGM3MmU3NjUwMjRkNDRiY2RjY2U5NTBhYjg5YWFjYWE2NWMzYzAyNmJjMTYwHENvbnRlbnQtQXV0aG9yGGh3eWx2c29yNTV3cA5DaGFpbklkBDU2DFNvdXJjZQhhdGVtAHsiY29udGVudCI6IntcIm9wXCI6XCJwb3N0XCIsXCJhZGRyZXNzXCI6XCIweDBhYTJjMmRhOGJkNWYzZGQ2NzBmMzhjMzAyYTU1NTYxY2JmMzNmZDJcIixcInRzXCI6MTY5MTQ2MDYyMDAzOCxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiaHd5bHZzb3I1NXdwXCIsXCJ0aXRsZVwiOlwiMTExMTJcIixcImJvZHlcIjpcIjIyMjIyMjIyMjIyMjIyMjIyMlwifSIsImRpZ2VzdCI6IjkxMGRiNGM3ZjIwNjkxNTdlNDg4YzcyZTc2NTAyNGQ0NGJjZGNjZTk1MGFiODlhYWNhYTY1YzNjMDI2YmMxNjAiLCJzaWduYXR1cmUiOiIweDUxNjVhMzUyODVjN2Q5Yzg4NmM4ZWJlOWI3MmU2ZmE0ZTYwZWI2ZmY4YzMzMGQ1MGM2MTM0M2I1NzFmODBlOTIwM2I2ZGI5MWVjYmRiNjIwMjY3MWVlNWM2ZDE2OWM3NzA2OTk3YzJhNzJjZmM3M2Y3YjA3OWJkMjVlYmJmYmI4Iiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVacVQvREMzdGRPMXRZeXdIb0pDMG9ibHRkSXl0djJKd1pwQXZEZnAvMnRtUVZrOVBhOEp0a2FSZTFEeHVWc2RjbXE0SlhwYmYvSHdDRFRJNW5zNmV1QT09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHgwYWEyYzJkYThiZDVmM2RkNjcwZjM4YzMwMmE1NTU2MWNiZjMzZmQyIiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4Yzc3YThjMWJlZTM0OTZiMjBjNDFhYTlkNTUwMWQ5MDg4M2Y1YWViYTNjMTc4NTk2ZWZmNTY1NzA0MDVhOTMwYTcwZjgyZWFmNDBkYjI4YTA2MjkwMTU2NTViN2M2MWI4NjBhZTdhMDMwNzU4NGZiZDVkMmQ4ZjgxM2UzYWVmYmUxYiIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQXRlbVJldmlldyBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWnFUL0RDM3RkTzF0WXl3SG9KQzBvYmx0ZEl5dHYySndacEF2RGZwLzJ0bVFWazlQYThKdGthUmUxRHh1VnNkY21xNEpYcGJmL0h3Q0RUSTVuczZldUE9PSJ9fQEAYdoiny8bNp2mBpuPgFI4dxe1xOytTztoYskYCv9ESAELdknF00jjtyM5OjtfFfPqey8FhWPzhIHXZ8_JK8lp79mKN2lXnj6McJ5X4OrBWNLL4Aq3orvvqwSr_-8VCFoEKPT2_bY8bSSzFeOa1CE9wRitJJXqunGp0GZkdoklwfWU0APTjbBm2vFVP7W5_wIq_dflFzRkZm4oXsgyNgYucelDzi5fWplUzlqWO9jtK0ymBuCqrUg827uwB8Ytnp41PObmIKNP-RRyj3mDonSdTVRLVFFApImGQb2TRl0wxKLc1aAf-krgVv5o6Aa_1IoUdKet4O8kpJCElq1zGoIDHBpo7QHL8BCl_VNMf9C-3edmdtK6SpNdfwUZTtk2q3x5fvmjNfeGtu-QqJtsoORy3J6Y2qKD8kbBFbX-_OdYkDUrUs_T6xTFcEe71q2YpLz4LaE-HtcdYuaXdyLqSuee2-fmPd_F7NGs5ERe86G7Cke11o7_lYyDoZwKJEh3yxJbWWdaA-m_tcV5-S3z27XHhp878SfovxX7xuYiMCMK72L8yHmsBxa328xLwk_PiDD11AIB4bls_TzaNnZIhfTgwYRy21qw_cREJ-ox5m3Z2_WIcTNP5S9Yx5wP7VKJ71_cFWxgdNf3JTm140JXh9V62sesPmt3Dg4jd7FPiwBbxRWc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAABwAAAAAAAAAMAQAAAAAAAA2QBBhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QUQ29udGVudC1JZIABMWQ0ODcxMWEwZTEwZjg5MTQ1YmRiZjI1NWM1NjY5NDdkY2M5OWY5YjU0NDU4ZDM5NmY1MTEyN2MwOWQ1M2ZhYhxDb250ZW50LURpZ2VzdIABMWQ0ODcxMWEwZTEwZjg5MTQ1YmRiZjI1NWM1NjY5NDdkY2M5OWY5YjU0NDU4ZDM5NmY1MTEyN2MwOWQ1M2ZhYhxDb250ZW50LUF1dGhvchhxMTkzNTY3MjM0NHoOQ2hhaW5JZAQ1NgxTb3VyY2UIYXRlbQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwicG9zdFwiLFwiYWRkcmVzc1wiOlwiMHg2Y2YxNjc2YTQ3ZWI2MDk2ODhkZDVjMzZhYzg4ZGYxM2EyYWUwNDQ2XCIsXCJ0c1wiOjE2OTE0NjA2MjEyOTUsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcInExOTM1NjcyMzQ0elwiLFwidGl0bGVcIjpcIjExMTEyXCIsXCJib2R5XCI6XCIyMjIyMjIyMjIyMjIyMjIyMjJcIn0iLCJkaWdlc3QiOiIxZDQ4NzExYTBlMTBmODkxNDViZGJmMjU1YzU2Njk0N2RjYzk5ZjliNTQ0NThkMzk2ZjUxMTI3YzA5ZDUzZmFiIiwic2lnbmF0dXJlIjoiMHg3ZjgyZTcyNTJjYzgwOWE3MTQ5ZWU5Y2QzZTY0ZDZmMTBhMjQxZGI4NzVjYzRhMjUzNDRiMzA5MzlhZmI3NmI5N2FmZWMxN2I3NThmYjJkMWJhYzhhNTgxNDQ3OTVhYzM3M2E0MWZiYjA4N2Q0YWQ5Y2E3NTc3MmM0ZjQzYzY1MyIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWTJzY1VoTUp6Z29mOWZ0TW03NXFIVDJnK0t1cStVRVMyOWl3RW9KblpOWGllNS8zUmt3NWg1OVpFZ2tUU29yUVRlRzNpd2k2QlEwU0wvYzNjbXZQdEE9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4NmNmMTY3NmE0N2ViNjA5Njg4ZGQ1YzM2YWM4OGRmMTNhMmFlMDQ0NiIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweGM4ZTU1ZmE4ODQzZDMzOTJhMzRiNzMwYTA3MjcyZTVhZTQ0YzhlMTUwNjc5ZGZlMDZjMDIwYzQ3ZTFhMDIzNWI3NjlmYzFiYmQ4NTJmNzAyNDIyYWZiZjk0NTllZjRkOWVlZDRjODMzNWI0ZmIxY2Y1ZDNlZDQzY2IyOGEwODIyMWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEF0ZW1SZXZpZXcgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVkyc2NVaE1KemdvZjlmdE1tNzVxSFQyZytLdXErVUVTMjlpd0VvSm5aTlhpZTUvM1JrdzVoNTlaRWdrVFNvclFUZUczaXdpNkJRMFNML2MzY212UHRBPT0ifX0BAIoyS3XQ3X_zYHbIdzVPV9sRp9C1h0Lr-VGjuzTM5G1XjgDUK9WYd_drz9IuqlufuV8cSQJZKyIVcfNi7wfkDD0mU8RiNiyZLNedXYsHMV6812n97lX6gBGY9eSIcaL7vRdpepd9GfUVndo82vb20Ygl1p_R9o3zJDM2s6WPgWugCWF_yPf2W216s_Wi2GdnhQTSjLVblJOeWL8okKE_BXH0qfJrgBCn4KtxBi_9pX7KKYiiuooPFE4qgb5sN2iVy8f3dDz418doxdumibpn4bImnhYs_xFmSEEoWDHrtk19BWEhpDmdAp48KqTEkWv9FiFvGjGFWB-vKTRkWPR18nv3BgpCDnl34cZo-nubHnVqd5MqFg6e8grO7ve2ChBqZU1s0i3kPn3cAkOXRFAFT9CDZRGOpcpsgqiX5yVaAjwT2-5H3w0VfAhtt6T_8QM3BYN3PQ2VbAFm8yuuYjxeug0n6zQNdgxQJB0cybbUeZdm24j5mYTkdmryKSGseaoAmwDH81G-h557ZeODvddnH_0PEsWi4oWsgQpLOerW1STnWN0VQTDxXhsYZSpPOsOOZAPS9gdmsRPuayjnMosZ9s3i6lcBnNQ9B8UGuF6lYY3yk1zbwD1Hb0dsmH5DCatSnXD-PJ2ZVgclyJgTVpt-QVBpVN1gv3PNR2A54LbGuuInnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAfQEAAAAAAAAP8gUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0FENvbnRlbnQtSWSAAWFiZjI4YzQyYjg1ZTA2OTE3NTAzNGE3MmZhNmFkMzQ2NDhjYWJhNTA3ZjY2OGEyOGM1YmEwZGE5YzQzYzc4MjkcQ29udGVudC1EaWdlc3SAAWFiZjI4YzQyYjg1ZTA2OTE3NTAzNGE3MmZhNmFkMzQ2NDhjYWJhNTA3ZjY2OGEyOGM1YmEwZGE5YzQzYzc4MjkcQ29udGVudC1BdXRob3IYMWV3OHZxaDVvcDU4DkNoYWluSWQENTYcQ29udGVudC1UYXJnZXSAATM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2UMU291cmNlSDE1NTMxZmEyLTEyMDUtNGY2MS1iNmU0LWM5ZjY4ZWNmODFmNwB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwiY29tbWVudFwiLFwiYWRkcmVzc1wiOlwiMHg0NzY1NjBjYTIzM2Q1NGEwYzdiZDI4ZTIwMmNhNThmZDFiZWYyY2ZhXCIsXCJ0c1wiOjE2OTE0NjA2MjAwNjIsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcIjFldzh2cWg1b3A1OFwiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIlNvIGZ1biB0byBwbGF5IGluIG15IHNwYXJlIHRpbWUuXCJ9IiwiZGlnZXN0IjoiYWJmMjhjNDJiODVlMDY5MTc1MDM0YTcyZmE2YWQzNDY0OGNhYmE1MDdmNjY4YTI4YzViYTBkYTljNDNjNzgyOSIsInNpZ25hdHVyZSI6IjB4YTI4MjIyZTkyY2IzNTQ3YjAyNjUwY2RiZmI3NGYyYjIyZWVkYTRhODY1YTY5MzgwZWNmMDk5MDM4M2FkYWUyNDQyODllNzJhNzA4OTM5MzEwZjdjZDg4YWIwYjhlMzk1NDg1ZDIyZWI3MTFkYjFkOTU1OWRlODBkMzA5MDNjY2QiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRWJ3cUkzbExUWHVRMFJBWXB5NUkzeURzUUFETlFKTXMxTXluTVBuVE9SQm9OUVptWkQvQWdwUDRZOXhGUDdHaXVNSzVOUVRiR1ZMdEYrMDVnT2t2L2R3PT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDQ3NjU2MGNhMjMzZDU0YTBjN2JkMjhlMjAyY2E1OGZkMWJlZjJjZmEiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHg1ZDRjYjAyMzIxYjQzN2UwMWZkNTQwZTkwNmNkODFkN2MxMzg0M2M3YTYxYjQ5ODE1MTE2ODEwMDMwOTY4YTk0NWFjZTlmNGU2Njc1OWUzNDI2NWYxNGJlN2QyZWRiZDZhNjM1YTdhMDMzNmVhMjU0MTgxN2JlOTMwNDY0OTRkOTFjIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBDeWJlckNvbm5lY3QgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRWJ3cUkzbExUWHVRMFJBWXB5NUkzeURzUUFETlFKTXMxTXluTVBuVE9SQm9OUVptWkQvQWdwUDRZOXhGUDdHaXVNSzVOUVRiR1ZMdEYrMDVnT2t2L2R3PT0ifX0BAAKu4nPohUvcoowMHUi45LioARdvgBiVGQvfxKNYFHxaGqi4CxUkmcGVvsgCNjKHVmaIR4X0695utyvzv0DgeHmwHRHTvutW-i0QKIHmtjSX0jxpbkzzviTrzQDGE5Ps-J_8JchuKMKlcnHlnpXMbwIRWayjiBSu4P60qJ1ceXmB7oFyM-2YdctSzAlojTbabzteRZlMu-A2LBwADFAl2T2KJYt8zwYMaVwgwb3tlJAp9_cDjfT499abpYIdur-D_cKX0fET_HV-10cc4ooqzCK0_VByvj2N-K0_5yS_xj8YigSekVYXzo-nMm1xmH3NIfR-O2NjQsjREkWftMDdsgXiFNokCCIqxItvPeAluLeWZoWobVxzcCP0Gsx93UrfXw4vDeS0C1ygqPwkKwp8GKI4Tf2pv7uo8wyDMLHQvIeGhurCwIYsGGMKI72FNCWvMSuzNiyC-W-ujsHMESqkMQAhF02Ps_5ChVU1hnJLUYFN2uStC51qXaY1WdFHM-bO__DHz61mXeAYA3QKv94tZm3PGWEaB7TcLT8jm9gxqxZG06OCaCTne_qfcR4yyB4ExQxvxYzmw22R7OZBXSdyVSj-qNBsURfUA1PeeSfRrxMJxmoN8cXoShgn_02ApfnP0EqOgSw9iezq2RpRsdA6AOPPVsXKS4LHHYMAfOXkyYR9nPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAcAAAAAAAAADAEAAAAAAAANkAQYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0DFNvdXJjZQhhdGVtFENvbnRlbnQtSWSAATc0MDJhZDdhMWMyNmE4YjQzMjcxNmNkYTk5ZDNmM2U2Mzk2MDNkODdkNjk1NThlNWQ5NmQwY2I5YTM1ZTdlNDkcQ29udGVudC1EaWdlc3SAATc0MDJhZDdhMWMyNmE4YjQzMjcxNmNkYTk5ZDNmM2U2Mzk2MDNkODdkNjk1NThlNWQ5NmQwY2I5YTM1ZTdlNDkcQ29udGVudC1BdXRob3IYdzBkZ2VjZ2t0a3FoDkNoYWluSWQENTYAeyJjb250ZW50Ijoie1wib3BcIjpcInBvc3RcIixcImFkZHJlc3NcIjpcIjB4ZDM3ODVmY2E0OTc1ZDU3M2M3MjU3YTliMmQ2NTMxOTI5MjhhMjZjYlwiLFwidHNcIjoxNjkxNDYwNjIwNzc1LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJ3MGRnZWNna3RrcWhcIixcInRpdGxlXCI6XCIxMTExMlwiLFwiYm9keVwiOlwiMjIyMjIyMjIyMjIyMjIyMjIyXCJ9IiwiZGlnZXN0IjoiNzQwMmFkN2ExYzI2YThiNDMyNzE2Y2RhOTlkM2YzZTYzOTYwM2Q4N2Q2OTU1OGU1ZDk2ZDBjYjlhMzVlN2U0OSIsInNpZ25hdHVyZSI6IjB4MmJiOGU0NDc5MDY2MWRkYWZkMTdkMWM1ZTNiM2U3MmU1MjgzYTk1OWNlMGVmNDY1MjQ1MmMwMDAzNmZlODU1MDY0MDJmMzMzNzhkNjI5NThhMmQ2OTZiNTI0YjIwMWJiYmUyN2Q2YzlmMWRhMmIzMGM4Zjc2OWZkYjFjYzg5OGIiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXY0L3lYOVRLbEpVSlcwWXJLT2pUUzBrNGNVTEZDZWF0M1l0Y3AzNUl1cW1rb01sV0lzMTUyeVNicFFZZzBZb3lnOGxLdHdOL3U4MU1henZBeG1sM2dRPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweGQzNzg1ZmNhNDk3NWQ1NzNjNzI1N2E5YjJkNjUzMTkyOTI4YTI2Y2IiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHg0MDA4YTM3NzJkZjQ1ZTdjZjI0OWZiNWEyY2E5NjlmMWE1YmM2MDJlNGQxYTM2ZDI2MzZmMGM3OTJjODg0OTU2NzU1MDU1MWJlYmFjMDM2NGI1Y2FiMjBjOWEzNWQ1YmRlMWZhODRjYTViOThlMjBjOWUxNjZjODNmM2RiOWYwZjFiIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBBdGVtUmV2aWV3IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUV2NC95WDlUS2xKVUpXMFlyS09qVFMwazRjVUxGQ2VhdDNZdGNwMzVJdXFta29NbFdJczE1MnlTYnBRWWcwWW95ZzhsS3R3Ti91ODFNYXp2QXhtbDNnUT09In19AQB8DaCbETQYlL4njto1gWedEMabsyaFvm5Iv5LijWq0Of-mG8ULPZzqPAx9yl8cXXbO0wHENgTK1FY1rI_9BxulXHGQPfbzXghzTyV0DGfrukKugNMZhuyoQxmTtIorxnl-DANa09EahkeCpC8J4iUMu6x4neCMhpXHNxNLvACyR95-uQC0Bca5xFRv8KGBbOA2VF_QxZYP1F3AB-7q62DuF1rnv8hQDJJ8e9tN3dW4QDxZHuu8kAP4I4jENe5apGf4qzeB5NRIIzRP4odgq8Gshqszpk1j4g8Vnl-bGCI8-KmyS9B7i88k_nCQg4akq_2nR2YS7Edw5vnAVCatK8nsuIPCeRPGYsLs8jGRQaD_cYZrYYriUEPN69ICZp4rPteD6dTRMXbMF5bzVDNeKHqZhfpGNA-6i6_4VEkAA4b5bC25nKU2yibo9aINbdcoDeNF3dP21jOd7bveknyGITAhxrpXUElAqSj8usVXw3WCGRUV73k8jOCE4EExHPdm50C0LyP8ALhzzNICoE3F0rCY7SAromVoJC2QpmIjV4lKBV69x5qjhmp-e6hheWvfJSUTqTp2Z4Zh9OUntYng3dpiEfh1KNuhWiP6C9zz8dgVh0434oadfGCZdGoKJbVUabGxA-JMdVR71m5vks7GTvykHZrr_Ix5vBbD9slQX4E2dpz4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAHAAAAAAAAABQBAAAAAAAADaAEGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdBRDb250ZW50LUlkgAFlODRlMDI5NmJjMzYzOWY4YjdjODA2NDI4MDk4OTMwODgzMGU1YjZmYmE2NWIxMzFlYmQ1OGRkM2Y0NmRjN2RkHENvbnRlbnQtRGlnZXN0gAFlODRlMDI5NmJjMzYzOWY4YjdjODA2NDI4MDk4OTMwODgzMGU1YjZmYmE2NWIxMzFlYmQ1OGRkM2Y0NmRjN2RkHENvbnRlbnQtQXV0aG9yHnNzcmxnZWt1YXdybnQ5NQ5DaGFpbklkBDU2DFNvdXJjZRJjeWJlcnR1bmUAeyJjb250ZW50Ijoie1wib3BcIjpcInBvc3RcIixcImFkZHJlc3NcIjpcIjB4MzNkZjFjYTdhZGQ5NWM4OWJiOTNjNTRjMWJiNGNmZDYyNGNmM2ZlZlwiLFwidHNcIjoxNjkxNDYwNjIxODU0LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJzc3JsZ2VrdWF3cm50OTVcIixcInRpdGxlXCI6XCJUaGUgSW1wb3J0YW5jZSBvZiBQaGlsb3NvcGh5XCIsXCJib2R5XCI6XCJEZXNpcmFibGUgSXQgbG9va3MgbGlrZSB5b3UndmUgcHV0IGEgbG90IG9mIHdvcmsgaW50byB0aGlzLlwifSIsImRpZ2VzdCI6ImU4NGUwMjk2YmMzNjM5ZjhiN2M4MDY0MjgwOTg5MzA4ODMwZTViNmZiYTY1YjEzMWViZDU4ZGQzZjQ2ZGM3ZGQiLCJzaWduYXR1cmUiOiIweGZiZmRmM2Y5YmEzODUzNDMxNTdhM2JlYjVjNzNhZmFjMzgwYWIyZmQ1NjcyYTBhOGNiMDUxOTI0NjgyMmVlYWJiZjgzODcxZDIzZjFlYjNiNTNmZDRjZTJhZDNlZjc5YmNlZmE2MGVlOWZhZjM2NmRlZTdiOWIyNTRjOWNkYjNhIiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVPNmFVeGlMQjdGME1EWngyb3cwWlZ1MUc1aEpaS1c1aW1JUXJZWitrUlBaZU5YUWpZNVowaTJrK1FVTGp1Q3l6bFArZHAwZytvTitCaU0vamtCSWxLdz09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHgzM2RmMWNhN2FkZDk1Yzg5YmI5M2M1NGMxYmI0Y2ZkNjI0Y2YzZmVmIiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4MGJhZmQ4NTczOTJiMTBlZDhjOWQxMzY2MzFmMWVhMjE1NTA0MjE1NGVkYWViY2MzOWFjNjZjNjhmZTY3MDgxYzU5N2M1ZDEwYTYwMWU2Y2Y1NWFkNmVhZDM5YWViZGI3ODliYzg2NGEyMGFlMGQzOGQ4OWQ0MDhkMGUyZDYwYjgxYyIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgSSBhdXRob3JpemUgQ3liZXJUdW5lLnh5eiBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFTzZhVXhpTEI3RjBNRFp4Mm93MFpWdTFHNWhKWktXNWltSVFyWVora1JQWmVOWFFqWTVaMGkyaytRVUxqdUN5emxQK2RwMGcrb04rQmlNL2prQklsS3c9PSJ9fQEAY3XRz37xo66Wxb-PbuVK_IohtrxvPd1pTx1FCqKYT4h0peZk6Nrm4VCPjAsw5ahY7S0ffGflnDo4CX6ZxTL-CvClHwFpLmcFjnOF18YaANv2xOIS6FPJph745ck4RjxO2pSyTCKQEKsAJhueSOWo-anFPoFNDuOBYhrgWEeJRsRmpV3XbeWLnLT7En44e42jyf9eG1tJ_zNTrBlyk67dLgkaCvzA0sab6Q2WjI4GOuHBT8kMACEfisFK_qp18YA02IG9SKFr47vCA0kbF_IhgYJxRcnIR7t1cJz0ybJZ7aXwvWsKuBaG-hM0pCIIRy7nyY7RxxITyeE8M8uh3nPXoej2-M3iXSJAh3OMUYEdjgCn_zJQhqzNcS2MdWeOkehqPrmDJJddssm5aUUE1WqkX5U1WNajNXkAmiDjQHy0TMr6Tcv2TRzm9Kj8nn89tdMYdOM8QCwi71jTMMnSeuT-C40Z_fEkZ8tDdLTAMf-Aq6aCNrlSQ6PCDH5ekw5an7HPrHen_bLUBi22VydQeaGDGTM0-0CTxRWa4FpWhO9frB6iSk2mLOdRCVm0wUijTlH_mK5HQsJZhoMG9Q72vRAN_FpKBkZfQuvjmU9v7BCoHpe7KcNHdS_sk_DLT03O_qqMZxFz0HB1iW0kXt8IXpCBdkzxh3UNYLC-rNPMjpwZIyWc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAABwAAAAAAAAAMAQAAAAAAAA2QBBhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QOQ2hhaW5JZAQ1NgxTb3VyY2UIYXRlbRRDb250ZW50LUlkgAE1ZTI3YzAwNTdlMjljODlmYzI3YWZlOGRiZDZmYTdjYWY4NTU4ODIxM2QzMGYwZDUwZTEzNTc2ODM5Yjk3NzAzHENvbnRlbnQtRGlnZXN0gAE1ZTI3YzAwNTdlMjljODlmYzI3YWZlOGRiZDZmYTdjYWY4NTU4ODIxM2QzMGYwZDUwZTEzNTc2ODM5Yjk3NzAzHENvbnRlbnQtQXV0aG9yGG1hd212czFyaXdscQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwicG9zdFwiLFwiYWRkcmVzc1wiOlwiMHg2MTMwODEyMjVhMTRiNDhmMzFhZmZiMzczYWEwNGEwZWQ5OWMwMTQ3XCIsXCJ0c1wiOjE2OTE0NjA2MjE2NzUsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcIm1hd212czFyaXdscVwiLFwidGl0bGVcIjpcIjExMTEyXCIsXCJib2R5XCI6XCIyMjIyMjIyMjIyMjIyMjIyMjJcIn0iLCJkaWdlc3QiOiI1ZTI3YzAwNTdlMjljODlmYzI3YWZlOGRiZDZmYTdjYWY4NTU4ODIxM2QzMGYwZDUwZTEzNTc2ODM5Yjk3NzAzIiwic2lnbmF0dXJlIjoiMHhiMGQ4YTgwMDY3ODM4MTViYzM5N2ViMzJlZDdiZjQxYWJhNDIwNTE1ZmMxZjRjYTUxMzU4ZmI2NjlhZGYyZTEwZTY0ZmZlZDBkMmUzNTViN2UyYTRkODgyZGYzYzc4ODQ2MDlhYTVmYWQwMzU0NWU4YWJhOWVmYWQ2Nzg1ZDBkOSIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFZFNaOHNvdmRuQWcvWmJkeVkySlZEK1IwYXg0OXdZSWc3Rk5mZ2FaNElRdlR4b01QT0lEWjVpRG1LTVd2TjFiazQyU3k5Sm53d0VUUTBGYjJqQyt3V2c9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4NjEzMDgxMjI1YTE0YjQ4ZjMxYWZmYjM3M2FhMDRhMGVkOTljMDE0NyIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDUxNDkwMTFlYzcyMTRlNzYzZWE3Njg2ZmNjMWZiZjgyZjkyN2Q5MGNiNzU0MzgwMWRlZjNiOGZlNDk2NjY5NGUxYzM2OGQxOTI1YWZlYzZiZTAxMTI2YTM3YmIzNTRjYzA2MzM2ZDFiNzZjN2M4MWZiYmE3YTFkYzQ2YTVlMjQ2MWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEF0ZW1SZXZpZXcgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRWRTWjhzb3ZkbkFnL1piZHlZMkpWRCtSMGF4NDl3WUlnN0ZOZmdhWjRJUXZUeG9NUE9JRFo1aURtS01Xdk4xYms0MlN5OUpud3dFVFEwRmIyakMrd1dnPT0ifX0BAD82HT2KAijAa1SfS8oPyOhKNYoW_tE5nHWu4jn_6PvCDfq3P21k5ol34rA3b7sYDy35r1Z8jhzmYJiZiMMKtjr9hXwZAIc0miD7Kq92xXmGCsi7sdmkYiWANyeKE81wjicaeH0BPVh6nDaKZg_Kz7Z7dO-sTjMLu2o3BETxIN7G_mY1AqVu8WbQJAWMI1Xl4jLofUtnD9RcYQc4v1oBqD00r6fiIeYRjdopY6ayG0GCruccywkkmr7xh5wf-ofKHwMliP2R7FveohG63QdkENwBvzCEMocx6R5Hinu2G_d01Gw49ZjY9_nKnC2dFveW8ugaTqlwoTNg6mNXlYHamOXlyDVa8TJ6RCEkpRME8RFJWam4S215VPym-g4Yfe8nDWTvfLI2CNqv4aPKj6r23seWdQCfVU7_owBX1SutzT17ZdTG5SiinJwdga6TQ27ZX6fOcG8bdgUmPMoetxtOtUcFn4JDzYGPLcYUt8A_H4XblnpMaAS-5ULmrxNFs1MdbNL3snZsluk92JyD44dvqbMl-_NexgjHkwfN4uOKcuYWlMR5HAe4R_UK3wVBpT6G8JgZdyl50JKPQtcrJp8zPW4VXtrd-zJSBpdd9z3WkY1bAfypxTbe8Q0ydyA9WuoYBL0bR4Xwbwa_jYXixdLABfHAkNsmQHF4vnbbnHx7lVyPnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAcAAAAAAAAAGAEAAAAAAAANqAQYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0HENvbnRlbnQtQXV0aG9yJnF1aWRlbXhvZG9sb3JfY3liZXIOQ2hhaW5JZAQ1NgxTb3VyY2USY3liZXJ0dW5lFENvbnRlbnQtSWSAAWE2N2E5MmQ4YTA1ZGJkZTcwMWU3NjlkMDc1MGI3OWY5OGIyNjkxYjBhMjc0ZDlmOGM4NTQyNWJjYjA2ZTEzMWYcQ29udGVudC1EaWdlc3SAAWE2N2E5MmQ4YTA1ZGJkZTcwMWU3NjlkMDc1MGI3OWY5OGIyNjkxYjBhMjc0ZDlmOGM4NTQyNWJjYjA2ZTEzMWYAeyJjb250ZW50Ijoie1wib3BcIjpcInBvc3RcIixcImFkZHJlc3NcIjpcIjB4NjVlY2VmMWM2ZDEzM2E1YjUwOTAxYjZlMDgyMTZiNjlhNWM4YTFlMVwiLFwidHNcIjoxNjkxNDYwNjIxMDc4LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJxdWlkZW14b2RvbG9yX2N5YmVyXCIsXCJ0aXRsZVwiOlwiVGhlIFNlY3JldHMgb2YgdGhlIE1lcm1haWQncyBMYWdvb25cIixcImJvZHlcIjpcIlRoYXQncyBjb21pbmcgYWxvbmcgbmljZWx5LiBZb3UgcmVhbGx5IHNjb3JlZCBoZXJlLlwifSIsImRpZ2VzdCI6ImE2N2E5MmQ4YTA1ZGJkZTcwMWU3NjlkMDc1MGI3OWY5OGIyNjkxYjBhMjc0ZDlmOGM4NTQyNWJjYjA2ZTEzMWYiLCJzaWduYXR1cmUiOiIweDM2YmQ5YWNjNjY3ZTQ5NDhkY2FiZWNlNGEzNDUzMTc0N2YzZjNhZDM1Y2Q0MzU4NGVmY2M5NDJiMDcxODdhYjIyYjc4YjM3ZTliZTk3YjQ3NzkxMzUyOTRiYmI0MmFmYjIzOWRmYTUzMWYxNjgxZDQyODM4ZWI4ODYyNTE0MmYyIiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVja0hRUm5vZ2p3L3VhbjM4eDBRQTNDdk1vMXM0aSt5ZTJjNHpPR1BNSDQxSTUwWVZMREZkblo0TUxOVURGZjVSSThLVllGK3czbGVBVFZpdldWLzlpZz09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHg2NWVjZWYxYzZkMTMzYTViNTA5MDFiNmUwODIxNmI2OWE1YzhhMWUxIiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4OTI3NDY3MzVmNTI0YjBhZTZjOTY2MWZhYjVjMDI1MWQ1NzA1Zjg2NWNkYTY4YmJiZGQ3OTI3ZTE4NmQ0NTkxYzU3ZGEzM2MzNjM0MWMzYzM2NTM4N2Y0M2EwZjNiM2FmMzkyM2QwY2E3NTNlYzg2NjZkNjIyZjRhNzUwOGMyOTQxYiIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgSSBhdXRob3JpemUgQ3liZXJUdW5lLnh5eiBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFY2tIUVJub2dqdy91YW4zOHgwUUEzQ3ZNbzFzNGkreWUyYzR6T0dQTUg0MUk1MFlWTERGZG5aNE1MTlVERmY1Ukk4S1ZZRit3M2xlQVRWaXZXVi85aWc9PSJ9fQEAYspOfE7CcqKHz_UTVqmBeAtZqYuri0oTJsd6kD7Zo7cFvSYD_Q8CfFZnPF9evtirvvW3zU-RFsOG6ZAVEm7tJYvWSjKoI-0PuE8aR_qx892ZZUkuPPFcU9MND8PYbSuhneS6NiyRQpvlbZr879JRurJ1wvY6dU4lqjqOx-4n9OtLxmqiDAEwrZF3xhfvj65VEZThWvMuS6wwTAo8TCROkBacW6usK9n889hgkUVuZWCM-Hu3kuK0kbOC1CMwMTfTtYkV6lg2nHjU4P8ALYs39sHAtzMYO1B3ixgBR7jAOGYX4ZnM9z6bqUyyLWpGxnykPRSiLtqKFu20miu_RC3voqWrZGgPg8-5eUISJH-PPqkwecHHvsr0aqGQsAFkxp1e7NpvUSnfJa23m2EyTE6OzOnF2Q9abXGVP4H7EBBYzCWXm8bdox0rYIzEClAzzDryBvA4paVQgvjGhUgJRue6KYNBC8p-R8ZHfMiem015V_HUpDlHadRe4PJjXvPlejzx9pzbBcgFPX7OssQ3bDqSViIfK8z81q8fDUIFqKxtwD9bshg-9YGnT1BxPjmBSAsS2CgDGRP7YbhHZkFUSaPBN57buli7x4eL85wSLkQKnvBrwm7gueYrMzsQLCaBl05eLwlLxpE-eMslsaaSfqUWzjzdEXTxYMx1yUs3q_ybAuGc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAABwAAAAAAAAANAQAAAAAAAA2SBBhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QMU291cmNlCGF0ZW0UQ29udGVudC1JZIABMWU5OTFlMzI5YWMxMmZkMTk3YTJhOThjNzU0MzI5M2UzMmQ5NGYxY2YyMzhhMzJjMzI5ZmI4MzZjZDdmZjJiZhxDb250ZW50LURpZ2VzdIABMWU5OTFlMzI5YWMxMmZkMTk3YTJhOThjNzU0MzI5M2UzMmQ5NGYxY2YyMzhhMzJjMzI5ZmI4MzZjZDdmZjJiZhxDb250ZW50LUF1dGhvchowMDY2MTA1NTk2NzMxDkNoYWluSWQENTYAeyJjb250ZW50Ijoie1wib3BcIjpcInBvc3RcIixcImFkZHJlc3NcIjpcIjB4MGYwMTIzMGYwNjVkYjljMzQ4ZDNmZTZjNThlODZkNGRlMjk1MDhlZlwiLFwidHNcIjoxNjkxNDYwNjIxOTg2LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCIwMDY2MTA1NTk2NzMxXCIsXCJ0aXRsZVwiOlwiMTExMTJcIixcImJvZHlcIjpcIjIyMjIyMjIyMjIyMjIyMjIyMlwifSIsImRpZ2VzdCI6IjFlOTkxZTMyOWFjMTJmZDE5N2EyYTk4Yzc1NDMyOTNlMzJkOTRmMWNmMjM4YTMyYzMyOWZiODM2Y2Q3ZmYyYmYiLCJzaWduYXR1cmUiOiIweDc3YmJlNTc1OGZiYmU3N2E1NmUyYjIxYzdmMzRlMDUzZjZiYzBjNjk1ZDkxMmExMjU0OTI0MjNjNzdlMmM4OGE4NjA0NWY3MmMzM2YzNDMxZTFhMTIyMTBjOGU2ZDc5MDE0YjcwYzYxZTA5NDY3YTg3MDFiNjg5ZTdkNGQ5MWM4Iiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVnMGtPSjRIYW5OdENzZlhLOUFQVUdLUFhrdmg2NzJZMVhvb0krcEVRSDB2RXJLVTNrYlphcSt1bWc4bFJyZWVrNWo1bUg5ZkZKWkFmT3FLRk94c1Y2dz09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHgwZjAxMjMwZjA2NWRiOWMzNDhkM2ZlNmM1OGU4NmQ0ZGUyOTUwOGVmIiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4OWIxYWQ2Y2Q4OTEwYjBkZTZhOTkyZjMzYzE1ZGI3YjBkOTA5OTYwOWI1ODE5MzU4NWU0NzhjZWExZjYyYzQzMTYzYTg3Y2UwMTM3NTcyN2I5YzEyZmUwZGY4Mjg1Yzk0OTY4MGJjZTRmYmIyYjU1MWE0YzVmMDJjOTBiZjFkMTYxYiIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQXRlbVJldmlldyBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFZzBrT0o0SGFuTnRDc2ZYSzlBUFVHS1BYa3ZoNjcyWTFYb29JK3BFUUgwdkVyS1Uza2JaYXErdW1nOGxScmVlazVqNW1IOWZGSlpBZk9xS0ZPeHNWNnc9PSJ9fQEAG9S9LRUuqzj37mmPTFH4_qvQxFWlsBkFwcvL4VTHwMCEzItEsR4BPVioxzam5z0un7rB_5RwS-Lzk_DHyqVF2WsEIRhhcGrV2TPFjOuFwEN71NP20cwXlwonZPmRUt6jhrqjZ3LiBGpZO-uUW-ZIo2foYIcdyaysiqTNm7jn08tPwWo1rkh7u4Lt3BmfMU-D7uLHW888akT-gXrx3l2Gj8M9HPmdhK8Nk164HBhl7CaiAqXxPK0b6KVCFT6kgBckDOl-WnOD3siP7GLYke5mZorowoooElbcq_e6vUIkrSYRexFylRpTqrRMWI4Si9mpZrF_6q3KxmTUY02bLZ0waP5OcYXomryv162FBkx_PDaNObtoNxZb065mroIfiSwTlYivbfLz1CW_4GX-c2EQ1VVSkOU7gVFlzr1dr1L2b7mnQNvfXx30FOzfcp_xNK99I4WI8MCSjc3D5sXEAjiwnTvJgyy39N2vPdnEiLpV_TTg4Z_9NRhSRxDsNYVK4fOXr3Z9-evTVsRzzheN5oct0I9nl_osEMy-kSujlVd5_x473KrhP80kw2Mjmd77gyggBhH8Rvu6BC9NjQz8mkxFKmITStblugQ8gTGZQwaeOzJV1QA3Pi-wcN24aXYBfxCoDmtzhImKiY2KlI-c2pNQh62sU74o7stOE_21Cl8KR36c-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAABwAAAAAAAAAMAQAAAAAAAA2QBBhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QcQ29udGVudC1EaWdlc3SAATg2ZWZkZWMxNWMzNDQzZTQ5MTQyMGQ1YzE0ZjkxYWQ2ZGE1NTE0ZWYzOGNiYjMyMDgxOTJhMDViOGZiMmJiMzccQ29udGVudC1BdXRob3IYZjQwMTE2NTMxMjJ5DkNoYWluSWQENTYMU291cmNlCGF0ZW0UQ29udGVudC1JZIABODZlZmRlYzE1YzM0NDNlNDkxNDIwZDVjMTRmOTFhZDZkYTU1MTRlZjM4Y2JiMzIwODE5MmEwNWI4ZmIyYmIzNwB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwicG9zdFwiLFwiYWRkcmVzc1wiOlwiMHg2ZGIyMjY1ZWNiYjRmNDYxNDNiNmEyNjZiNWUxNDZkMWUyOGM4MjAyXCIsXCJ0c1wiOjE2OTE0NjA2MjIxMDcsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcImY0MDExNjUzMTIyeVwiLFwidGl0bGVcIjpcIjExMTEyXCIsXCJib2R5XCI6XCIyMjIyMjIyMjIyMjIyMjIyMjJcIn0iLCJkaWdlc3QiOiI4NmVmZGVjMTVjMzQ0M2U0OTE0MjBkNWMxNGY5MWFkNmRhNTUxNGVmMzhjYmIzMjA4MTkyYTA1YjhmYjJiYjM3Iiwic2lnbmF0dXJlIjoiMHhmYWY4OGRiODM0MTBhNjk0YzkyZjQ4NGFjMjgwMmJkMjA5MzQ0NjRjYzUyMmQxMmFhNDZkMDI1MmYxMjhiYjI0NzExOGJhNjg3ODk2ODY3NDhjMzFhODZkZDg3MDBjY2RlMDJhZDE4OTRhOTM5NjMxYTE1NzkwM2VmOGY4Y2JjMSIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFSkU2dXlXYUZuZE5KK3FGZmhFVHBxMGNuWUZYTmJPaW01SlB1dGFsY3RLc2RJWEpmRk9QVFdPckF6NlU1ajNVbFdkQytucm9Ed1FTdFRkMWw5dC9OeGc9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4NmRiMjI2NWVjYmI0ZjQ2MTQzYjZhMjY2YjVlMTQ2ZDFlMjhjODIwMiIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDM3NTdiNjkwNjRkM2M0YWQ1MjZhNzc5YjQ5YTI5OTMwYjRmNDljN2E0MWI3YWI0ZTA3NzU2M2FmNTU5NGI3NDI3YTRmMDEwYjNmMjc2NjNhYWIyNTFlNTc4YjE4MTE3YzIzNzI5YjljODU5Mjc2ZjBiMDU2NzcwNDZkOTM4NTFlMWIiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEF0ZW1SZXZpZXcgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUpFNnV5V2FGbmROSitxRmZoRVRwcTBjbllGWE5iT2ltNUpQdXRhbGN0S3NkSVhKZkZPUFRXT3JBejZVNWozVWxXZEMrbnJvRHdRU3RUZDFsOXQvTnhnPT0ifX0BADGpbIdM_2-30REI_Xk9lvYn7ACiaFkgX-nqBv67y_P3n_rhuIpNJztlgdtGCL3QMwoo4kFtWhbTqrKYQVePLItt99PznP32z7DwIdDt_fcpT9VxDjB_Eh3VXZrjyKgEA7nA8901NEI0P-_SWbZIX9s5plxyp-CYGzMiU3D84NGnSo19xZGqZfCVUN63y_VSFrx9tGfgUyaWibT-ywCb67CYxiHdY2b5wjBxt9kbCui_A8Qe_mbrfi_ioy5G7fARNVuHWRWGlL1hrJHgognuuq5kzCBF-N_KR50WMEM7aZIV4MXbESlmucYOz8rGS2OefU_N2ihPhBx05OrVWVqVorIeiL_a3B4dFr_KW5A1jew6Z2c6Wa4tGgYK4B3DixbwG2LfHaMNYxBbP0pF_J39yRkzBQNMYcwYmicWpCZ1mLq0NbCYk2yCZqj-UBLSPTELs5PZthAXClZSuM2YpjOCJzwQf51SKUm4Y0ziYfBmKbXZ7SdtQAMIhtCY3nnoQAxq0VybAGJOu7lIYEUYgE0niiw7pM3xv_YTMOFmOIiEMq2921o6hBvzf1Z_gcdFSlAUXIkusOUCyVEIQ2M1ezPeHCij3DFfWOV6wDdDkQJD4CHyhNNNRC4mr-5N3Dce-zjF5SIozklsVo0p_pbZxlO59vMY5WmMKecCHmeTvF-yW0TtnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAcAAAAAAAAADAEAAAAAAAANkAQYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0HENvbnRlbnQtQXV0aG9yGGRuNjNhN2RhN28zYg5DaGFpbklkBDU2DFNvdXJjZQhhdGVtFENvbnRlbnQtSWSAAWZhMGMzMGMwMDdlNGMzNzY3ZjI1M2Q4MDM3NWIzYjVkMWEwZTE0N2JkZDJmMTc4ZmQxNWRjYWE1ZmJjODVlMGEcQ29udGVudC1EaWdlc3SAAWZhMGMzMGMwMDdlNGMzNzY3ZjI1M2Q4MDM3NWIzYjVkMWEwZTE0N2JkZDJmMTc4ZmQxNWRjYWE1ZmJjODVlMGEAeyJjb250ZW50Ijoie1wib3BcIjpcInBvc3RcIixcImFkZHJlc3NcIjpcIjB4ZDVkOTExNzZkYjFiMjIyOThhMzM0YjljMzMyZmJhMmYzYzNkZjAyYlwiLFwidHNcIjoxNjkxNDYwNjIxMjg5LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJkbjYzYTdkYTdvM2JcIixcInRpdGxlXCI6XCIxMTExMlwiLFwiYm9keVwiOlwiMjIyMjIyMjIyMjIyMjIyMjIyXCJ9IiwiZGlnZXN0IjoiZmEwYzMwYzAwN2U0YzM3NjdmMjUzZDgwMzc1YjNiNWQxYTBlMTQ3YmRkMmYxNzhmZDE1ZGNhYTVmYmM4NWUwYSIsInNpZ25hdHVyZSI6IjB4YzkxYWNmMzU0OTcxYTRkYTEzNjVlY2MzMThhMzIyOTUyMmUyOTI0YmJmZDA5NjRkZWE3OTRlOTdhODUxMzFkODA2NTc4OWYwZjE1Y2QzNzg2ZTIwODBjMGFkZDQyZDA0NjQ1YzM1MTY2YmYyY2UwMjUzZGIwNGYyZmY0ZjM5NDEiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUZxY2FaYW5vcDVnQU5yODRVVlU3ZTZueGRoaHQyNTdoa21qT0hvSE5IOWVvVmltdHRjTVl1VCtsNzJNZDVHNkhlT0ZsNkpmVEJ1bHdHakhSSjNZUklBPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweGQ1ZDkxMTc2ZGIxYjIyMjk4YTMzNGI5YzMzMmZiYTJmM2MzZGYwMmIiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHg3ZjViZmUyZTY4YjFlMTkzMDg4NzA3YjEzYzgwZjdiNTE5YjYwNTMxN2NhYzY0YWU1OGI5ODM0NjU4MzkyOTg0MGQ5ZTA2Y2UzZjFiOTQ2MzlhYjhiZWU2MDE0OTIxZjM1NGM5Zjg0NGM1MjBhNmM2M2ZkYTQ4YTZhYzRjODkyODFiIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBBdGVtUmV2aWV3IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVGcWNhWmFub3A1Z0FOcjg0VVZVN2U2bnhkaGh0MjU3aGttak9Ib0hOSDllb1ZpbXR0Y01ZdVQrbDcyTWQ1RzZIZU9GbDZKZlRCdWx3R2pIUkozWVJJQT09In19AQA04IhtCpwcsr9NDv3QPpwBsRv645gV4bt2UJA5kyTmJ3DxgllCk2wgGWGaNQ7iyaKVpDSnFH5f4PjGiamumA8Hdq32K5f3nW4NGmSHJEOtWMc-2szcTRHn7Txb4JWQ5TmjCximvjBTjbPdgUF0gds5ntd4tYG_kk86fiYkqbW1gxhdXvUSD3g3tKfWE5cVMBg-HG3eAJTMqz_KPGeL1CiLqGp28709FURVQWgGLcARrsN0mxU31O2SLg6izpdIRUE5MJvPxpPFVtUhJ3HwnNZOEanRV9jXrV6tYCONGouMhEwQAKycQDnDI416tH-SnMGXplG-iDr6POEIFXulmfygbuTzwO8MJVynRO0DviXAAbtx_tXjj84FyF74W_7fCuu0aM6N9CH9RriJ_UOlpRw8uFrqRddQs37611P-xwYViRQF5KQLjceZWqpdLqu48K7lH04GdJe-YkPvJQ3atqkqmwwVfe70mbh1GYOrFLdJIGk4zZNMCfeiAnJpApyW3V6xtgTVZ8tkP0b6dhsqbC--cWNwiGbt_wMIB--mkRwb-BAQDXOBQINYqxiJyCMwk_lGAlCKFwQ2QTH8JW468OB3bVZ9g2tbPqgxX4UJDrQW81L6QTrw99nb3tHmMoNkTePCK6gWdcXlAC1snhd75932gcsIe4bgKVXQfkubnGbjI5z4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAIAAAAAAAAAH0BAAAAAAAAD_IFGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdBxDb250ZW50LUF1dGhvchh6dXVwbWtibmVwbnUOQ2hhaW5JZAQ1NhxDb250ZW50LVRhcmdldIABMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZQxTb3VyY2VIMTU1MzFmYTItMTIwNS00ZjYxLWI2ZTQtYzlmNjhlY2Y4MWY3FENvbnRlbnQtSWSAAWMxMWMzYWExMmE2N2MyMjQzNDRiMjRjZDdkYTZkNzRmNDFjYjQ3MzIxNTBjMTM5ODg3NzNhNTU3YmEzNDUzOGEcQ29udGVudC1EaWdlc3SAAWMxMWMzYWExMmE2N2MyMjQzNDRiMjRjZDdkYTZkNzRmNDFjYjQ3MzIxNTBjMTM5ODg3NzNhNTU3YmEzNDUzOGEAeyJjb250ZW50Ijoie1wib3BcIjpcImNvbW1lbnRcIixcImFkZHJlc3NcIjpcIjB4MmQ3ZDhjOWYzMWE4OWQ5MjQ4ZjY2MjkzOTM2N2M4OTY1NzBmZTg0OFwiLFwidHNcIjoxNjkxNDYwNjIxODMwLFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJ6dXVwbWtibmVwbnVcIixcInRhcmdldFwiOlwiMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZVwiLFwidGl0bGVcIjpcIkZsYXBweU1vb25iaXJkXCIsXCJib2R5XCI6XCJTbyBmdW4gdG8gcGxheSBpbiBteSBzcGFyZSB0aW1lLlwifSIsImRpZ2VzdCI6ImMxMWMzYWExMmE2N2MyMjQzNDRiMjRjZDdkYTZkNzRmNDFjYjQ3MzIxNTBjMTM5ODg3NzNhNTU3YmEzNDUzOGEiLCJzaWduYXR1cmUiOiIweDBiNWVlYjc1YTFmZGY4N2MyOWMzOGY4YzM3OTlmYzFkMDk4YmY3NWVkMzU1M2E0NDYxOGJhNjFhNTE5NTU2MzFhYzExZTdjNjgxZWZiMTY0YmFhZjRkYWE0OTU0OTEzOGQyYTIyYmMxNTkzZmFkNmVmNjMyNWM2NzE0OTcwODFhIiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVpazhnRHRHZkdvdXdNbjhIOEZRNDhWSjliQVdnZWd2dmZrZWM1ckJFMFh3cjNJWTR0RGF4U0thUzRQVUpUeUUzYWFlZmVGTm4yVVhaOXBma1luU3cyZz09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHgyZDdkOGM5ZjMxYTg5ZDkyNDhmNjYyOTM5MzY3Yzg5NjU3MGZlODQ4Iiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4MzQ1MGNkZjdmNTIxZDA1ZDk0YTJjY2U1OTA5YTVlNTNjZjI3ZTlhMTBkZDdmNzIyOTcyMjkwZjJjNWY2ODU5ZTBhNmJiNDJlODM5YzBhNzMzNjYzODczNjE0NDUzZmRjNDNhZmVlMTRjZDliYzlkZDlhMTNmNmUxM2VhMTc2NzkxYiIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQ3liZXJDb25uZWN0IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVpazhnRHRHZkdvdXdNbjhIOEZRNDhWSjliQVdnZWd2dmZrZWM1ckJFMFh3cjNJWTR0RGF4U0thUzRQVUpUeUUzYWFlZmVGTm4yVVhaOXBma1luU3cyZz09In19AQBvQmzrBVUPj7955BKIJLeBn2q_DF-fDqv-nVSWmMp5y1KVyPJWkZ07cbci9f4GHvb-YT1xZPCsNKaldhTTKdupKXVQHKqsc_yiaci-unCRqUSUplqp7dP1Vn8tHxtAXgAd1cKUBRndOguJVBZfyS8tHX7ABgybkxETH-hBL_i7he5UMwC8oiXt20WbChKdjyuMXz_EzAc6sFyTxQhDIfIBUYEXbagVk5Fg2JCGkU-dv4u5rO_VBCEMJaW89NIO66VUsgqgJWMDRG6cIEN7RKzP9thVH0Xo3AYPaa2TyaOD3j4d3oXIH7naTYx-uMLBpRsa_faoyFY4vzrzbWBJ4ARhPctQ_xZEe7H3lzHe4UgihrNDLaMN58s20_6UCV458GjhCtLDc0qguOzMuv5rdyJaynQuG6YyDgYdSqVIFL0TmqLytoEGodDbaxl-nBx9-1aXqkv6lVPN9JFWMNCWFtk-kV2JmnmERoFCXFoCBXCPvou5Z8MbUFX_zAyrRoTjfWipCSdDjb9glWsC5IDYDtltxEGT74CQXGjRZEjsTMqYrFi-DFPBc0pYjtfsaMuHiYYhvUqB94dmIi-umumcxxxBiwm0qVtbW2h18B4a_aP9qWPWAMjIS2UpuhLc4ZqZaesUdIxgMU7H8AM31ivqLjBn_uEKjIY7hJ4L6l5VM33Knpz4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAHAAAAAAAAAAwBAAAAAAAADZAEGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdBRDb250ZW50LUlkgAExYmIxNDFmMTIxNTYxNjkxYTZkMjFlZGIxZmMxMDhkY2U2OTYwZjFiODQ4MTczZTIxZTU1MmI2ODVmYTA4NGRkHENvbnRlbnQtRGlnZXN0gAExYmIxNDFmMTIxNTYxNjkxYTZkMjFlZGIxZmMxMDhkY2U2OTYwZjFiODQ4MTczZTIxZTU1MmI2ODVmYTA4NGRkHENvbnRlbnQtQXV0aG9yGDkxaWRvcm54dmZnMw5DaGFpbklkBDU2DFNvdXJjZQhhdGVtAHsiY29udGVudCI6IntcIm9wXCI6XCJwb3N0XCIsXCJhZGRyZXNzXCI6XCIweDZmNGE5Mjk5OWJhZDc0OWY5MWZlMzJhNjIyYjhlM2VmNDE2MzY3MDVcIixcInRzXCI6MTY5MTQ2MDYyMTE4MSxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiOTFpZG9ybnh2ZmczXCIsXCJ0aXRsZVwiOlwiMTExMTJcIixcImJvZHlcIjpcIjIyMjIyMjIyMjIyMjIyMjIyMlwifSIsImRpZ2VzdCI6IjFiYjE0MWYxMjE1NjE2OTFhNmQyMWVkYjFmYzEwOGRjZTY5NjBmMWI4NDgxNzNlMjFlNTUyYjY4NWZhMDg0ZGQiLCJzaWduYXR1cmUiOiIweGYxOWEzOGVhNjdjNDkyNGIyMmNjNGI5NzZmNmM2N2YxNzkzOWU4OTJkZDZlMTg1NzhmNGQwMDNhMDgxYWEwMWY4MjE0ZmNiOTdmZDYyOGNmNGViY2RlYTY2ZDAwNzAxNjcwZTE1YjVjZWM3NzhlODg5MzcwMmQ0MTRiNTliNGMzIiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVPSHRZYnQrSlEwUEJRTHN6UXR6Sy8yd1d6UVVLZU15K3Q1YjV0eDExZ2RaMmFYOWY5VmVGdTU3YThXT2prblo0V21lNWpLUnpvUEVsZkNPNXJYamVUZz09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHg2ZjRhOTI5OTliYWQ3NDlmOTFmZTMyYTYyMmI4ZTNlZjQxNjM2NzA1Iiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4MTZlMTk2ZDZjYTMzMTIzNjRlNmJmYWQ5ODE3YWJjN2QzNGNkZGZmZTExZTgyZTI4NWI2ZWIxYzY0Y2Q4ZmQ5ZDA5NjdjNmU5YTA5YWNjZTI1NjJmZWJkOTMzOTdlNjkwN2E2MTJjODhlOTlhNzhmOTVmMDJjNTMzYzhkOTVhMDYxYyIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQXRlbVJldmlldyBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFT0h0WWJ0K0pRMFBCUUxzelF0eksvMndXelFVS2VNeSt0NWI1dHgxMWdkWjJhWDlmOVZlRnU1N2E4V09qa25aNFdtZTVqS1J6b1BFbGZDTzVyWGplVGc9PSJ9fQEAWmE1dz2m44BrQVKODIvQ3Dg0u7gN7UshnsvDcMoJYNzoO7f9Kijk28TcgpZNTpYxR1F64KE6UApvRfMJ4PAjhSuK-ajCq27yzRyx1BBiYMsy1Da9dOKjy9-n4t7Q5EjGaKp_ukfzsgT_BCWJVpy6PkitBIwbUza9ofdg3HyUDZExxGitFzBf1CpO98xOwp0PddglKMDFijzdPbaYVkg-lCKnSEVWKrPFbqNswusS6OkwPi8aFEy3nJM52445HWmB2jtCfnNaX4e_fD1v8ObXZaX8-iobqNrKVKWIwH_413M9vhc-HP1rguFYy9g9yU2mZA-bCAqYJCVXa705u8qkey-6ZvJTqhhGBW9SrE7ahvL6TEzTqVK_zrfDCWY4Y5WFFOM_TLo5ot-kzp2Cxx-ZRmrK-sW5Hi5RgJpZ0lHbkhPLbqtyX5DFM03Ri5JGmRs3LCGAc9tB2Npk3haOteqLhND_JYeFPgEuYbSxj3YuhtNrglIixSboWLK3Ch-XKxU_cyDrfn5s79_QdHtjyoz-TVW_0RAeqw2Ckcu_TY_iL-h5c_MVSMBgXuvZVPMe8BP395D7OzkjRdZ-IBWkmIvUaItvNf19iVxmxqayt6tDAO1oSEzj0WZKNWcQkDRHAVHWeLLhlmHTVA02SrJojTtnhREMJvkiYy8dHF51XHorFn-c-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAABwAAAAAAAAANAQAAAAAAAA2SBBhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QUQ29udGVudC1JZIABOWEzNTc5ZTA4MTZmNmNiOTczNGY5ODEzZWRlZTIyN2VmYzE0YmE5NTNkYWE0NDNjZTJhYjdlOTcwMmYxMjY3OBxDb250ZW50LURpZ2VzdIABOWEzNTc5ZTA4MTZmNmNiOTczNGY5ODEzZWRlZTIyN2VmYzE0YmE5NTNkYWE0NDNjZTJhYjdlOTcwMmYxMjY3OBxDb250ZW50LUF1dGhvchoxMTMyODYzMDEzOTYxDkNoYWluSWQENTYMU291cmNlCGF0ZW0AeyJjb250ZW50Ijoie1wib3BcIjpcInBvc3RcIixcImFkZHJlc3NcIjpcIjB4NWFmMWRmMGNhMTA3OGI5MmJjYTA3NDg1NjEwNjE4YTcwYTI5NzRlMFwiLFwidHNcIjoxNjkxNDYwNjIyMzAzLFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCIxMTMyODYzMDEzOTYxXCIsXCJ0aXRsZVwiOlwiMTExMTJcIixcImJvZHlcIjpcIjIyMjIyMjIyMjIyMjIyMjIyMlwifSIsImRpZ2VzdCI6IjlhMzU3OWUwODE2ZjZjYjk3MzRmOTgxM2VkZWUyMjdlZmMxNGJhOTUzZGFhNDQzY2UyYWI3ZTk3MDJmMTI2NzgiLCJzaWduYXR1cmUiOiIweGU4OTgwODIwYWQ4NzJhYWMwMmE0MGJmNjY2OWIxZWE0NjMzYmZiY2VlZGM5ZTFlZjlmN2QwZTIwMzZjZjVhNDUyNWVjZTY4Mjg1NDQ1ZWU4ODFiZGQxODQ0OGQyY2FhODRlZTAwMjA5Y2Y1ZjMwZjQ3MmViMTQyNmRhOWE1MWEwIiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUU1bFZkZU90N1o1VVlQaXY3QkJwVVZtMXExS0pVZUd1aVZBOWpKZTRWTzBhYUUwV3dSNDhNRHlyWWxKUjJsTWpJT1A2V1JOdzR5Wlc0dHBvaFBqcnVCQT09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHg1YWYxZGYwY2ExMDc4YjkyYmNhMDc0ODU2MTA2MThhNzBhMjk3NGUwIiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4MGU2YzhiMWM3YThkYWNjY2Q5OTU1YzkyODg3MzlmM2JmZDRmNDJlZTBlMGExMGRlOTFhYjllZGNjMTQzMTg4NTNmZTQ3N2MxZGNiZWM2MDM2NTQwMmRlZjUwOTMyZGJjMmE4MWFmNDg0YWQ2NDJkNWFkODRkMGU0MjRmNDUyYmExYyIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQXRlbVJldmlldyBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFNWxWZGVPdDdaNVVZUGl2N0JCcFVWbTFxMUtKVWVHdWlWQTlqSmU0Vk8wYWFFMFd3UjQ4TUR5cllsSlIybE1qSU9QNldSTnc0eVpXNHRwb2hQanJ1QkE9PSJ9fQEAAreUb4_33w2BnhKS4WGiaAQTaki3RzwB_TKJ8hrPXD3GM6JbHTQtqEacgmaaYmA2HyU5TzpYF-K10WQLXoOUVFTNmr09cIlcJV4ztKaVf0rvbT6dGUgukCuEC_qmgoHAWdYukmgscsOgG3_D8_zRgeVoa-p6MA_E5L1bsS_08RqyxMM79LZtDpTWMIhB_YUOh_d6iXnf1odDgJIB7X9AK_irRdOQ-N-RcQ1ZNpQ9zoODWcdzOTdL_t502ckExEaZXAtPk0WqoD7P6ikF88THg9MJXnPOjSvS4XGBi9UHethJJ7uaAXVg6G9qY6yyhfBNZgUVPQF0OQ1JcSageG7HN3LsgEbNLsNbnw9eRtflhFtxn8T-5UXDh-TJyq4DQepDLCDF6NbhVSsWK6x8O_Jv9G0XUyaf70Cq5aIg5J-QFbLUPAq_q1akP_DSMloSDldrB6fd033bVEyxzXJBqEaGR-Du2Xchhd4tC9orlDFQ73YBgeKZZJ359VzB7gk_F8_dN-XiaquouJY1M0M9akUxS02JQKn3zbvK47X5HWXW53goSKxLIw62lVH_LKckez0cJWTqAcyzsW4T0YAp3yEzYV5qEEXnN0qfIbWy6Q5phaQmfsMCckMC1UR_uecislRkZPg04jZlGbvnrS0PmCKZreXNwVcB7BdGxWmqdd1WaDuc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAABwAAAAAAAAAMAQAAAAAAAA2QBBhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QcQ29udGVudC1EaWdlc3SAAWRlZDc0ZTFkNjlmZDAyMjc5YWQzYjdiZGJhZGNiNDhlMWVkY2ExYWE2OGE4ZjBiOWM2ZTBhOGRhYzZhZGJlY2EcQ29udGVudC1BdXRob3IYNWkzYTU2c2Y2OTY0DkNoYWluSWQENTYMU291cmNlCGF0ZW0UQ29udGVudC1JZIABZGVkNzRlMWQ2OWZkMDIyNzlhZDNiN2JkYmFkY2I0OGUxZWRjYTFhYTY4YThmMGI5YzZlMGE4ZGFjNmFkYmVjYQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwicG9zdFwiLFwiYWRkcmVzc1wiOlwiMHg2NzczNmIyOTBhYWViNWYzNTc2ZjlhMmRlYWM2MGE1ZTZmOGVkZTYwXCIsXCJ0c1wiOjE2OTE0NjA2MjEzMjUsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcIjVpM2E1NnNmNjk2NFwiLFwidGl0bGVcIjpcIjExMTEyXCIsXCJib2R5XCI6XCIyMjIyMjIyMjIyMjIyMjIyMjJcIn0iLCJkaWdlc3QiOiJkZWQ3NGUxZDY5ZmQwMjI3OWFkM2I3YmRiYWRjYjQ4ZTFlZGNhMWFhNjhhOGYwYjljNmUwYThkYWM2YWRiZWNhIiwic2lnbmF0dXJlIjoiMHgzYzFiMWVmNjVmYWFjYWU2MzczYWUzMzU4YzA0MTAyYTJmOTU3NTViM2VkOWI2MWFkMmVlNDUyNWVkMTc5YWJkYmZiOTJkMTE0ZWVhNmJlYzY2N2Q2OTdiMGYxNjc3ZThlZjBlZThmMTI2N2UxODBiMzA3YzUzNDE3YTM2YjBiMyIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFRTVMdDdHSCtmOUFlVmlaSmZTZzM0U2NLREpmL0FQWGE1amtkZmxGU3l0VGRPeWJnVWRNUC9lcnEvZnlmTXBrL1BsTzBqTWtBVkFZTjhjazR6UWxweGc9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4Njc3MzZiMjkwYWFlYjVmMzU3NmY5YTJkZWFjNjBhNWU2ZjhlZGU2MCIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDdiNWIzMTM1ZjRkOWY1NWJiN2NjNzZkZGZjN2JjYThlZTk3MGYzZDUwNzRmMmFlNjBhZTBhZjcxNmE4NWNhZTU1MDllMzEzOTk3NTYxOTNjNjQ5NDI5ZGYzZjA1YTAzODNjZDY1ODA1MDk1MDcwZDkxM2Q2NDAxMTRjMTk2ZTg1MWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEF0ZW1SZXZpZXcgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUU1THQ3R0grZjlBZVZpWkpmU2czNFNjS0RKZi9BUFhhNWprZGZsRlN5dFRkT3liZ1VkTVAvZXJxL2Z5Zk1way9QbE8wak1rQVZBWU44Y2s0elFscHhnPT0ifX0BAJuDE8ohPRYf22tot4js92LN2wHw7-UmDeyHerzQbVrBKAGwqrvcLGwEEw1L_5p8FN39a3qt_J2pZ_4qCqA6vPZ7rHRqVlQXVvql3Gp2fPc5x0pDOPanzI8mtwMckII5Szfz18byyUwd9zNvhl7IY8_CEE34sBzKhGXw3j_Zz6T1QGa16ZLsgBMVMyETqxW1v_2gQjFRUzdKfLVUjHb9KE5mgnIXPBRqBe3mcZ37DuhoJpM2Spp2DeDVvdQc3LwfBap8tvfGuJY2X8bjNImUq4gYcMILU9-JRMvYlobuJJeDal7SnUhZHu_3u18P8CkmxMb7BrhEUs25g4IJsffZhPwLnh6UFo3Z1QkKvZsTC6eGqYi5WhAlLhNuezYpExHeyXFf1hz6Tu0VTw47BHarIcmzWvJLq_DXqRdYtM15L5Mf7I-sKOK1FRck5QYno_Is_j-lv09lsiSn8LOeN-vXJD-vgd-8DCRpDMVfrzLxnc677q2y_ghIZiJ0h6hAo6ALAeEU1hqF0tFd0vbz5YnnzShljhtHuf-NBgWW6_KmhPmUXv4gausxAfI5AeiqwKHgUK9NQgIzi1k252BjE88_q8NJeDetpAf7pOLgHPteMFQ2AtqsPpKb3WSV2UyqICTFxXmovpDMHSjWhCuPflFt4Ctlc-HBBMwnVZB3-l0t3k1lnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAgwEAAAAAAAAP_gUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0HENvbnRlbnQtRGlnZXN0gAE2YWZlNmVjY2MxOTQ3OWRlZmY5YzAyNDdhMDdhMzRhMmQwM2NiYWRlNWRmZWRkZmE0YjgxYTU3ZDZkYTg0NzU2HENvbnRlbnQtQXV0aG9yJGdvbGRpZWFtZXRoeXN0eGJweg5DaGFpbklkBDU2HENvbnRlbnQtVGFyZ2V0gAEzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlDFNvdXJjZUgxNTUzMWZhMi0xMjA1LTRmNjEtYjZlNC1jOWY2OGVjZjgxZjcUQ29udGVudC1JZIABNmFmZTZlY2NjMTk0NzlkZWZmOWMwMjQ3YTA3YTM0YTJkMDNjYmFkZTVkZmVkZGZhNGI4MWE1N2Q2ZGE4NDc1NgB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwiY29tbWVudFwiLFwiYWRkcmVzc1wiOlwiMHg4NDY0MzE1YzliNjYwMDM2NGM4YWZlNjE0NTY0ZGJiOTBiMDdiM2VmXCIsXCJ0c1wiOjE2OTE0NjA2MjIwMTEsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcImdvbGRpZWFtZXRoeXN0eGJwelwiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIkFoYSBzbyBwcm91bmQgb2YgbXlzZWxmLiBJIGdvdCAxMDMgcG9pbnRzLlwifSIsImRpZ2VzdCI6IjZhZmU2ZWNjYzE5NDc5ZGVmZjljMDI0N2EwN2EzNGEyZDAzY2JhZGU1ZGZlZGRmYTRiODFhNTdkNmRhODQ3NTYiLCJzaWduYXR1cmUiOiIweDc5OTQwOGI1YTk1YjBjZTZhOWYxNWVmMjE2NDJmYmQxZjFjMjMxNzhhOGMzNjk5YzM0NmM0NzY4ZTE4YTBhY2RjNGNhZmEwOWZkMGQ4MTczNmY0MmY5ZGEwNGFhNTJjYWQzZDI0YzlmNjA1MzE2ZmEwNDBiMTZiMmE4ZGRhZGY2Iiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUwZEQ2Y0t0Q2Mrb2xYWDZRTVIwZEltNWtzcHkrVjFTME5wYUtQdEFvYWRSdWNiV1RDa2p4aUpJcTR1MWdyams1ODFQcnRsQldST1FYUk5oVnZzakJhQT09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHg4NDY0MzE1YzliNjYwMDM2NGM4YWZlNjE0NTY0ZGJiOTBiMDdiM2VmIiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4MTFkOWNhYTU4YWFhMGE3ZTI3NjZjMTE3ODNiZGFhZDdkYTY5MjMxNjMxY2E0MzI0YjRkNjEyMzc5OThhZjE2NjNlYmViZTU1MTA3ZThhYzg3MjUyNWQ0N2I3MzEzZGI5ZTA4NjNkYjgwODdkODA1ZjFkNWI2ZDA3ZTNjYzQxOWMxYyIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQ3liZXJDb25uZWN0IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUwZEQ2Y0t0Q2Mrb2xYWDZRTVIwZEltNWtzcHkrVjFTME5wYUtQdEFvYWRSdWNiV1RDa2p4aUpJcTR1MWdyams1ODFQcnRsQldST1FYUk5oVnZzakJhQT09In19AQBS_H_OqleNQKN_2ngp1IDmPY2_gqjJxfVqhxJW-hIkT1vQgb2IkLCgm8bY-7RhnMIbHA0AI65MrIt5keAEvEHwdtpT-daICN8jaHck4j-2QsXZC9TyzwewPBYbiCmazudbXkmF2sqeSqBnlFZ9SgWqxRohTscpgASMDzVXeQjAm7_tIV0ZXlI_bN7PmCG0ReH3BaooRC5fW2B-Aw8nThXwZzBwti6kT1epnPPYvJ5tNaJw0eOq41BbP5DOitGKg9702wzDcKOpuA39qEqEZ0d5mHwgT3L4fVnskCw1W4_VK-i7mVww6Gft5Au-_oz0xEO8urb_yEMaFiQBSlksVF6uAqux_dqLG4fL8g7S8CCvDNpuF4yTvPiCfjQ7VZzmuMkZ11Tt_xe8n_3ptvFubGHzeUdrZXmSbk8y_75xmuYZPn2XS6z6GyG1CqrOIolCStwzGyC8UJlOq_l-ERyeWB4aS4EDx6IEljJjlqugb4X76DtqhnWb52UEVzInKJHZayxOo_3UaGUfPOYQUPgsvRBJZfaS6A9ArO1kSYhVnVMMQGxriIpfmqOQ4-hkVphrJRMC5soqRJrGLCtk_RGPeMag1tiHMUr45-2hett3L61fUuxeycp6XcVgmOF8a47scfqlhlOTPlT99pqJ3T9W0g3BwCeWLkXPx-aRPXLiBwqyHJz4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAHAAAAAAAAAAwBAAAAAAAADZAEGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdBRDb250ZW50LUlkgAFhZmZjNjNhZDQ4MjQxNDc2MThkODRlYzJlMTI1YTE4ZDAwN2JmNjQ4NWQ4ZjZjMGFlZDcyYTczM2U1MGYzMDE0HENvbnRlbnQtRGlnZXN0gAFhZmZjNjNhZDQ4MjQxNDc2MThkODRlYzJlMTI1YTE4ZDAwN2JmNjQ4NWQ4ZjZjMGFlZDcyYTczM2U1MGYzMDE0HENvbnRlbnQtQXV0aG9yGHcwODg4NTE2MDYzdA5DaGFpbklkBDU2DFNvdXJjZQhhdGVtAHsiY29udGVudCI6IntcIm9wXCI6XCJwb3N0XCIsXCJhZGRyZXNzXCI6XCIweGM1ZWRkOWJiNjQ3ZmQ2NjI0OWZlZWEwNjYwZjUwZmUzOGIxOWUzYmVcIixcInRzXCI6MTY5MTQ2MDYyMjM5OSxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwidzA4ODg1MTYwNjN0XCIsXCJ0aXRsZVwiOlwiMTExMTJcIixcImJvZHlcIjpcIjIyMjIyMjIyMjIyMjIyMjIyMlwifSIsImRpZ2VzdCI6ImFmZmM2M2FkNDgyNDE0NzYxOGQ4NGVjMmUxMjVhMThkMDA3YmY2NDg1ZDhmNmMwYWVkNzJhNzMzZTUwZjMwMTQiLCJzaWduYXR1cmUiOiIweDI1NTUxNTg3MjFjODQwNDBjNjA0N2Q1NjEzMTI2NjlmMDYxYzk3NjhiMzY0YWMxMjE2NzY0MDNlMDAyODY4M2IyYTlkYjJjOTJhZGNlNDYwMzc3NjU5YmMxMDg2ODg2ZDNkZjM3YWU5OTY4OTFlNjBhYjgwN2U2NGQyMjU0YzJmIiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVDbkJqQXEzam9wd1NmMDVUNFdOaitiaE9aTnJFUVh3ZWF3S2xsYlZTcmhKZmtXL1NwbERob0FzSzZkMnl1aUo0dlA4QVBWc3FkcnM0QXRlYXhrUEdaZz09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHhjNWVkZDliYjY0N2ZkNjYyNDlmZWVhMDY2MGY1MGZlMzhiMTllM2JlIiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4MmY1MTFhMTcyYjMyMjE2OGQyZTFjNTA0MjhjNWEwODEzMmRkM2NlMjExMDIxNTllMGEwNWZkZjA1Y2JiM2ZjODQxZDVlMDdhNjg0ZDhhYTU3ZDM5NGYxY2U2ZWRlYTE1MzBhOTg3MWQ1YmRhMWQyNmIyNTliZDNkZDU2ZDU2NDgxYyIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQXRlbVJldmlldyBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQ25CakFxM2pvcHdTZjA1VDRXTmorYmhPWk5yRVFYd2Vhd0tsbGJWU3JoSmZrVy9TcGxEaG9Bc0s2ZDJ5dWlKNHZQOEFQVnNxZHJzNEF0ZWF4a1BHWmc9PSJ9fQEAfgBkiH5vPdZ0r65E2Oi7kDKq9LDY7sRJ0NNDQnKor7df0WPnjpRcpkzMJKOn9jiPLn46lD6Se4C2bgsxPvDtohUpZ0Aszwwog11vaJkW7cCggd3idbT9xCT3vBXDR_fRA1rWc7hE_TOxYnaldJhgxZrcP5zJdO2TN6LPBoOiSqN51RAzj1-5r_GhynU_GdYt2FB2aojvklQSqUJKFR8DjUR7XjrACtTmQLPhBtavmJRB04jPktskCuhEApwJXAidVmwtB36fHgeKfdqkD3jyxkS0s0ZHPtcoozn9K7wt3isYgN22QEg_KwOqTaBCMFHB_d3Q6xmK0Hj7ZE9YxF9ql0rrf5fyp_u6JO3Q4iG-9WBKxG2sa4L4Gf9ImrlQNEjb_W0eqbBAxPKVo0yj7yxXfepp2RPu2hbBJJ1AICuUoZcjOmqRLM4aSfOMn-3LnnmiTBAX95kZbIwdw-C3rha2jRXmt9EAM1TXy-jbAb0j3kvVAfNP_6lYxIpHqZYb1bI90X2763WmWmmWGTbRdt4nlwWsFX0F0owZE7_ppGANwsLqLWcw0_K5w0zIrTcPFCh6CcqHgeeLoPz9ERIO1-zex28kw5JNS_LQ844sS0UlWvb95-cxnfN2CZAR-xKp9M_9GXDStYwqNXhGs6HFos26-GFmx8N4ju0goid2QGjto8ic-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAABwAAAAAAAAAWAQAAAAAAAA2kBBhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QOQ2hhaW5JZAQ1NgxTb3VyY2USY3liZXJ0dW5lFENvbnRlbnQtSWSAATU2ZWRiZGIzNjU4ZTE4Y2VkMjM1OGMxZTUyZWRiOGQ2M2Q0NTRmODJmMTAyZDEyYmFiYTllYWMwNGQwMjUxYjEcQ29udGVudC1EaWdlc3SAATU2ZWRiZGIzNjU4ZTE4Y2VkMjM1OGMxZTUyZWRiOGQ2M2Q0NTRmODJmMTAyZDEyYmFiYTllYWMwNGQwMjUxYjEcQ29udGVudC1BdXRob3Iic290eXlheXhmd3Vua2drNDYAeyJjb250ZW50Ijoie1wib3BcIjpcInBvc3RcIixcImFkZHJlc3NcIjpcIjB4NjI1YTExNzFmZGMyOGM4MzY4YWEzYzlmMWVhNGYwNTQ5YzVjNDhlMlwiLFwidHNcIjoxNjkxNDYwNjIyNTQ5LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJzb3R5eWF5eGZ3dW5rZ2s0NlwiLFwidGl0bGVcIjpcIlRoZSBTZWNyZXQgb2YgdGhlIEZvcmJpZGRlbiBUb21iXCIsXCJib2R5XCI6XCJzdXBcIn0iLCJkaWdlc3QiOiI1NmVkYmRiMzY1OGUxOGNlZDIzNThjMWU1MmVkYjhkNjNkNDU0ZjgyZjEwMmQxMmJhYmE5ZWFjMDRkMDI1MWIxIiwic2lnbmF0dXJlIjoiMHhhODY4MGY2NzUxMGZkMWE3ZGE3YmRjNDAyM2E2M2EyNmY1MTA2YjI4NzcyYTUwZDEyN2IzZDI2OWMxN2JjZWY1ZjMxYzU1NTBiMDk0YTdjOGU4M2FhMGM3NTEzOGRhYWNkNTcwMjNiYzE0MjJiMTkzNjA1NDE4MTk3YWVlZjcxYSIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFYXRYKzE3NnJQN0hUZC9ncEx2Sk9tTmV4SHJXKys2TnoybXJFKy9oZW05Z3dmdDZWZU11N2pXY1FWMmpDVENaYkJTWDF4ZGxFNlYxVjdaY0ZwQ1hOTVE9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4NjI1YTExNzFmZGMyOGM4MzY4YWEzYzlmMWVhNGYwNTQ5YzVjNDhlMiIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDBhNjk5OWIxMTY3OTBlZGE5YjIyNDQ2MzAxYmUwMDFmYWEzNmZmNzE1OGQ4ZDM4MTYxZmIxOGVlYzMxYTM4MTk0OTFmNWRlOTkyNzk0Yjg2Mjc2YjQ1NzE0ZDRmNDlhMDRjZjViZWIwMWY2NTE1OWJiNmUxYTQxYmRiZGVkNDY1MWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEkgYXV0aG9yaXplIEN5YmVyVHVuZS54eXogZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRWF0WCsxNzZyUDdIVGQvZ3BMdkpPbU5leEhyVysrNk56Mm1yRSsvaGVtOWd3ZnQ2VmVNdTdqV2NRVjJqQ1RDWmJCU1gxeGRsRTZWMVY3WmNGcENYTk1RPT0ifX0BADTtF4JW4WWZVrUqxmaofJDVsxjpw509k_eqB28Zp8v4VUAkOBZ6bsN4WDOKYKWUlE2h1HQbm_YuSncTNONSeKxmLAH-4ywoMgJcDemwb6iXL9PgXy_5NxUbN14geaqN2T5CWPo9Sim6mjO3NLwostccYjkvNKpfY-KfU7fLd8sFA9Y1WZKsohUMB-Exn-zYbMQYL5_A7ue34jVhHTzmXXbM2fa-2Aak0mgUpC-fNtTXf-5_vgmVOLPLgflm1yJgXj-XfzM4iWogpBhoX6l40fcmReMXCwmtGeHWEISETDAO5kDUav10EwGuMKZs6prVfRq7v1WSGXygbv1Yr7oFcAizfGqKcuniO1p5-kAm6NzeIFEFhDV4rUeMrZ5HXhoKdH9FdJ94eQvp2hiNDTVQ4mBvzfz70Zj_cYJ-s-dG9gYEis_PheHGxN9GY8BnL9824lELZTsVjHYdTjb2gQ6siV7rcIXBXp9V_jAMYLDD-lMBCPbmkkI3EK1wGCWf3cTtg5BbESQedxYW-GO3TyKnhYe-wN0crCLog_eDxW3CH_CMhqUnKLMMp7GKPz-IAiLJROYjHaPhIz-ceyb6BKr9PDTxVELYhGSevUn7ffna86MLhqlTvUm-lzaVmfZzlZY07-RiLICS1mPODIq1mCvTFXWEODpnbqzRm3ZqPyEYwA-cnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAcAAAAAAAAADAEAAAAAAAANkAQYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0FENvbnRlbnQtSWSAAWNkYmMzZmU2ZTNlODFjZmI0OGNmZmJlODNlYTQ4MGRkOTU3NzllMDEyNGYwMTBmNTEzODg3NTlkYThjZDk3ZDccQ29udGVudC1EaWdlc3SAAWNkYmMzZmU2ZTNlODFjZmI0OGNmZmJlODNlYTQ4MGRkOTU3NzllMDEyNGYwMTBmNTEzODg3NTlkYThjZDk3ZDccQ29udGVudC1BdXRob3IYbWg4bHZramwzYjU2DkNoYWluSWQENTYMU291cmNlCGF0ZW0AeyJjb250ZW50Ijoie1wib3BcIjpcInBvc3RcIixcImFkZHJlc3NcIjpcIjB4MDBmYjdiY2Y0MWU5Yjc0NTBlNDFlMmIwMmQxNTNjNTA4MzNhYjkzOFwiLFwidHNcIjoxNjkxNDYwNjIxODAwLFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJtaDhsdmtqbDNiNTZcIixcInRpdGxlXCI6XCIxMTExMlwiLFwiYm9keVwiOlwiMjIyMjIyMjIyMjIyMjIyMjIyXCJ9IiwiZGlnZXN0IjoiY2RiYzNmZTZlM2U4MWNmYjQ4Y2ZmYmU4M2VhNDgwZGQ5NTc3OWUwMTI0ZjAxMGY1MTM4ODc1OWRhOGNkOTdkNyIsInNpZ25hdHVyZSI6IjB4YWNmNTVkNzk5N2Q0MWVmYWI1ZTQ3MGJkYTZkOGExNjc2M2FjZDEwNmRlOWIyM2JhNmEzZTAwMTUxMTBiMTEzOWVmMDYzZDBlODEwNmYxZjMwNWViMDJlYjVlMGVmZDVmMTY0M2VhMDg5Mjg2MWU1M2IzMjZkYmEzM2QzMTA4NzciLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRU1vZExzTy85cHUraytOb1lCYS81bnZGQlF5c2JBV2NvVVVPWXZpNGJHMlo5S2I5SjQrZmgxUGZPWjZYNFVlWFBCZ2svYVl1Q0JKUzNNOFVBbDEvNy9RPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDAwZmI3YmNmNDFlOWI3NDUwZTQxZTJiMDJkMTUzYzUwODMzYWI5MzgiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHg2MGE1MmI4YmY2YjRkYTYwY2JmNjA2ODcyYWZhNDMwZGNjNDgwZmE2ZjFhMmYxMjdhZDMyYTcxN2U4M2ExNzUxMjYwZDI4MTExNjRhNGUzYzdjZjFkMDBjMWQ3Y2ZiZGU3NzJkMjk5NWUyMjFhNjMwOGFjMjBmY2JjOTllZWYzMzFiIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBBdGVtUmV2aWV3IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVNb2RMc08vOXB1K2srTm9ZQmEvNW52RkJReXNiQVdjb1VVT1l2aTRiRzJaOUtiOUo0K2ZoMVBmT1o2WDRVZVhQQmdrL2FZdUNCSlMzTThVQWwxLzcvUT09In19AQAS019IaA08jnUGMaEWPqnIBInz8ezT5YHuP1DBkZM8J0Jv-O3zRAQffVzHViIwVwgtofT3B1GRI_8rkdQ_NZQj6JA31863_MK9j2xTgNS4tXWt-d9mnb2VFtpCUkyDvuoHbyEItE8L281jvg2ZfPxnmuYjj5gT6zK9MRNKMsPgziUJA61e1_nDdoWiyTiESG6_RltrKhdx0X0hJggEj_LkhJ9ZYECtsDBVhbWrZiAiacbX7UJ0a08aUNDTIKYcXP6X_Qq4Hf318_pHFvxxb7izNeAwbCLP8-AnZQNdV1_sI7J3iol5EHujHeSet9RvNGF9s4QjDlipeGP0p4dZo1TFXlil7_ptobS6MSIG3WU1rnkdK37kuCVZglBnEtPz67f4w3koxKBUTjP0JU8RLMi1o5G_R5vFooYHPTT7PCfXLBhmRzAQTbB7R4Z5_BkjA5FHY_NzLZ3I7CMeIDc_W4nmUcshsqK2K2m9ONwGLIqyvtMH-op2dhLZUrtwl0Sq-3mKBXaXOhiH7yQlN9pfOwut2nBc5wAYN_fYDSH9cM7uFhoiB3kVWPT0TKSWn_QzBAhFHc7rFodk2jdSB6u1BKqAVUDkaM6k4Hq04NzfUerPIUsKeYPFUGSdCsJxGbvpGP86R_H26_xRK42hv24S73SPavAmQBI3FWtfC3cWd7mkapz4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAHAAAAAAAAABYBAAAAAAAADaQEGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdBRDb250ZW50LUlkgAE5MjI3ZjBhNzMxMWRhNTg0NjU5NmQwMjlmOThlZmVhODcyMTRjN2U3ZjcwMmMzOWJhN2FhZDVmODMyYTE1NWRjHENvbnRlbnQtRGlnZXN0gAE5MjI3ZjBhNzMxMWRhNTg0NjU5NmQwMjlmOThlZmVhODcyMTRjN2U3ZjcwMmMzOWJhN2FhZDVmODMyYTE1NWRjHENvbnRlbnQtQXV0aG9yImxtaWtycGhna3VtZHFhZjU2DkNoYWluSWQENTYMU291cmNlEmN5YmVydHVuZQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwicG9zdFwiLFwiYWRkcmVzc1wiOlwiMHhhNDQyMDg5YmM5YWM2NjEyOThkZmQ2ZWY3ZTQ1ZjExMWI2ZWQ3ODBiXCIsXCJ0c1wiOjE2OTE0NjA2MjI2NzcsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcImxtaWtycGhna3VtZHFhZjU2XCIsXCJ0aXRsZVwiOlwiVGhlIEN1cnNlIG9mIHRoZSBNdW1teSdzIFRvbWJcIixcImJvZHlcIjpcIk5pY2VcIn0iLCJkaWdlc3QiOiI5MjI3ZjBhNzMxMWRhNTg0NjU5NmQwMjlmOThlZmVhODcyMTRjN2U3ZjcwMmMzOWJhN2FhZDVmODMyYTE1NWRjIiwic2lnbmF0dXJlIjoiMHhmNGE3OGJlOTkyODViOWNmNDAxZTQ4YTg3ODAzZTgzNmYxZWVkZjE3MTFjNzhkNTZkN2Y2Mjg1NjEyNTZhNTM3NmYxZDg3MjhlOTdiYmJmMzY4ZmJkYjU1OTY5ZDNmYmM2ZTlhZGJhNTA5YmM2YWEwNTE3ZTdiZDRjMzViZTE2YyIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFL2FvTnR1N3RyOGd6YnlJaEFHcEJSUUlIRHhPL0pSSGpzWWxON1R4NDRiWmhrekpSZGRJLzhRUW0vY3Z5eU5rOTJoTlhEUXNTRGJsckF6dUxLTEhRdlE9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4YTQ0MjA4OWJjOWFjNjYxMjk4ZGZkNmVmN2U0NWYxMTFiNmVkNzgwYiIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDY4ZDRhNzYyMjA4Y2RhYTQxZmI3NmQ5YWU5ZjJmZmYyNzBhMzJjZjExZTE4YjA2OWI5NWQ5ZWQ5MzVkYmVjYzY1NDY5M2VlZmIyODFhNTg0YmYwZDk5ODRhMWQwN2FhOGY3YWRhNmU4MmQ2NzFkOWRkNmYwOGIyN2IyMWNjNmI1MWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEkgYXV0aG9yaXplIEN5YmVyVHVuZS54eXogZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRS9hb050dTd0cjhnemJ5SWhBR3BCUlFJSER4Ty9KUkhqc1lsTjdUeDQ0Ylpoa3pKUmRkSS84UVFtL2N2eXlOazkyaE5YRFFzU0RibHJBenVMS0xIUXZRPT0ifX0BAJShKIe12HCpdswlJ8x2C6x-jmn4qjA6ERYc_ZfgXFhWKatqzqTjPJVJ85Zsegv3HNROp3PqP3TdftTSJkJmYn5HzTkc8S_Wpt68bU0gmT70WL1cXsVXvFSnVli-9lxk5AGIYVgOslicRAwAOQ3A1SKvL70Lx0qbKWeROPp16a3hRkzmaHjWpRRYI7qDqVsT4WEMtLUfoorvby5Llmz-cqHRgBCDhyzYiSTB2Sbh81i77sl058RdXsRtT6V-9OqfsqXqvu8Hx78LEEgSL1UBk51nh51lCP0I90q7zJezP_8Y6xarfQ53wDrX_MpLhyQ3QDoPxBHM1NUnwUKmUe96hlON7IvkI-kxYlY83BzNJED4T1IZx0QXFQGE6nxS173NzGmy33qT9EoEqoysvhXiVRe9FB1gL7V71VvpAXeXylE2mbrajrwhdi_vAc0IrYJSut5-BmFWBxBdtlwYN0oJPSntRi7T9NhHazKTbROdvpdUQTrc2Hw2yarkR-eg_a_9GnRp5kwtz-SusYRmKhJm636fk6qNcsj0Ep6DEeqNflqu1HjB3iVMriV-mBo2k0L9YA2UhS-41tCqIOlAGso_JzYVWrNTtAPUl-Z50txbQjx_ur1xHwgqhliMW42iFRl6OK-i9Y0L8bjp5YXR3EyS8UmzngA8P_G2_seLYiVwxt68nPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAfgEAAAAAAAAP9AUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0FENvbnRlbnQtSWSAAWZlMjc4Y2MyMzkyNGM0M2NlMDIwYmUwOGViZmQ4OGEyOTIyMGQ2MjRhZDQzMTBlNTk2YmQ1Yjg3MDYxNmQyMTccQ29udGVudC1EaWdlc3SAAWZlMjc4Y2MyMzkyNGM0M2NlMDIwYmUwOGViZmQ4OGEyOTIyMGQ2MjRhZDQzMTBlNTk2YmQ1Yjg3MDYxNmQyMTccQ29udGVudC1BdXRob3IaOTI1Njc0MjYyNzI3MQ5DaGFpbklkBDU2HENvbnRlbnQtVGFyZ2V0gAEzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlDFNvdXJjZUgxNTUzMWZhMi0xMjA1LTRmNjEtYjZlNC1jOWY2OGVjZjgxZjcAeyJjb250ZW50Ijoie1wib3BcIjpcImNvbW1lbnRcIixcImFkZHJlc3NcIjpcIjB4ZTNhZmZmNWZlYjBmYTdlNmUzMmY5NGQxZjcwMzE1M2U4NDAzMGNjNlwiLFwidHNcIjoxNjkxNDYwNjIyNjQ3LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCI5MjU2NzQyNjI3MjcxXCIsXCJ0YXJnZXRcIjpcIjM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2VcIixcInRpdGxlXCI6XCJGbGFwcHlNb29uYmlyZFwiLFwiYm9keVwiOlwiU28gZnVuIHRvIHBsYXkgaW4gbXkgc3BhcmUgdGltZS5cIn0iLCJkaWdlc3QiOiJmZTI3OGNjMjM5MjRjNDNjZTAyMGJlMDhlYmZkODhhMjkyMjBkNjI0YWQ0MzEwZTU5NmJkNWI4NzA2MTZkMjE3Iiwic2lnbmF0dXJlIjoiMHg0ZThhMWIxZmFlYjNkMjJhNDQzNGY2NTExYTBhYzc4Y2RjZWQ0MDgyNGFiYWI0NmNmYjNhNzI2MjU5ZTZhNmQyNTZiNWQzMTdjNzNmN2NlYTIxZjNmZTljYTc3NWM0YzZlYzVhMTczZmQ1NjQ2MjJjNGFjZWNmNDZkZjNkZjJlOCIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFM3NQYWhoVHZMRHljYWZVRlg1TmYxSmEyK1lVK3VwUitsTlg2NTlrSmlQQk81bURrVmtKWXowYUpLRlVPemdxV1p6T1RtbE1yYXdpQ25JcHJCWlQralE9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4ZTNhZmZmNWZlYjBmYTdlNmUzMmY5NGQxZjcwMzE1M2U4NDAzMGNjNiIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweGJlNTc5NTI5Y2E4YTIwZmNkZjYyZjE5YzYwZmVhOTBhYTkwZDY1NjM0ZDI1ZWEwYzI5YTU0MGZjZWEwNjUxYTU2OTFlZGJhYTQ4YjBlNmY4Y2JlODY3OGE3YmFjZWMxNWJiYjM5YTliNmNlNjUzZmUwY2U5YTgxZDgzM2U4ZGY2MWIiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFM3NQYWhoVHZMRHljYWZVRlg1TmYxSmEyK1lVK3VwUitsTlg2NTlrSmlQQk81bURrVmtKWXowYUpLRlVPemdxV1p6T1RtbE1yYXdpQ25JcHJCWlQralE9PSJ9fQEAe9bg9ajoqevO6M42KlapmJo6YgLsz9UZW-0u14ox1yBDXilX_BRf8SHn3bAnfYDYkCxQKQQA1fdd10N9n2Ah3sGrDsgvBwF-l183gsjUjZPrJgsHcY1OQGsVMayD6RDcIksmgUCyMgUa5Cqj-4cxIk7Gmuj-q8aDZFcGL_2yycCUnLOPxxTf5oz-3bf2gY1ZknI_zxU_IS3CupycIrF0hO2ZhPZ2yyvsVFsNsXYQHY_vEJ38VHgSpJF6b-imUulHsVrDiFCOiTwGxFW1tlq6P7L56bzHY30ZrB1BXTYMzElHj1KddVFr_PxUwDP5BjhOzRyFXfGpvmm5K95CCEFofDXgsy51o4gAb4S6pnL7LcnbJFd7xSmSn1nyVnKykXB3XZXPHN1VPE9Wu8dg4ErltmQCyCeGcrVZ9ff2r0WB3gKRaHCfOwjtCPYYkjjHfJb8oGfnGqdzIt2ff-0YSSpgztmkTvWQpa9KqbZ9uDKxLqaSTjuR5XT1y8Rv5Yei6JbnXZdtCpJ0WQSGFb7dckM01ALxpAKSAdTkzyNvZQ-5YiginfUBWkEdwgXEZ_xvoTxhZ9Xf3Q7endl8G38JuZuweFQVUc6zEbnGNFshLNbIhK4tvmJi1KUI2hBwpTAOqK1f3BTbfoa-_XdXUu05UQATqGcW-0TGJeTX7WWcGeBBF5-c-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAABwAAAAAAAAAMAQAAAAAAAA2QBBhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QUQ29udGVudC1JZIABNTU2ZWU3MmZjY2Y5ZjRhY2ZiNjBkNWZhYjFkNDIxMzMzZTk3N2FhNGRkNzg0OTgyYmJiZmIwZjUwYTA5Y2Y4YRxDb250ZW50LURpZ2VzdIABNTU2ZWU3MmZjY2Y5ZjRhY2ZiNjBkNWZhYjFkNDIxMzMzZTk3N2FhNGRkNzg0OTgyYmJiZmIwZjUwYTA5Y2Y4YRxDb250ZW50LUF1dGhvchhqdnBubWF6ZTFweGEOQ2hhaW5JZAQ1NgxTb3VyY2UIYXRlbQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwicG9zdFwiLFwiYWRkcmVzc1wiOlwiMHg1ZTliMTQ2OGIyMmFkNWM4OTM5YmRmOTJhNzI0Y2ZhZGY4NGFhOTJkXCIsXCJ0c1wiOjE2OTE0NjA2MjE2MjksXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcImp2cG5tYXplMXB4YVwiLFwidGl0bGVcIjpcIjExMTEyXCIsXCJib2R5XCI6XCIyMjIyMjIyMjIyMjIyMjIyMjJcIn0iLCJkaWdlc3QiOiI1NTZlZTcyZmNjZjlmNGFjZmI2MGQ1ZmFiMWQ0MjEzMzNlOTc3YWE0ZGQ3ODQ5ODJiYmJmYjBmNTBhMDljZjhhIiwic2lnbmF0dXJlIjoiMHgxZGE2MzBiNWQ0MThmOGJiYjIyNmQ2ZWU0Y2MwYjNiMjU0MWNiY2RkMzY0ZGI5NTNlMTdiZDk1YzA5NDQ3YTlmZjE1Y2JlMDIyYTFjOGQxYTFjMjI4ZTVjMWExYWIzYTRlZWE4MGIyYjdjNThkZGEyNzBjYjMyZjNkZTg1YWU4NCIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaTU2NzhKRURnMjAzblFpSGZMaHdxS1lGeDNzQWFWMWo1cks2d0JROHR0RHBEdHMvRXBGTEVaMHEyVnVjakZaZGhXSm1wUnMrUXFZekg1eldLa0Y5bFE9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4NWU5YjE0NjhiMjJhZDVjODkzOWJkZjkyYTcyNGNmYWRmODRhYTkyZCIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweGIyM2YzN2E3NmY1NTI0NDhhMDU1ZDk5MGVhNTIzOTJhNzZhZjI4YzAyYTM3ZTgyMTdlNzhiMjlmOWM4MzljN2I2Njg4M2EwYjM1ZTE1OTA3OTVjMWQwYzYwMjliZGMzZTI1MjAxODZiNzUzNTFjMGM4ZjE0YmEwNzU2YzI0OTM5MWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEF0ZW1SZXZpZXcgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRWk1Njc4SkVEZzIwM25RaUhmTGh3cUtZRngzc0FhVjFqNXJLNndCUTh0dERwRHRzL0VwRkxFWjBxMlZ1Y2pGWmRoV0ptcFJzK1FxWXpINXpXS2tGOWxRPT0ifX0BAGdu_ZMjMN1CsUnrEw5wAn_z_p5nGwk_e45Ey2UzOfxjVzeeEV2A2o0-Mrz9YEgQiNbcBOrsTylnYgVCuMvSzMG8A0EK04eLhkqkgIoZc5FloN6Gk0SFLax9ZOyaQkZ3cvESmPjwYdDtiFMEBU3Umtl3eRfC0YJCNqhPxJxvntwDq9LcMC-1nFkHx7L9Gd_yaImcLurMoxPtJO028Oq_iTRRqs_bgxRFq0qL2lKCPmDud5WpKgD0hbnWUqONca2lINGOOoQvZ1su6P0eeC_I8jbPCrq8IXN3_rstaiygMHpsimhp4RAk5_41j0KhzLSN3g1xs0dQlHq-ZZ5N0mzpOc4Bhbv-51E88EymkTBomXG_R9fmdwITbfk1GtLXUtc3CBtMYghQ29UmdafdO7RMFXxB4O5TN7xkaPaovJwBG23sSZLRV2arTacyzrLqywUKWOmK-mb4rTjZqZ3v_1zbqsf1JZ5hXG7md1Muzbcvw1eYxiiPNQBiFlWhP9ZBtcVO8k-WH0jqMHi4Xa6GGT98cTI-XxgB4uoiVRn-HCR_uDfc9j1hJLyhNiV08iNs9OsvE_6K67mnrKVnJM8LmW5CEa9RGYNEQbUbxTn1Hoe2GzbZrUh1A9bUAHPycVN6-MdQOhArGOtRV-circ0Z6ooqyaOZfM-Op2D8Vu9R2dT3FyC3nPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAfQEAAAAAAAAP8gUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0FENvbnRlbnQtSWSAATIwMmVjMTQ4ZDE3NWRjMTZmYWM4MTAxNzIyNzE2MjI5MmU5NTVjOGUzYTE0NmFhNTkzOGJjMmQ5MGZlYTE4ZGEcQ29udGVudC1EaWdlc3SAATIwMmVjMTQ4ZDE3NWRjMTZmYWM4MTAxNzIyNzE2MjI5MmU5NTVjOGUzYTE0NmFhNTkzOGJjMmQ5MGZlYTE4ZGEcQ29udGVudC1BdXRob3IYem53eHczNjF3eW1wDkNoYWluSWQENTYcQ29udGVudC1UYXJnZXSAATM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2UMU291cmNlSDE1NTMxZmEyLTEyMDUtNGY2MS1iNmU0LWM5ZjY4ZWNmODFmNwB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwiY29tbWVudFwiLFwiYWRkcmVzc1wiOlwiMHhlMTVmYzUxMTYwZDI1YTYyMzQyZTdlZTdkNGVjMGExMDdlZDBmNWU0XCIsXCJ0c1wiOjE2OTE0NjA2MjI1NTMsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcInpud3h3MzYxd3ltcFwiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIlNvIGZ1biB0byBwbGF5IGluIG15IHNwYXJlIHRpbWUuXCJ9IiwiZGlnZXN0IjoiMjAyZWMxNDhkMTc1ZGMxNmZhYzgxMDE3MjI3MTYyMjkyZTk1NWM4ZTNhMTQ2YWE1OTM4YmMyZDkwZmVhMThkYSIsInNpZ25hdHVyZSI6IjB4MDViYTI0NDhmZGU3ZWYyZGIxZjlmN2NiMDczNzc0MmY1ZTU4N2M2M2Y3MDY4NWQyYTdkMjIwZjMwZmVjMGVmN2VmMjg2Y2RmZDQzM2FiZTc0YmY1ZjliNDY0NDNlYzFhNzY5NjkzZGQ4MTJlMGYyOGMxOGFiY2QxYTRmNGJlOGYiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXora0h6MHNYTTY0RHBlVGp0RXpvSE9KU2xqLzZoaFIrYWN2RUpVSlBZYXRyWTI1V0Q3c1BFdS9CcVdlUGt2dzY2MVVyUXNtMCt5QVFmOStxMm04Q21BPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweGUxNWZjNTExNjBkMjVhNjIzNDJlN2VlN2Q0ZWMwYTEwN2VkMGY1ZTQiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHg5ZDU3ZTU1ZTRiNTkzOGY5MGZjZTQ1NTZiMjk0OTRiNGY3OTFmOWE0NTgwMWFhMmE0YWUyMzMwZmMwN2ZkMTE1MWE4OGI3NGU2M2VlYmQ4Yjg5YTJhNmZjZDgwYjUwNDg0ZDg3NTFjMzg2MmZiMzg2ZTQwNjc1NTgzYTg0MjZkMTFiIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBDeWJlckNvbm5lY3QgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXora0h6MHNYTTY0RHBlVGp0RXpvSE9KU2xqLzZoaFIrYWN2RUpVSlBZYXRyWTI1V0Q3c1BFdS9CcVdlUGt2dzY2MVVyUXNtMCt5QVFmOStxMm04Q21BPT0ifX0BAAoNZJHqp-S-A_KX1CG2pOpRziJVbm8dQUbdBc0R_-RuKIaG1be4zziK5UFPxLdXVSlvv0CBRTePnsb8uPPY4l_0Jitn6GJUfvnfpn02Kz7HxRYVYHee-UoYTgNFMddxn2FYC2baaM1PR6DX13GLaN57icBlmqlwmR0gsp_twIgTTBdyb3DD-BZvPxjIIv87G7Z2JMXPmXrAUwKzbB8Wah4kgnDEdZIU0Vmugt6mdROPQ17GKUb6kRiOd0b86ihJxBY6skaspHz8Y7jVcSUSB5tqUnVv-p7bE3FgXrKDU__iIHlJ6xni2gQbnJvfHPvYiDQcE0K8LsjUJ7VYiSoJKXsuiem2pQHAHsrtnISxoRoNYpQCEpAIIgTfVHpjkSGyK3uQHnrpCAt14eHAaR4WgHTHEMRbOWpksQoFa3cn2j5Y8dGSff2B0_aMzRnDKpRcNO4ctHVJsbYqBlPWyTrYmgyMIoF9GVww4lvdtRmhFhTuTexOPljRdIYUCe8TSstMcoicrWsbBG5RHifKztLFhMQA-tqCQQUQV2foscL7VKrpjRyc2Swirn7UnjGcgRkmk6kJRk_2Ff83_Nf8GJz_6qfeq3UT-jsX5G9u1yM9iSB6FhgsJ3mhtrFSbrURlIZ_-7DlmdGxjUtPsAGkD4IO7bgSv-EvzKNdHXBC90kbvEC1nPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAcAAAAAAAAAEgEAAAAAAAANnAQYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0HENvbnRlbnQtQXV0aG9yJGRvbm5pZWFubmV0dGVhbTRhNA5DaGFpbklkBDU2DFNvdXJjZQhhdGVtFENvbnRlbnQtSWSAAWIyYmI3MGM1OTI4ZDdlNjgzNzNkZGY4Mzc3Yzc4YmZlMzA1ZTg3YzRhOTE1NzNkOTMzNzFkYjE3OTU0YWFjMzkcQ29udGVudC1EaWdlc3SAAWIyYmI3MGM1OTI4ZDdlNjgzNzNkZGY4Mzc3Yzc4YmZlMzA1ZTg3YzRhOTE1NzNkOTMzNzFkYjE3OTU0YWFjMzkAeyJjb250ZW50Ijoie1wib3BcIjpcInBvc3RcIixcImFkZHJlc3NcIjpcIjB4NzMwOWU4NDU3Nzg3MWY4YThhMDZjNTI0ODg0ODZjYjhmY2ZhNjk4ZVwiLFwidHNcIjoxNjkxNDYwNjIyNjcxLFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJkb25uaWVhbm5ldHRlYW00YTRcIixcInRpdGxlXCI6XCJUaGUgS2luZ2RvbSBvZiB0aGUgQ3J5c3RhbCBTa3VsbHNcIixcImJvZHlcIjpcIndvd1wifSIsImRpZ2VzdCI6ImIyYmI3MGM1OTI4ZDdlNjgzNzNkZGY4Mzc3Yzc4YmZlMzA1ZTg3YzRhOTE1NzNkOTMzNzFkYjE3OTU0YWFjMzkiLCJzaWduYXR1cmUiOiIweGVmOGVmODhlMjRhNjhlNTI1ODRmNjljNTg0OTUwNjNkODdiYmYwMzUwYzJjOWRhYzgyNzM0YjNkNzJmYzU1ZjY4ZmIyYjgzZDFmM2MzMmM4ZGI3YTg4ZWU2ZjExYmE4NGE2YmQ4OTRkMDEzYzdhNmYxZjkwZjg5ZGY5ZmU2ZWIyIiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVucnZZNDk0ZVk1NWFha1k5ZmNJZ3FVbm4xdlEzdFBVTGFhZlZoaStyWGRVQ0RLVHVEdmJ3blZlc2VLT3drdWh2Q3hQVi9yMWlCUlZkejRQWlgrNEhCdz09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHg3MzA5ZTg0NTc3ODcxZjhhOGEwNmM1MjQ4ODQ4NmNiOGZjZmE2OThlIiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4YTQyYmQ2OGFmZjYyNTFhYTI3NjU3YjkzMWI0ZmE1YzFhMTYzOTdkMTM1NmFiODRhYWVlZTRmNzcwODU4YzJmYjM4NWJhZmM5YTNjOWE3OTk1NTZiNTllN2QzNmY0NDE4ZDE3MTM5ZjBiNjY5MDlmNWRhOGJjOWQzODZhYTM1YjYxYyIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQXRlbVJldmlldyBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFbnJ2WTQ5NGVZNTVhYWtZOWZjSWdxVW5uMXZRM3RQVUxhYWZWaGkrclhkVUNES1R1RHZid25WZXNlS093a3VodkN4UFYvcjFpQlJWZHo0UFpYKzRIQnc9PSJ9fQEAUeNJebaG1qVcK0L8VKqXsJjn-sb13PqwXrQVCMqcbt2USjHh-EXNYMDzElaBcid56shkVQwpybcR3LTUAaVpjET-P387anS7iVCZZCo2BGz7NrI-3rZE1ctb7xzkb1BoKRSu1ds4_zWouWDBlS4JmRDYj7jnX73ZG5nfJgjGGODSVHJYXj0wA58vF-U6iqxzC6yc33I5ZHX0tbbE_HzcflBV6LPlqV9Cw6lY2VGSesYr4rkBBbIuRTYTzOoQnCAA9-EtNy7HcetCT4b-6pGAI-nV2dqpTlcFdJqCxXNb-piw5mPLzZmTZ6bLQjBzjkH0pE2b0hx8LtVzdVSxe34fUoYA_zie4WJ_oPsjm8uYfpn94KVTcAds5wIrgPoaf60eGOBiWKIOLjDwSy6Mlfrhd7JkH8Xp8rX4V9J0jZ8JBdwkRcPdeTAt9jLZgUHXiZt8I-5-V3HXSf22i9n_TJ1oFqJG6cHrycf1n_BzMQo3EqiODInJupybU865KjU0JrnqVEHAmWJ5ypuC_BQL0IIpr19zF62eyfCGBNPsq0EH8FR8VbMJLLdc9E-4vMeCV1RzDJ9UuPYbnVLz7XCp---zCKkux7uY4tlqlOvgh0enaW7FabvGCdIfIxW1s5XYlBkQggNHR9l6GioZRIGofEY69sqacB6anKrczRSYHsEYvb2c-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAACAAAAAAAAAB9AQAAAAAAAA_yBRhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QUQ29udGVudC1JZIABMTY4YTY5Y2QxZGRjMmQ2YzJlM2RhZmU2N2ViYWU4ZDIyZWJkYjY2YmQxNDJjODI5YTI1OWZjMWYxM2JhMWQ4ORxDb250ZW50LURpZ2VzdIABMTY4YTY5Y2QxZGRjMmQ2YzJlM2RhZmU2N2ViYWU4ZDIyZWJkYjY2YmQxNDJjODI5YTI1OWZjMWYxM2JhMWQ4ORxDb250ZW50LUF1dGhvchg5Y2ExeWZteXdvMmMOQ2hhaW5JZAQ1NhxDb250ZW50LVRhcmdldIABMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZQxTb3VyY2VIMTU1MzFmYTItMTIwNS00ZjYxLWI2ZTQtYzlmNjhlY2Y4MWY3AHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweDc4M2FkMDE4ZmNjOTk5OTA5ZjQ1N2U1YjcwMDJhYzQ3YTliZWZjZWVcIixcInRzXCI6MTY5MTQ2MDYyMTkzOCxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiOWNhMXlmbXl3bzJjXCIsXCJ0YXJnZXRcIjpcIjM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2VcIixcInRpdGxlXCI6XCJGbGFwcHlNb29uYmlyZFwiLFwiYm9keVwiOlwiU28gZnVuIHRvIHBsYXkgaW4gbXkgc3BhcmUgdGltZS5cIn0iLCJkaWdlc3QiOiIxNjhhNjljZDFkZGMyZDZjMmUzZGFmZTY3ZWJhZThkMjJlYmRiNjZiZDE0MmM4MjlhMjU5ZmMxZjEzYmExZDg5Iiwic2lnbmF0dXJlIjoiMHhmMTM3MmVlZjExZGZkNTM1NDY0ZDdkNGRlOWVmNTM5NDkwODlmNDc5MDg5MmZiMmU4MDdkNDk3NzhkMGNjNmFjN2Q2ZWNhNTA4ZTM5ODNlNDJjMWQ4ZWIzZjM3YWQ2NTFkZWJkZDUwMjA4Yjc1YTk2NDgwNTVjNDUzZDM0OTlhMyIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQ3FGK2ZyNjFUWU1tSlZVR1VOcitNNHMrRjhRQjF3cGNJdXk0d2ZzWG5GL2lnUjlhQkZCR2xvM2ZIOWNodlRZY0dycEZLcVBzeXlmd1B1eVExM1l5dEE9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4NzgzYWQwMThmY2M5OTk5MDlmNDU3ZTViNzAwMmFjNDdhOWJlZmNlZSIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDI0MWE5NDNjNjdjNjFlN2UzNzUwMTNiYTAzMmJmZDUwM2NlMTEwMTcxZDIzN2NiZDg0YzkyZTczYjU1ZmE0Zjg1ZDViYTdkMDhjYjJkNGUzMTdhODcxNmEzYmQ0MTAyMTJmMTgyM2ZmOGRmNDFkMDRmNWMyNzMwMzA3ZjU5YjZlMWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQ3FGK2ZyNjFUWU1tSlZVR1VOcitNNHMrRjhRQjF3cGNJdXk0d2ZzWG5GL2lnUjlhQkZCR2xvM2ZIOWNodlRZY0dycEZLcVBzeXlmd1B1eVExM1l5dEE9PSJ9fQEAbg_RpuReM3kHXs9OJec3ZF_AzJnrQVa-i3S_Zi8ye0sVll1W6Z__h9nDo_ggIRrd4lz5sd6ER026qAbhlmO8CKkOB0EjYZnz_0_Mo9AO878kWjyarDW1jnU-ajTCGUkE7o_oHJIPe68YN4EkvRrLfhjfIsI0C98YgKZZvt3SkMV--oVcBgP2KHYykIlrMUE4YJ7JeeUy22MJ3pvRv_yE_fUaIq96FBmCiPUuw5WqCFCPn2VKjz47FV1Fh5jyzKBGFB-uYBKtxypeh8uAQ3yGdqjXOhNU4yHce8GhpfnCyf1JIP6h89A8aSic4VrU91z0jQbJpuerz8v4iqCgw6ITJe_qynvx9Zk26PQ98R8u42ZB3aSQBaJXfjhn5XXZKcHroHEJDXUsp0k82L9k8n7Y_CZVSwBb4_InVEizApziT9u89Y83VDtdasGfa0LU_1jiLQqSfYrnkLdt6ONuBgAhgtB8kc16uDtVeqqs_ebGMr1qAdVx7dFXMlJo3Bgv_-n9BNSqyhfRWhFUGLQaxtDgmORbpoDpeATeGhc56ImuOYPCpSrl-09DOadwLkUjbb0NqtSiYEt3m54cXZRP3VLr_DY439f_mSnyeM4rYyOfEURTwHtLw4P90p7Y80PqgXQIPsSRRuAAqIUimwrxasAI0dmOleliO9UHx6SixnM_vQSc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAACAAAAAAAAAB9AQAAAAAAAA_yBRhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QcQ29udGVudC1UYXJnZXSAATM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2UMU291cmNlSDE1NTMxZmEyLTEyMDUtNGY2MS1iNmU0LWM5ZjY4ZWNmODFmNxRDb250ZW50LUlkgAE2ZDViYjM1M2ZiOWYyN2NmY2E5YzVjOTZkMGJmNjE3MzQ2ODhjNmU3YzZmYmM5Njc1NjI3MGVkNTliNWRmMDk4HENvbnRlbnQtRGlnZXN0gAE2ZDViYjM1M2ZiOWYyN2NmY2E5YzVjOTZkMGJmNjE3MzQ2ODhjNmU3YzZmYmM5Njc1NjI3MGVkNTliNWRmMDk4HENvbnRlbnQtQXV0aG9yGDF3ZWI4OXJrMTUwMQ5DaGFpbklkBDU2AHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweDEzOGM2NzQ5NmM0YTE1ZDQ5NzAxMDNlODZjZTdiNGU4YThhZjZiOGVcIixcInRzXCI6MTY5MTQ2MDYyMjA3NCxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiMXdlYjg5cmsxNTAxXCIsXCJ0YXJnZXRcIjpcIjM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2VcIixcInRpdGxlXCI6XCJGbGFwcHlNb29uYmlyZFwiLFwiYm9keVwiOlwiU28gZnVuIHRvIHBsYXkgaW4gbXkgc3BhcmUgdGltZS5cIn0iLCJkaWdlc3QiOiI2ZDViYjM1M2ZiOWYyN2NmY2E5YzVjOTZkMGJmNjE3MzQ2ODhjNmU3YzZmYmM5Njc1NjI3MGVkNTliNWRmMDk4Iiwic2lnbmF0dXJlIjoiMHg1MDdiZmE4YzIxZmVhN2U0Njc5OTExOGQwMjNmMTdlYmZhN2M2OTIwNjE0NjZjYWY3YTc0ZGNkZjE4YjQyMDEwMmY2YjVhZWY2NTI2YmYwYmNmYmUxNTg3ZjJiY2U1NzQxZGUzNzliOTg0NTUxNTQ0YTk4OTUwYjZiZjZiMTRiNyIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFbFJyMnNaUnpuVEZ4U3FHTlUvcERJU1dMWWdHV0NmcWw5ZkRpY3hKakFjOVRKN1hOcEEyS1pTSnNMQXN4YUFMcnRIeGFXc1pqZHFIRHhhRkMrRnJTa2c9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4MTM4YzY3NDk2YzRhMTVkNDk3MDEwM2U4NmNlN2I0ZThhOGFmNmI4ZSIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDI5YjhiMGE5ZWQ4MDYyNzNkNTE5MWY1ODk2NzhhNDIzYzViYjNlMjMwMjAwNzAyNjY3ZjY1YWNlMjY3NmMzY2Y1ZjMwM2RiZGFiMDNkOGZlZTkwYWE0NjVkMTJiZjczYTgzYzBhNzRlYzUzYTkxZjBiNjc1NjEzMzBhMDk0ZDU2MWIiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFbFJyMnNaUnpuVEZ4U3FHTlUvcERJU1dMWWdHV0NmcWw5ZkRpY3hKakFjOVRKN1hOcEEyS1pTSnNMQXN4YUFMcnRIeGFXc1pqZHFIRHhhRkMrRnJTa2c9PSJ9fQEATJOezfk-TLwWsmTOLW3O4AfGIscO8aLPJP-KXpOk1F3p1tGiVSVbtn_1SnEu0t6C9ppsPiHi5uFDv2_g_EKBYqNr6npAFWRVWkXsUFMZPH8ZHE8ot6uIN83Mb-EHnm-YiZyGwEHZk97xpD79B3LMj1pqMsMIJ3QZcIuGlYtLS3t0GSkUExYu49OaspF2wxtxu0Z_Ey485hYdG2rHL7rzi26DyQHroPYREgyuColw5T9eSCR4YygvVpy9h5Qk3vxSPxx_wmZdWJQVMeRp2kKidyrkKaKwuY8fAnCFPiJy7w0tje9kmD8duWu3eZnQvXs7vkECCCOo4w19X0gc45MXKaWGz4FtlrQvk5x5nqCzzhGXTOwdtEC6i6MWM-SzBJrhMpOp8c06_39eDBIP3Rn8WCWCyGtR_N346IlLsCOLapqU6dNYgfHxrd1xYucQKoDBBVhHeikKwYXXM9xiJaaeQZjLi8tAeMtvX3ssEfPxRN4J4XS5DHTgQt9e1FlzHvhIgVHAghim0o6yLFecgrwDkGzmV6Gu0ea6c2mIrjPhXf4B1SjEI6HbS_SiqpLGsQgnlORwOpRZmLPzXSW4y5Gp8izF0TcpedTkZL3z4Xs53xZWkrR-uj6T89msjZU5CoHU6BVyzw4PiCyua0p4hSjZz_5uNIRhQIMRd54cW_FrMrSc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAACAAAAAAAAAB9AQAAAAAAAA_yBRhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QcQ29udGVudC1UYXJnZXSAATM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2UMU291cmNlSDE1NTMxZmEyLTEyMDUtNGY2MS1iNmU0LWM5ZjY4ZWNmODFmNxRDb250ZW50LUlkgAE1NzRkYjgwNDYzMzgzNzZiY2ZmMzAxNmQ1ZDVhZmEyOTRlYmMwMmFhZTg5ZjQyZTMzODkxODFkMDgzMDgzM2RmHENvbnRlbnQtRGlnZXN0gAE1NzRkYjgwNDYzMzgzNzZiY2ZmMzAxNmQ1ZDVhZmEyOTRlYmMwMmFhZTg5ZjQyZTMzODkxODFkMDgzMDgzM2RmHENvbnRlbnQtQXV0aG9yGHEya3RmY2Ria3Rzbw5DaGFpbklkBDU2AHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweDFkNDIyNjJmODQ3YWQyZWU0Y2M3NjIyZjQxZDBhMTlhMzZhMDZhMmNcIixcInRzXCI6MTY5MTQ2MDYyMTk2MyxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwicTJrdGZjZGJrdHNvXCIsXCJ0YXJnZXRcIjpcIjM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2VcIixcInRpdGxlXCI6XCJGbGFwcHlNb29uYmlyZFwiLFwiYm9keVwiOlwiU28gZnVuIHRvIHBsYXkgaW4gbXkgc3BhcmUgdGltZS5cIn0iLCJkaWdlc3QiOiI1NzRkYjgwNDYzMzgzNzZiY2ZmMzAxNmQ1ZDVhZmEyOTRlYmMwMmFhZTg5ZjQyZTMzODkxODFkMDgzMDgzM2RmIiwic2lnbmF0dXJlIjoiMHhiYjE0MGMzNjdiNWMwNzYxMjIwNmI2ZTYwZmU5NTczZWJmYjI2ZDQ5ZjYyMWRlOGY0ZWQ1ZTkxZDk5YzJkOGVmNDQ0NmQ2YTZiODc3N2EzZThjMTczYTc5YWZjNDM4ODA1MDVlMGEwZGVhOWU5MzhiNmM5ZDE4Nzc1NjkzNzBkZSIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFV09sUVFOOHQwbWc1Yzk3a2kzMlhpUHhQNGFBQjJXTEhOV2hEWHU3TEI3TytHbGNLUTh4OHhhcW1WTEIrZGdna2V1VXVOekRSOUNoZ0ZPdXVvL2hmMmc9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4MWQ0MjI2MmY4NDdhZDJlZTRjYzc2MjJmNDFkMGExOWEzNmEwNmEyYyIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDhhNGUzMTNhYWVjNGJlODhkYmNmZjE5MDc2OGIzZGQ1ZjQ5MGE4NTQwMzhiY2NiNTMzMjUyM2UxMDQyZjVkNDE3NzNmM2VkNWUzMDI2MzIxN2Y2Y2RhNjdhOWZmZGE0NzQwODFmNDIwMDcwY2JjZTY4Mzg3MDY2MzEwOWFjNGU2MWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFV09sUVFOOHQwbWc1Yzk3a2kzMlhpUHhQNGFBQjJXTEhOV2hEWHU3TEI3TytHbGNLUTh4OHhhcW1WTEIrZGdna2V1VXVOekRSOUNoZ0ZPdXVvL2hmMmc9PSJ9fQEAacb7OWaowzb99-8IB-aoF51qqEWK7yc1VYcfivj6hVeuv8N9XENwr3eiXLakQAds_rJSs2GxoHOop1byvbQr_fbaGqudiXA0cM1Uh8xnXL1BTk_9AShQm_A45qVzcIuGE2fsebBmSJLe2KpttI1pVcbFKnaBJug4lXqctZqjluQ7m9y3dOqgvdvNb7WoXDuf4nWZC1MqKkbLp1mn42z_bmVloPzzcfzXEVnjM_iBFLccwGQQ7HBhigd_FQ8ZwfKyU--7dmWwm1S7x6jN5wnrSRHRBt_u87571dHrd53J3zSXv7-f9WlU6ViRYwOHXzs2h35Nm7JrOOalY94clyphRnSCqMl-9R2tkhjMmaAMdKHH32gckS3PEQybbJnSGqqrWU43VxXoLDGpQMVGkpwZaYoAB8w000YAzlMBCIa8Zjc9fN3MIoX-Tlbs-DLEN0PGlEGcsixF_4UmYs6Tf6IwDD4-t_vwrcw8Sa2N6mRjhIWZKxCSewbgquSCpQZNZrIPA0deaCsqkureHCLSrehYRm9xa7Afw8nYaGc7Yy9Np6CAD7Dut0SlOT9f0ARI39ZAgrrXecam9MeIVESvLFcfakCeNppvX0hh6xOHH7bmP2FHUkJtwT8pYNxYG_p2JPjQfKFwwlkgw6U7_cT205JKA3QsfbOFfC-NO3ubLMWnQIqc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAACAAAAAAAAAB9AQAAAAAAAA_yBRhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QUQ29udGVudC1JZIABZjM5NGYxZTRhYzMyOGVjMjJmZWVmMTEzNzM1MjljM2Y4ODVkYjc5MDM5YWIzYWQ4NzIxNGRjZTgxMTgyMzg3ZBxDb250ZW50LURpZ2VzdIABZjM5NGYxZTRhYzMyOGVjMjJmZWVmMTEzNzM1MjljM2Y4ODVkYjc5MDM5YWIzYWQ4NzIxNGRjZTgxMTgyMzg3ZBxDb250ZW50LUF1dGhvchg5N3NsNjd4a2R6Y3MOQ2hhaW5JZAQ1NhxDb250ZW50LVRhcmdldIABMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZQxTb3VyY2VIMTU1MzFmYTItMTIwNS00ZjYxLWI2ZTQtYzlmNjhlY2Y4MWY3AHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweGM3MGU1NTY3NTAxYTZkMzNiZTVmY2ExY2IwZTAwMWEyYzIyN2MzODdcIixcInRzXCI6MTY5MTQ2MDYyMjI5MCxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiOTdzbDY3eGtkemNzXCIsXCJ0YXJnZXRcIjpcIjM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2VcIixcInRpdGxlXCI6XCJGbGFwcHlNb29uYmlyZFwiLFwiYm9keVwiOlwiU28gZnVuIHRvIHBsYXkgaW4gbXkgc3BhcmUgdGltZS5cIn0iLCJkaWdlc3QiOiJmMzk0ZjFlNGFjMzI4ZWMyMmZlZWYxMTM3MzUyOWMzZjg4NWRiNzkwMzlhYjNhZDg3MjE0ZGNlODExODIzODdkIiwic2lnbmF0dXJlIjoiMHhmZTlmZDFkZDM2YzI1YjI4MWRkYzk2NDhjMDU2ZmFiNzFkNTRiNmRhY2Y0NjhhMWNkZTc0OWU4NTZhYjZkY2QwMTAxNTNlODM0MDgyOWUzMzlhMTA0MmJmY2MyZGJlNjQ3YWY4OTIyMjZmOTRhMjZkNzg4NmNhM2QxNjA4NWQ4ZCIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFeGF2YkgwTXdmb3BFajFZTFpJNHVaM1kvbGg5b3l4enZSdDdmb0c2Wk9Tc2w1UU82NmN5R0tCaW85WCtmMzNSd2hVaHZXdTJtcWY5UUU5eHExdlpQZmc9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4YzcwZTU1Njc1MDFhNmQzM2JlNWZjYTFjYjBlMDAxYTJjMjI3YzM4NyIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweGViN2FhM2UwMzY2NjNlYjk5YWM0M2E4YTkzMTI0MmQxOThhMjc4MzFiZWVlMzQwNzNjMDMxN2M2YmI3Mzg1Y2M2NGJjMmZjNWQzMTBlODIzMjM3ZDg1YzM2ZDhiNzIxNTJkZTM5MzdjZjQzY2Q4MGJjN2NlYmY4MjQ3YWQ0MzdjMWIiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFeGF2YkgwTXdmb3BFajFZTFpJNHVaM1kvbGg5b3l4enZSdDdmb0c2Wk9Tc2w1UU82NmN5R0tCaW85WCtmMzNSd2hVaHZXdTJtcWY5UUU5eHExdlpQZmc9PSJ9fQEAVyX7qCIDiovus38Eg_CJYnbQUat1wD8hZ5HlD9ciZTObT0AnHcP4LDnwqSdosRmIC2OKVNEAW94cdJ9gF0Png-Q6Ieh6nL-3_rv3FZPQsxS_l7kvQ-QjG3tJqsAyqGWnxC2pORrfoAN84cmixrs9bZXmlQS9UTxHR8xnNdlgPkiF_TdRSd2bZr3n1XChb6XRQjjasVZ5fix3KEbYfj28nttaerPqWSY8jivgCMwDboe7bBMopqlP7MrAdlZ9W7eJXwRmv8jJlWVE4dGwCoeIreQ-pMTrRrW7SKDslkuK4nEW5wRqUb44pen2LMfwnqNnHZ8EaWRG4rU9oDCLv7IdXv5uTwKmCDb51fdVobidYRL1nAvLDrbeMhYQwqd0h_YH25IcHtw4PO4wmilFZtSJSLjFn96J_Canr2jRBHpK5nabkXNoJq3MlK9UbZQNMxo99HEkwLexeDr3GmKarv9meZQBE1PDhp6Zbsh7GfyVWCjNpWQUlviYrR-gV25h3QqjuzjZU1WTr8QWK0AcQw7dW8IgITQWtJSfjavLgT1LKxvjzOlM6-HAa4D6jgC-RuLenTXc-TkfJECk1QfW2G-nf29Xm-14zwKQ7Wuozk9flEdpvi7nfaTH52sVU0dQwiJTPR_RtxDkavm3r92FNktOfV02AcEAf9ttNAD8_MpSsFSc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAABwAAAAAAAAAMAQAAAAAAAA2QBBhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QUQ29udGVudC1JZIABMGVmZjllYzMwMzJmZGY4NTU2N2FmZGQwYjAxOWJlNGY5NDc1N2Q5YmNmNTJmMTRiMDczOTUyZGE3Mjc3MTYyNRxDb250ZW50LURpZ2VzdIABMGVmZjllYzMwMzJmZGY4NTU2N2FmZGQwYjAxOWJlNGY5NDc1N2Q5YmNmNTJmMTRiMDczOTUyZGE3Mjc3MTYyNRxDb250ZW50LUF1dGhvchhrZXM2Z2M5ZWNjZWQOQ2hhaW5JZAQ1NgxTb3VyY2UIYXRlbQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwicG9zdFwiLFwiYWRkcmVzc1wiOlwiMHhiNDI5Njg0Y2Y0NGQzOGJhMDE5OTRkY2Y5ZjkzNDlhZGQ2ZTJkZmVlXCIsXCJ0c1wiOjE2OTE0NjA2MjI4OTUsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcImtlczZnYzllY2NlZFwiLFwidGl0bGVcIjpcIjExMTEyXCIsXCJib2R5XCI6XCIyMjIyMjIyMjIyMjIyMjIyMjJcIn0iLCJkaWdlc3QiOiIwZWZmOWVjMzAzMmZkZjg1NTY3YWZkZDBiMDE5YmU0Zjk0NzU3ZDliY2Y1MmYxNGIwNzM5NTJkYTcyNzcxNjI1Iiwic2lnbmF0dXJlIjoiMHhjMjE0MGYzYjAzMmYyMmEwZTQ0NDFhYjU3YjJjYjkxZTc0OTQxY2Y0YjBlOGVlZWEyM2U3NmQ2MTg1YmM5ZmNhMzNhYjk1YTZhNTY2NTcxOWI4ZDcwM2VjOTM5YTdlOTVkMTk2MDdkOTk5MWNlNjhkN2MyNTI1NWVhMzQ5YTExZiIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFMEdjUEhRU29IZ1hHZEVwcm1vL0dWQWFGNnJaMGZibktGOTZYcEVES0V3TXlhSy9mWUJFZ1Z0TENXU25VUGFOckV1L3dUaitxeGhPSHRtMFdTWERiVGc9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4YjQyOTY4NGNmNDRkMzhiYTAxOTk0ZGNmOWY5MzQ5YWRkNmUyZGZlZSIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDE3MDUwNWVkNTM5OWVjY2JhODRkYmMwMTBiNjQzYTQyZmNlYTc3NGQ1NTUzOWE1YTAyNDZkZmI3MjViOWJhZGE0MThjODFlNzlhZWQ1NzZhNTcwNTA5MWU2MmQ4ZWMxZDVjZmI5NGFiMzNhMWFkM2IxNmRiOWY5ZDc2ODY0ZmEzMWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEF0ZW1SZXZpZXcgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTBHY1BIUVNvSGdYR2RFcHJtby9HVkFhRjZyWjBmYm5LRjk2WHBFREtFd015YUsvZllCRWdWdExDV1NuVVBhTnJFdS93VGorcXhoT0h0bTBXU1hEYlRnPT0ifX0BAFgnPBlnvkcbKzbaIlRg0B5vevcY3SEJeMIawUqgPerrAIkW1m6CJeb-Z_V6z-h_5JRMUBsQBWVShThD2aeB4Ro-Tuk10BBNzyFNl4U4ouU26pMTeXwSic1FjBrooShCR1Rd1c5AkVQgiWk5TZg0dGONyxJXIDROgmgG-bLDjjlzMEoosMA7V-2Ssu3Nxv7K5LmoVxuljKMJtWyJp82vgadX1dVzoXbhwRLWu7O38IC_LVvoU3g5dULz7HtV-usTXPXZzn6ZunEij0PVZ6EOIzrVvRBZcyaM--_MHkFf2ljU1FOUnP_wZpIckav6qqW2mZYbrbw63voXSB9AJg8vYU8OB4G1NAoyDDY3uDdBT110KLG9LhrE1guk1tIvqh9Fybq2n2Uu4-N6kaBBge-qHtTiAgmIU1IqJ9260HpiCqrfCDW4CVqQcot1QTScmjEYFBZ7W36uqe79MIZ6ZThUIcyYu6eyt8FiNy5FOIyFGwHiU3EcmIhpTX-lADrqzY2axekp-QFTFys4YP2dVDbRH8ME473NpV8SA_USdm_GEss0Y6UtSU3jZVUhFFD9jYTaJTL-e3kVB6vASwzryuK3uy_BYT_wk0acMOL2Aw6Yqg3qfkoz2KA9-3vt368lf1K-PjgUvMJCERtyxPpJvnf0-bMEXdZHtvR1xHLBzs1ZSDbDnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAfQEAAAAAAAAP8gUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0FENvbnRlbnQtSWSAATBkMjY1MWNiMTRkNzczMjRjNzRmZmMwODM1Yzk3ZTkyMTgyMzYwMjcyNDhkNGE5YWE3M2E3YTE0OTA5Njk2ZjkcQ29udGVudC1EaWdlc3SAATBkMjY1MWNiMTRkNzczMjRjNzRmZmMwODM1Yzk3ZTkyMTgyMzYwMjcyNDhkNGE5YWE3M2E3YTE0OTA5Njk2ZjkcQ29udGVudC1BdXRob3IYZzY2cHRobzZjaWg0DkNoYWluSWQENTYcQ29udGVudC1UYXJnZXSAATM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2UMU291cmNlSDE1NTMxZmEyLTEyMDUtNGY2MS1iNmU0LWM5ZjY4ZWNmODFmNwB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwiY29tbWVudFwiLFwiYWRkcmVzc1wiOlwiMHg2NDc4MzhhOTY4ZGQ2YWQ5ZmRmN2EyMDdiNGYwMjU2ODA4MjhkZDNhXCIsXCJ0c1wiOjE2OTE0NjA2MjMwNDcsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcImc2NnB0aG82Y2loNFwiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIlNvIGZ1biB0byBwbGF5IGluIG15IHNwYXJlIHRpbWUuXCJ9IiwiZGlnZXN0IjoiMGQyNjUxY2IxNGQ3NzMyNGM3NGZmYzA4MzVjOTdlOTIxODIzNjAyNzI0OGQ0YTlhYTczYTdhMTQ5MDk2OTZmOSIsInNpZ25hdHVyZSI6IjB4ZTk2NjYwMjhmNjRjMWQ2MDdkNWYwZDNjYWY1Yzc5Y2RiMDYxNDI4YjU2MjIzMWQ1ZTU2NGE1NGIzMDMzNTVhZTUyZGJkYzFkNzgyNjU5NDFhNTEwZWE3NmY1NTYzMGZiOWZhZjYwM2RmNzhjNmE3ZWFjMTFkNWE3YjhmMDVjY2YiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXArR3BxRForTmxkR3ptcnBhQWZHbGk1eGlFMTY3WTlzK3oxOTNtbHBteGRweGZQZkxHUE1GQTNRaEx5ZHlDaDVuQko2V3dNcW9zQVRrMWtUK2k5U2JRPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDY0NzgzOGE5NjhkZDZhZDlmZGY3YTIwN2I0ZjAyNTY4MDgyOGRkM2EiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHg5MWYwNjU2ZjIzNDViNzljZjdkMjIzODY1MmIzNWE1ODRjYzIyZmViZjA5ZjliZTE5NzljZTgzMDRkNDQyOTU4MGZiNGIwYjg4NWQ3ZjMyZDU5OGIzNjdjYzRmY2IyNDdhZDg0NmMxNGI3ZGNhOGQxZmY3YTRjZWZhMWE4ZTk1NDFiIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBDeWJlckNvbm5lY3QgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXArR3BxRForTmxkR3ptcnBhQWZHbGk1eGlFMTY3WTlzK3oxOTNtbHBteGRweGZQZkxHUE1GQTNRaEx5ZHlDaDVuQko2V3dNcW9zQVRrMWtUK2k5U2JRPT0ifX0BAFTOfR3hPa5jeYmHy7-o9m9Hl8ONE_B_QDJpLUF7vSPkPw41r4qJULubDyDH1r_iOBjG9DEF2NMLOfGYtjxgRLJ2cXkoNlKr34G7s07jmMvEIMyIMOQOEG1LIXhkEnKK7CCj81Pt-wYvWzW_JPW3R5jMMQWAljIDtHMoxpgajEHJAMJiaXQ17VL_xHbe8Wh-Y_XDBDQyiZyrnjQ-cjS2vY78SaCRbUnTqgRMQ6YcdmQ9M7Nal3QRa0Qu_hiep90Q1U2XVesEBMXo7TlqKzps3BvjELb3aW1c6wTXGdm4SAiAo2L9qIeu8SM4WXb6Vs-WDGKj7wQI7vySMGDV6m8cKJOLY1cqbXAfCdqY53PxoJJmxc-809wWZtVmoQ2P4W4AK992lxf4WkuW0gdIa-45fB-SZO-k15k6jo6RCMbI3hMsf6hIp69l5-Y2O-ZFqfW12NN5XPwIONZ-lgqCV1GDkMh1fiteoV797V-eNm0gx6l0Sgho9MtJcwCgUmBSo6WXGJIXY6IIziyoJpEEIGQco2HRNUNwJLkk7Voiy1VoaY1PRBCg361JCjGbJ56BSrNhyGKkVXhGAsBAzm_z9OZVZrXir4UQ1HPcXZo0TsZLLr6o3c6q8YOwE4bLbLM2K1HxNCHa-pEJYFOO5lZG_HjRpr9CsIJV1oiK2uC58H_aFhllnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAfQEAAAAAAAAP8gUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0HENvbnRlbnQtVGFyZ2V0gAEzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlDFNvdXJjZUgxNTUzMWZhMi0xMjA1LTRmNjEtYjZlNC1jOWY2OGVjZjgxZjcUQ29udGVudC1JZIABODMyZjllYTk5MWRjNTEzYTlhYmI5MTY5MmFlYjg2YWIxYmQ2MWYzNTE0NGQ5NTI3YjFlMTFlN2EwMjFkMTVmZhxDb250ZW50LURpZ2VzdIABODMyZjllYTk5MWRjNTEzYTlhYmI5MTY5MmFlYjg2YWIxYmQ2MWYzNTE0NGQ5NTI3YjFlMTFlN2EwMjFkMTVmZhxDb250ZW50LUF1dGhvchgxaWR1azc2Y3BmZnYOQ2hhaW5JZAQ1NgB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwiY29tbWVudFwiLFwiYWRkcmVzc1wiOlwiMHgyMmFmZWE4YTM3NjIyZDljZmM1NDBmNmRjNzAyNjIwYmUzMzYyYTFiXCIsXCJ0c1wiOjE2OTE0NjA2MjIyNTQsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcIjFpZHVrNzZjcGZmdlwiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIlNvIGZ1biB0byBwbGF5IGluIG15IHNwYXJlIHRpbWUuXCJ9IiwiZGlnZXN0IjoiODMyZjllYTk5MWRjNTEzYTlhYmI5MTY5MmFlYjg2YWIxYmQ2MWYzNTE0NGQ5NTI3YjFlMTFlN2EwMjFkMTVmZiIsInNpZ25hdHVyZSI6IjB4NzUyNTZkZDlmNjgwZmQ1MDQ4ZjRjNzg4N2MyMjc5NjU2MDg1YTVhYzZhNDM4OGM0MTUyMjlmZjFiYWIyNzMwNDkwODA3OTczMDAxMTVhYWNhYWMyYjI1YjY0ZjRhNWUxMzMzZWQ2OThlOWNkMTA5MTM4MzFlNzBiMGE2YjdiM2IiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRWh6RjNjdVJwUG1aNDVINnZqMm5NR0hzaGttckhVSzNsSmJONVdsNnplbUx4eWlwelNseGZMRWxzSkszQ3FFMVgraWJxbjlZcVJiV3hVN1crdHIwR3V3PT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDIyYWZlYThhMzc2MjJkOWNmYzU0MGY2ZGM3MDI2MjBiZTMzNjJhMWIiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHgzYzQ1NDYwNzRiMjliYWY4NGNhYmY1YjVmZDk4MzlhOGM2NjQyMjUyY2UwMTllOTgyMWI4MDYyMGFhNzRkNTU1MmQ4ZjE2MTg3NGRmNWFjM2MwMWI3OWViYjczZjNhMjBkZGUzY2MxZDZjMzA5ZjQzY2NkODE1OTFhZmJiOGMyNTFjIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBDeWJlckNvbm5lY3QgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRWh6RjNjdVJwUG1aNDVINnZqMm5NR0hzaGttckhVSzNsSmJONVdsNnplbUx4eWlwelNseGZMRWxzSkszQ3FFMVgraWJxbjlZcVJiV3hVN1crdHIwR3V3PT0ifX0BAJVUvQBsR5JGkfmmpkjRKmGx1CEQovuwixck1jwW6dwnC5YsDMARBjqpicv42DWEVMhcESy5uuGvt8CR7weVL2Twvt9sYhwZjrkGGRrFUbBABQ8h5FSmiLO1H21VlFU_zdLGfxmAVIytrxPN-an9vuSc2r8o8YetF1JAPtIHhcz5zkg99YTKNCQFRs4F3J3mBkZlzS7F7_ZATJkkYlE7avtHn-AWywkdRvgK9wiyo1bDUHt5k9Tx9isKrywifcPT8dkYvRO7NKgbjGPCx7O1c26v0zBqwbvyWqtpSMWMdB7i4R6pQwFfk4NHVTWfx48YhlPJf6u1acX4YxT1wWuaJ7bgfiQO8IAvwiEW5q979EczWDsrPsNln0A3C7E502DHFIwrx38aSoP8zGSgOiKZqUtyshJdXoWO-uCDE1UrXA6XnIM9EmAg3xlqhF2nliNpcd2Dzo9OuaT5QsRKKEVVfjAYgUyjSG-shzsiLnb7XDFLVJ9agk2Ya0fS-8lkASqi9xo3emvxut3x6zoT_Fsw3h1Efu_XWqI-lDezLTRs9xBxqsTPG3Colxkajr9T_seTlo14hmYIWIEgq0nYSRDfpNS_kNfLr_fXfWb5oKLi-hSoiCOcnbStrwoifzMuXmPcw3bjrCrFt5DPo3Z0I4Fc4VvOsqtfbMdKxEE4kyGO7X-onPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAcAAAAAAAAAEgEAAAAAAAANnAQYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0DkNoYWluSWQENTYMU291cmNlCGF0ZW0UQ29udGVudC1JZIABNmExNDkyNjk5Njc5YmZmNzBlOThhMDEwMDVjNDVjNDIyZDZhZjdiN2UwM2Q5OTc2YTU2YjMxN2VhZjgyZGRjYxxDb250ZW50LURpZ2VzdIABNmExNDkyNjk5Njc5YmZmNzBlOThhMDEwMDVjNDVjNDIyZDZhZjdiN2UwM2Q5OTc2YTU2YjMxN2VhZjgyZGRjYxxDb250ZW50LUF1dGhvciRmbG9yZW5jaWFhdWJyZXl3djkAeyJjb250ZW50Ijoie1wib3BcIjpcInBvc3RcIixcImFkZHJlc3NcIjpcIjB4N2Y5YTQ0OTE0YjFmYWFjMjY5MWIxMDg5ZDY2NjYwNzE3M2JiNjcxZVwiLFwidHNcIjoxNjkxNDYwNjIyNjQwLFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJmbG9yZW5jaWFhdWJyZXl3djlcIixcInRpdGxlXCI6XCJUaGUgSW1wb3J0YW5jZSBvZiBQaGlsb3NvcGh5XCIsXCJib2R5XCI6XCJEZWRpY2F0ZWQgZWZmb3J0IEluIGZpbmUgc3R5bGVcIn0iLCJkaWdlc3QiOiI2YTE0OTI2OTk2NzliZmY3MGU5OGEwMTAwNWM0NWM0MjJkNmFmN2I3ZTAzZDk5NzZhNTZiMzE3ZWFmODJkZGNjIiwic2lnbmF0dXJlIjoiMHg5NzJmODNhMTQxYzMxNjJkMzY1NTM1NzYyNjhlYzFlYmVhZTYwNjllYTc1OGExODhlNGE2YTgyMjY2MThhNGY3NTE2NmQwZjM0MzRhZTAyNzcyYTMyNmM4MGZkYWY0MjUzYThiNTY1MmYyMzgxYjljYThhZDQxMWJjNzNhNGM0MyIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaWVDR0FEK2IrNGNBelBZSE44WlAzUXRua01CbUQrYXJYblc1WFM1c2JFQ1hxSDNTZWhhZFJraTJicExjRjdLR1ZrZDFYMXZYRk5SRFE0NFprcEJEWUE9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4N2Y5YTQ0OTE0YjFmYWFjMjY5MWIxMDg5ZDY2NjYwNzE3M2JiNjcxZSIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDBlYTAzM2YyOGRhZGZjYzhmZGUyZmVjY2EwYWQ2NDg0NWQyOTVjZTViNjhjOGNmZmJhYTM1YWFhMjFjZjU2OGYwZDM5NWNjNzEwYTZiMjA1MDAxNjI4ZDg0N2E1MTZiZWRjOWY0NzNiYjRjODcyZTIxZGM4Y2RmNjZhNTQwNTJmMWIiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEF0ZW1SZXZpZXcgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRWllQ0dBRCtiKzRjQXpQWUhOOFpQM1F0bmtNQm1EK2FyWG5XNVhTNXNiRUNYcUgzU2VoYWRSa2kyYnBMY0Y3S0dWa2QxWDF2WEZOUkRRNDRaa3BCRFlBPT0ifX0BAHhwab4RTCdYnb5NrB2DLmZdf6CQuMKgJ8Bvzo1eucmTy8IT9II8KABKKWWUWkvx6QuUHNKSLp6oH-HG-N8coh3fWdg0EfjVWzQ43lzpHE39eFgKpa5JSXVOb1LBrtJbMcsRvGHyfeCBxaPPGWMDCUovwHGV_hm64xDrQbbu3L80VB7VKVLaYya_SCWtSGczE1mJ0LITEvG1Jjg9alC9nOYOUao7nwjkj06c91TJiecQbPNj_2-CBovXbE4Fl_jXrCARtc26hVYxyTQjdi5kYwcugB65JNA7YVz5ix8BdUy4BHzlOqnuaVHu6Sz4EUhY3sOEeBxW2PG7XDyY2uZqZuOxPEQhskIjB4ff9zqtQJ2zkSgfQI0ak0G4ncssa1wWKLnR2WvC14yX40r8jFSXBP2qalP4rh4-It-LjiEdFqOoMSSYC1D5aOp0SpjeTdMQENEgaFzmvu53Xpz9yBLnk42VCVxmS-9niQEtHrmoOESzzmuy9XdCEx3Ki-2-MrhESMHt4MVpS2AwSXPfyvdArXh2SeM8aSiLJFFR__bz50_OdUdP5ebW8j2bZY92omNL_7Som7MTq7WERHHLcolwI_j4c9v3_80fHnbfj1TJ5DLankQhyzjWCdI5td5X6DCd__yAY7lC0QkpbMy1sJQObodiiIHL2SiuwULYemZDCnibnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAfQEAAAAAAAAP8gUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0HENvbnRlbnQtVGFyZ2V0gAEzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlDFNvdXJjZUgxNTUzMWZhMi0xMjA1LTRmNjEtYjZlNC1jOWY2OGVjZjgxZjcUQ29udGVudC1JZIABYzYxZGI2ZGVhMzFlMzY5N2JlYTkwNGJhYmI5N2QyYTI4NTc3NDJlYTE1NWM4YWJhOWMyNzZlMDM5MjBkODI5NxxDb250ZW50LURpZ2VzdIABYzYxZGI2ZGVhMzFlMzY5N2JlYTkwNGJhYmI5N2QyYTI4NTc3NDJlYTE1NWM4YWJhOWMyNzZlMDM5MjBkODI5NxxDb250ZW50LUF1dGhvchhwdXJ4ZWd1dmFocGEOQ2hhaW5JZAQ1NgB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwiY29tbWVudFwiLFwiYWRkcmVzc1wiOlwiMHg0Yjk2ZWQ5NTlkMGMxZjJiZTQzNWU2YjM2OWM3ZTMyYmM4MWViNzRiXCIsXCJ0c1wiOjE2OTE0NjA2MjIxNzAsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcInB1cnhlZ3V2YWhwYVwiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIlNvIGZ1biB0byBwbGF5IGluIG15IHNwYXJlIHRpbWUuXCJ9IiwiZGlnZXN0IjoiYzYxZGI2ZGVhMzFlMzY5N2JlYTkwNGJhYmI5N2QyYTI4NTc3NDJlYTE1NWM4YWJhOWMyNzZlMDM5MjBkODI5NyIsInNpZ25hdHVyZSI6IjB4ZGZlY2I1NTgzMzAzMDYyNmRlMzdkZjY3OGM2NzdhYjZmOWU4NzJhNjE1ZWQ0M2E3ODk1ZTM5MzFiMzQwMDJmOWRiYmRlOGUwNGQ0NWM1NWQzM2E4YjgyMDM0NzQwYjE0NjcwODIxNzcyOTMyN2UyNTA1MTFhNDlhNzU5NzBkNDciLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRURBc1pQTFF6dUhHWFdKdmhabFkyN2NqMUs4RHpRMUZqMG9HT1BUTmMvV00raTMwT2hNREtZTVZDQzd0bG1uZ0R4RllWbGw2V0MxUzVwOVZ4NzMvZjl3PT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDRiOTZlZDk1OWQwYzFmMmJlNDM1ZTZiMzY5YzdlMzJiYzgxZWI3NGIiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHgzNzBiMWVhODcxZGIxYTQ5ZGIyY2NkNWE4MGExNTdjYWNlZTExNDc4ZDNjZTUzNjBkMTU2ZmM4OGVjNTU2Zjc0MTRjYWZkZjBmYWY3NmI2NjI3NDA4NDUzYmYzYjJjMmZkNzViODgxM2NmNDdiZTFhMDQ1ODVmOTk2ZWNmYTVlOTFiIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBDeWJlckNvbm5lY3QgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRURBc1pQTFF6dUhHWFdKdmhabFkyN2NqMUs4RHpRMUZqMG9HT1BUTmMvV00raTMwT2hNREtZTVZDQzd0bG1uZ0R4RllWbGw2V0MxUzVwOVZ4NzMvZjl3PT0ifX0BAER-LYgedGTQzG5EBqXOQfAGhWyTGp1DbT-e0-C6fTWfhMR1KJ17PYDkXy7KYI5Tfxqf55IKNuFOFC9-lBELG7qNrfRQtZuY0GaephLrTJJyAl6fqRKDWcLwi_8ZoEG66Z5wYsYGPfQXBiY71U5XhdpA9RST0EhVC6wxf9gUCSj_I1buaxgRwOAtCjzWeQTHtFDgEqnO8FSheoqJxfVy0d_dSXoUUtn6A6sRW4FzxVEZUJz6uagmZNuWk4M3jHygIlWe6fEYrqI_O3JvufZX3hDEtkBdGCvK807dnqKyrtkpNxUQ8-_0ubTvOmVHf_PZiO1_NFTyK9fXI-qcNCzIMb63BRYZzaqrjV-IPQ4kgBVkV_Rd8zJmWtLQaC6vU4mZtR4vMQCuIyqWhKCU2My58UQGJ6TUVj-JLqNRTwYy6QOKl_MsDIXiP8H7_6AGBwM8x9FZvY2G00NBFTlrXU5MYaT6IcVaysRLNtMWtRT17PXb83xA1nojwEkbtZP4sCis99Vda-s0469Lie364AYYaRj7Juiyg-oSIbv4PbD0dJilDQBGdf450kV-Y-Orn_WO0n1i74yg4fv0lR1_FB0siQeihMqeKk4fsfTn0v6yg0frD-dIIOqqpEQ1alm0DuSQIAZDIInZfvbIqGwyY3Sc0swBqGcLV4EpYr_WaNYCCQ5ynPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAggEAAAAAAAAP_AUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0FENvbnRlbnQtSWSAATg4ZTIwZDBkYmJiYzhiOGU4YjU2OTY2MDlkNTk4Nzk4Nzk3NWM3NTk5N2EzZTNiMzgyMTRhODMwNjM0ZDUwM2YcQ29udGVudC1EaWdlc3SAATg4ZTIwZDBkYmJiYzhiOGU4YjU2OTY2MDlkNTk4Nzk4Nzk3NWM3NTk5N2EzZTNiMzgyMTRhODMwNjM0ZDUwM2YcQ29udGVudC1BdXRob3Iicmp1aXpmZm9mdmlraWVhOTQOQ2hhaW5JZAQ1NhxDb250ZW50LVRhcmdldIABMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZQxTb3VyY2VIMTU1MzFmYTItMTIwNS00ZjYxLWI2ZTQtYzlmNjhlY2Y4MWY3AHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweDc4OTRmNWYyMWRmMjljZDlmOGVjYzhiZjRhNDMxZGM5NmY4NjMwM2JcIixcInRzXCI6MTY5MTQ2MDYyMzE4NyxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwicmp1aXpmZm9mdmlraWVhOTRcIixcInRhcmdldFwiOlwiMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZVwiLFwidGl0bGVcIjpcIkZsYXBweU1vb25iaXJkXCIsXCJib2R5XCI6XCJSZXdhcmRpbmcgZ2FtZS4gSSB3b24gc29tZXRoaW5nIG9mIHZhbHVlIGhlcmVcIn0iLCJkaWdlc3QiOiI4OGUyMGQwZGJiYmM4YjhlOGI1Njk2NjA5ZDU5ODc5ODc5NzVjNzU5OTdhM2UzYjM4MjE0YTgzMDYzNGQ1MDNmIiwic2lnbmF0dXJlIjoiMHhiYjBmMTJiNDE0ODE2ZWYyNWY4NzAxMDVlODc4MDc1MmE3ZGEwZjFjOGRmNmE1NjkxZTBlYjE5ZWM0NjYyZjYzOTA4MzJhODdhNzgzYzk4NzA3MTQzMzUyZmI3MDE5MzFkYWQ4ZmRjODA4OGM0YjY0MDdhY2M5NTIxM2VmNGEyMCIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFbWYwUXdFejBUemFkdnNKd0hxVm42RHhxWU0vcE00ZU9YWEJLOG95SW0wRDZBMHF5cGQ2SG9NWVNNTmJoYWtrUnRMYXJ5dWZhakMySEdXZnJEOExRTVE9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4Nzg5NGY1ZjIxZGYyOWNkOWY4ZWNjOGJmNGE0MzFkYzk2Zjg2MzAzYiIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweGEzODMxN2VjODBkNTc2MTVlNDMzM2E0ZjY3NDllY2NmMjRjNjhiMzQ4ZDNkOGU1MDg1MzU0MWZmYmJmY2M4NDM1ODY1MzA5YWFiMjFhMGQ1NmYzZmM4ZDQzOWNmMGJkN2Y2MDNmYmZmZTM2OThiZDMyMmI3OGM2ZDJmOWZkMTQyMWIiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFbWYwUXdFejBUemFkdnNKd0hxVm42RHhxWU0vcE00ZU9YWEJLOG95SW0wRDZBMHF5cGQ2SG9NWVNNTmJoYWtrUnRMYXJ5dWZhakMySEdXZnJEOExRTVE9PSJ9fQEAGixt6jqbfYhMDZuaEb-iQnO244jLCtg5ByP6kKS2gJzDS7kcKwwx9Kq1wnw8lU_mBlJbtALCsSjvroQKsmnHVR4CNtiBCiAJiBg_nVxLPNsh5aJm1nTHAil3eKeD0Sj6rBKwOAPgRcse-J3i4evxRZ5SoviWCBxdyW2LTD4yMCBqbyjX9b05xfXFWbRInsil5ODU49L3Cp2dN4dy0uWYS3xgvOv9dS7FcmGH_PtTMCAdn_EYJ0ToaBHnWLt_FCn1yQ3UeKyPXCao4tmLVsLCjZCCEsbZD5qZyXg_FNsEASyhsLS4pYS0aneJc2FRG4Iss0-efgLHDYphaLVALLSelXn-DTlGunwaHZO_bv23v4VG0ehkHOds4M6zZB6KVJFwCrmCTQJ-mGlw4I3UVCU7Dxu0xiN2LEfX0nb_Dqd8TVVnjXPLeyxrtUBdXXtVLjjB5rKdGz3F8pb_05AI0vHTUqSOwnCuu02QgKvMilLcshscmlvUfpTfmh-mHGBVFZGN-H6KvcOtcR6IuEOoUkavZ23jqwOUvhOGUiXwJqQFsDCtcMBNy8Btk8P3Nw11hHUSakrr3dA_6YgrLFhhP0DT72sXO6kByCZpWQ0sa65wLk1GPShAyuF3T9ei2jtlFBDghNAm-0-VXZXi6vvmEFx3GH4x4wQr-_eb2tZSAnyQ4HGc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAACAAAAAAAAACAAQAAAAAAAA_4BRhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QUQ29udGVudC1JZIABMDIwZWUyNjZkYjVmZmI1Zjg2ODMyMWU3NzVlNTA5NzJkOTA2MWM2OWI0NDRhMzZkNDg3NGI5MmNhZGE4ZDExMhxDb250ZW50LURpZ2VzdIABMDIwZWUyNjZkYjVmZmI1Zjg2ODMyMWU3NzVlNTA5NzJkOTA2MWM2OWI0NDRhMzZkNDg3NGI5MmNhZGE4ZDExMhxDb250ZW50LUF1dGhvch50Z3Zha3hnenJiZmhiMzkOQ2hhaW5JZAQ1NhxDb250ZW50LVRhcmdldIABMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZQxTb3VyY2VIMTU1MzFmYTItMTIwNS00ZjYxLWI2ZTQtYzlmNjhlY2Y4MWY3AHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweDMxMWI0OTBhOWFkYmZlMDkxZDYxYjkxNmQyYTA0ZTE5ZWI3NTM1MWJcIixcInRzXCI6MTY5MTQ2MDYyMjc5MCxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwidGd2YWt4Z3pyYmZoYjM5XCIsXCJ0YXJnZXRcIjpcIjM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2VcIixcInRpdGxlXCI6XCJGbGFwcHlNb29uYmlyZFwiLFwiYm9keVwiOlwiU28gZnVuIHRvIHBsYXkgaW4gbXkgc3BhcmUgdGltZS5cIn0iLCJkaWdlc3QiOiIwMjBlZTI2NmRiNWZmYjVmODY4MzIxZTc3NWU1MDk3MmQ5MDYxYzY5YjQ0NGEzNmQ0ODc0YjkyY2FkYThkMTEyIiwic2lnbmF0dXJlIjoiMHg1MzkyNmExYmMxZjAyNTg0YWRlNWQ3YmY0ZjMwNDRjMGZkYzBlYzA3NDk0NzdiNzlmZDZjMGIzZDUyNmUzNjBkNWZmMTE0MGFlMDI4M2QxMGM4OTY4MDNkMjQzMGM0YmQzZDM1MzBmYzdmYWZjMjExYzVlZWRmNjI5ZTViMTY5MiIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFeUg1YnBxSk00bjYrOFByVkM1SzU1KzlqWUg1Y0RSMmpDN1l0QnRpVzEwdFlzOXFJQ0MrVXdTSnJnUFJ3K2JkWTlUdTVQV3N2NWhQbDA1QUdCalIzYVE9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4MzExYjQ5MGE5YWRiZmUwOTFkNjFiOTE2ZDJhMDRlMTllYjc1MzUxYiIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDJjODIzZDM2Zjc1OTI1NDhlYzIwMjFmNWY5MzI5YjgwYmRjYTE5NzY3Y2E3M2ZiMzRkZDA0NThkZWNmNjA2NGU0ODQ2NTVlMzdhNjI5NmMzNzIyZjU0MDA2MmIyOGZkYTJjZjViYjQzZjI5ZWI3NzcyOGI1MjVkMWRhMDQ4Y2M1MWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFeUg1YnBxSk00bjYrOFByVkM1SzU1KzlqWUg1Y0RSMmpDN1l0QnRpVzEwdFlzOXFJQ0MrVXdTSnJnUFJ3K2JkWTlUdTVQV3N2NWhQbDA1QUdCalIzYVE9PSJ9fQEAVe22xpr0te5AkkiA8f50iTw6qBGEUPe2Sm2vrdXcthcfV7pL8C27q2ON0m5CYzs137yK3kfFXxpkmEEzV1Ip17EwuNuofbdiw5uPm3HLp16N2q5uThzvz33xtv9AvcyYtb85rV9iuHdmGLv5BGZD9S333EragGxt9GTiaT-VCmDNP0g9D-FcBCJsnIBRV4ixTFJ95UBMTIXVYD6FiDh5HzeU884BMcHeo_etERYxRgT8qQbRv3um5-Cs0GYEeK7_CY3xNTrLXH4xs9QztMWzH9J9jauyPom6hH3ZhKToISrUY_cQrVeXYaVtVcaxFPEam4G4G-LNw1Y-xC6ccEOLgbxZyFk9s6F3RM7NyB_fhKHhBnKjtj6cIjVuRakTnXgi-S1p82Tr1SQFFq90HKsBdnvCAGeg4w4imxeYrRMqb9IOuHq11PLc5b4Rwzm3PUeDQ924HWcp_PKAsM9xFiBa4BE4P89mlAsK7hEF2vSqHt3vGrT-qyyM1BNS2b4_Nc5J9OijZlVrU1l_8FL7gve_p0Fw17ZoVYNQ5XiyQWyxfdlUQVwpKHvTkM9mOp64P-XIjM-VoxcaG00GvFVNTQjpASAA4_ATqt0W19hO6HnqJK6-1rYBLHu_vp46QL9oSplIud6sUu05rkyyl5a7IJ9d0CEQWDBwWMMrWSudsADSV3Oc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAACAAAAAAAAAB9AQAAAAAAAA_yBRhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QUQ29udGVudC1JZIABMjMzNjNjNzlkYjc0ZWU3NjRmYWRjOTc4MjZmMzllYzhiZTk1ZDAxMTFhYmUwZGM0ZDQ1M2ZiOGMwY2QzNTU1YxxDb250ZW50LURpZ2VzdIABMjMzNjNjNzlkYjc0ZWU3NjRmYWRjOTc4MjZmMzllYzhiZTk1ZDAxMTFhYmUwZGM0ZDQ1M2ZiOGMwY2QzNTU1YxxDb250ZW50LUF1dGhvchh6M2JsbWs0M2R2d3AOQ2hhaW5JZAQ1NhxDb250ZW50LVRhcmdldIABMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZQxTb3VyY2VIMTU1MzFmYTItMTIwNS00ZjYxLWI2ZTQtYzlmNjhlY2Y4MWY3AHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweGVjNTAyN2IwODgzNDQ3N2UxYWFhMGE5ZDZjYjA0ODBjNDMxY2M0OGNcIixcInRzXCI6MTY5MTQ2MDYyMjQ3NSxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiejNibG1rNDNkdndwXCIsXCJ0YXJnZXRcIjpcIjM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2VcIixcInRpdGxlXCI6XCJGbGFwcHlNb29uYmlyZFwiLFwiYm9keVwiOlwiU28gZnVuIHRvIHBsYXkgaW4gbXkgc3BhcmUgdGltZS5cIn0iLCJkaWdlc3QiOiIyMzM2M2M3OWRiNzRlZTc2NGZhZGM5NzgyNmYzOWVjOGJlOTVkMDExMWFiZTBkYzRkNDUzZmI4YzBjZDM1NTVjIiwic2lnbmF0dXJlIjoiMHg2NDA3MjdhMDY3MGM4ODg3YTBlY2RkNGNiOGFlYzc3ZjYzMGQ4MGZiYmU2MTI2MzIxOGMyYjgxZjdmZTQ5ZTk3MDg4MjFlMTYzOWZjYjEyYWI2NjE2Mjg3MTQyZDkxMDgxNzE1MWNmMmQ0OGY4MTBmYjUwOWY1Yzc3ZmRhMjExNSIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFMEo5VHBSczlCcWJsMkgreldzcDNYOHUxUnVVYkpNdWZ6NlRUVU9pSnpTNThhSElBaUFyMkI2emwwaElTWnRsV3VvWndTQWNlakRmTlgwUllTOGZsK1E9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4ZWM1MDI3YjA4ODM0NDc3ZTFhYWEwYTlkNmNiMDQ4MGM0MzFjYzQ4YyIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweGNkMDVjODk3ODljMjZmYjgzMjFlY2RhMTVmMGU4MWI3YzYyYWQ3YTdiYzAxZmUzY2ZlNmVjYWJiODViM2M5N2UzNjg0MDBiYzEyN2RjMjcxNTVhNTExNmU0N2M5ODIxYzM3NThmNDI5OTJiZjQwNjliYzlmOTQ3YTkxMTFhOTNkMWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFMEo5VHBSczlCcWJsMkgreldzcDNYOHUxUnVVYkpNdWZ6NlRUVU9pSnpTNThhSElBaUFyMkI2emwwaElTWnRsV3VvWndTQWNlakRmTlgwUllTOGZsK1E9PSJ9fQEAjS_ANDSJ9qPGYwfqRMdaCw3jgEN2Gi3vXRIOHCnwOBSr9tVwn9kF0uRmjFgDQWpupyxX0XInkS8VsnU28L2jwAsvwg48_byHq5Eic-0jarZJgb17km-g1If85F8AJ3oZnifrCr86dhSbKq9eyMHb32vLAT5pV6DLzMYgOMag5l35l3_f75CPwDJeuZauv31cM0IY98Wt7m5P_K0edrB_UaY6VmCBR7FiuzCXqsDd_wTY6ynYI11eP1p-hNgSIUvA-ObmIP9tkvdT57PSLi4NuTk3RlLSLkFEhImZGjQ_JUyVV72HuYa5txnjBQQQ-36YL2MGejSdmyJBOHBMiYvge_11_zdsH0u-kNpGRR1hITVgRWQ911IUE3kjAq-qPdlVsmajhwZ1MDGAEdt3j6yug1_x3GKwYljPe05KmkdWfj_bNtN-5Xur9FSGgnMydBCHu75RRGytjtcLxadyFxojb2vBTGSZiLNXodZ8Hn9oPWmeCsg7sDskN2EZXmJrNkDFmYs627oqo4vOSHIkIvzNCmPYeZBE0qvGNxRgj_Sr3DAVPOf4ss_YpapS29jcd_qiTlnthxj7WG0YhKrw98YhTPeypUzEXUyekrTgW6OWlUnRjlYMwfPyEAuCUDFcCBQXfFColRD0-R03Hv1YiiUGf57nnnNAsWyD00Imv0lDzkSc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAABwAAAAAAAAAMAQAAAAAAAA2QBBhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QUQ29udGVudC1JZIABNDQ1ZjFiYjEyYmNiMGUyOTJjMmI2ODY0NWE4ZmZkOTJlMDg4NjY1ZGQ5MTQ1MzUxNzE1NDI2ZDRiMDMzNTdmMxxDb250ZW50LURpZ2VzdIABNDQ1ZjFiYjEyYmNiMGUyOTJjMmI2ODY0NWE4ZmZkOTJlMDg4NjY1ZGQ5MTQ1MzUxNzE1NDI2ZDRiMDMzNTdmMxxDb250ZW50LUF1dGhvchgxZXc4dnFoNW9wNTgOQ2hhaW5JZAQ1NgxTb3VyY2UIYXRlbQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwicG9zdFwiLFwiYWRkcmVzc1wiOlwiMHg0NzY1NjBjYTIzM2Q1NGEwYzdiZDI4ZTIwMmNhNThmZDFiZWYyY2ZhXCIsXCJ0c1wiOjE2OTE0NjA2MjI0MDYsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcIjFldzh2cWg1b3A1OFwiLFwidGl0bGVcIjpcIjExMTEyXCIsXCJib2R5XCI6XCIyMjIyMjIyMjIyMjIyMjIyMjJcIn0iLCJkaWdlc3QiOiI0NDVmMWJiMTJiY2IwZTI5MmMyYjY4NjQ1YThmZmQ5MmUwODg2NjVkZDkxNDUzNTE3MTU0MjZkNGIwMzM1N2YzIiwic2lnbmF0dXJlIjoiMHhlMzQwZTdjNGJlOThjMGI5ZDFhMGY0MTZiN2MwZjZjMGQxNmIwYWY0ZDU5ZDA2NTBmMmEyNDUwYzlmMzczZmE3ZTJmNmMzYmIwZmY3NGQ5YzFmNmEzMGVmYzNlN2U5OWRmMjdiNzQ0MWQxMGNhNTE4YmY3NmFmNDFmZmU3NDVmMCIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFZzBXZXVmSjlsVlIwbkI4UmphcTQ5Y1IvZS8zVC9tb3FrRmVUZVRwOC91MXdVMEhNYWZPQ0hiYXVQdnIxY2JQV25uc1NwRS9wRFNwaFNxM25qRGdIakE9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4NDc2NTYwY2EyMzNkNTRhMGM3YmQyOGUyMDJjYTU4ZmQxYmVmMmNmYSIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweGRjYTM2Mzk2ZDU2YjYyOWM4YTllYzI2MmIyNjBjM2UzN2UxN2EwNjUyNDgwZmVmYTU1YjZjNjhjNzYyMGFiY2IwYThkYjU1NDU2ODU1NjQxY2FlOTQ4N2Y1MjQxNTFiZWU0MzU4NjNlNWFhMzJiNjYxNDVlNWQwMmNmNWI5YmIzMWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEF0ZW1SZXZpZXcgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRWcwV2V1Zko5bFZSMG5COFJqYXE0OWNSL2UvM1QvbW9xa0ZlVGVUcDgvdTF3VTBITWFmT0NIYmF1UHZyMWNiUFdubnNTcEUvcERTcGhTcTNuakRnSGpBPT0ifX0BAF5tG_z6kTUSr0cm1CpC4QUD42yGABVMBxe5C1rRHTxzEe3yspvU5_PIY_ydnMRLIv3QbUUZ_GqOgd2QDiB2O-BzGtz4xqhNQAP62eEwcs0NbX9npyDvR5Xy9UMH5HI0XCQuNGyR12AxuB6J6dJxkLR18HKRGh_4sMN_VWq0zxEjexiuLkd1J0XwG5CwZPuC9tj2Cnj11P2KOluZY8X-vTFrXF3BKsJfx8oa8xwwo56863gxfkgDl3MkQJFE4r-l6if8KmRr0DBNlg8G_nLmVvyY0sOBkRf5W6wlV1Sf_8C3dJh0SjP0d5ijIyu2kL2j1PQyixUnLxz-ja7utT8fvB-2RITM1ddVrbgwv99cT1jk0nSKu_1qvYy8HyshiY6siSYrR5-8TgYIT6W72vcHqZjQATqfWg4P3uFkfx5bVVNvzc3U6ED9VZowhbdOciRxECiyeH3pljRPlVzQkyWf3m641gQaZ_6N60zOMtICO0rOkSDeB4eJvqQ8FTo67Fkntw0iQfclZI2l-WOGP4GlAfK2sk3_AkSAzXnEOEUGr05nw01XdHD9UjGukHdhSOGSTDFgY0A1kkxVX9SLG3H_ZfJ0yCfTZh-SNA9G5HMW_91RzMF5Mq4uGn-CxqOGhHMBq6w77EjS5cRGS8Y91d4RqCW-2hufD9Q_pKj4lUga1k5EnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAfQEAAAAAAAAP8gUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0DFNvdXJjZUgxNTUzMWZhMi0xMjA1LTRmNjEtYjZlNC1jOWY2OGVjZjgxZjcUQ29udGVudC1JZIABMTFlNTc1NGJkMmVhNzAzODhmZWQ3MzhkYjg3ZWU3NjRmZjNiNzY2ZjA2MzdhZGVjYTJhYjUyYWQzODUwMDBjMRxDb250ZW50LURpZ2VzdIABMTFlNTc1NGJkMmVhNzAzODhmZWQ3MzhkYjg3ZWU3NjRmZjNiNzY2ZjA2MzdhZGVjYTJhYjUyYWQzODUwMDBjMRxDb250ZW50LUF1dGhvchhlZm9qdXl5NGF2NncOQ2hhaW5JZAQ1NhxDb250ZW50LVRhcmdldIABMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwiY29tbWVudFwiLFwiYWRkcmVzc1wiOlwiMHgzYTAwNjVlYTI1NzA2MzA2OTUyOTI1NjI5MmQxOTQ0NmIwNTI2NDgwXCIsXCJ0c1wiOjE2OTE0NjA2MjI2MTMsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcImVmb2p1eXk0YXY2d1wiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIlNvIGZ1biB0byBwbGF5IGluIG15IHNwYXJlIHRpbWUuXCJ9IiwiZGlnZXN0IjoiMTFlNTc1NGJkMmVhNzAzODhmZWQ3MzhkYjg3ZWU3NjRmZjNiNzY2ZjA2MzdhZGVjYTJhYjUyYWQzODUwMDBjMSIsInNpZ25hdHVyZSI6IjB4NmIzOWM3NWE2NTJkY2RkY2MzOWI2ODRhMjE2NWQ4MDM2YjM3ZDVhMzEyNzU4Zjg2M2MyN2JlNDMxMTlmMDc1M2YzMmI0NTlhOTYwY2MyY2U4OWI0NGQ2OTQ1ZGRiMGUxZDMzZTQwZjQzMmJkZmNmYzdmMGRlYTgwZDQyMmQxMzUiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRU1RdVhEWmVoZzZ4dTVFYkIyVVhSMXNlTkdkYlVXbkQydnlSSVM5Tm42cmxLb0IzWGZSbkkyaDcybWhma2dPdlVkL0lBazRMdU5kTENoTHNKaFl1Zk53PT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDNhMDA2NWVhMjU3MDYzMDY5NTI5MjU2MjkyZDE5NDQ2YjA1MjY0ODAiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHg5MDNhZTI4MTc3YWY3OGIxY2Q2YTUzYmNiNDA2ZDZmMWE2YzVlYTljOTE3MWFjZGIyZjc0NWNmNzY3ZjUyYzAyMjY2YzIxNDYzZTM4Yjc3Yzk4NDA1MWQ0N2E3ZDI0NTE4NGI5MWEyYjM5ZjM2YTg2NzJlN2U1OGIxYTRmZTA0NjFjIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBDeWJlckNvbm5lY3QgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRU1RdVhEWmVoZzZ4dTVFYkIyVVhSMXNlTkdkYlVXbkQydnlSSVM5Tm42cmxLb0IzWGZSbkkyaDcybWhma2dPdlVkL0lBazRMdU5kTENoTHNKaFl1Zk53PT0ifX0BAAeYocX7Tk16BmNXXb4MzoM4xgy3COlpbKLqjP-BdHL6wGd7LecNcw7tsBs-sckTa05SVBzsnDR3t0S097ss7d3UxqqjAjf6QuR_K_UMD98mK3F1XLLWPe2WUR4SADtS8kXRRabLk45iecpe4i4hQf6R-IIw2kJKg3f54IU0pE-E0gNH-wG0YIaLfpZRLUGvkkWsHPh31bPott62_pYqeIuE9FDrlnhkUyBlkxjBVkiXe4vfduOyvQFacKOdmDtDhLcNEkKAqlW1AcdC0D-n3k9lmsTFwO2CtSZ_KSQjptGgrlK3cI_TR6jBU9c-jyh_WHYYqSDfUjxS5Cp1jFPmGDvuR8X3HiUO1vC5ipRIwB_skNV-YWNtTibdhQOeJhw8PzJbuXJ-c9UVxSn4gIr5erT1E4Ab_OKSQZQ2kOCUTw4AISSJHuKLMX1BWFagwoQumZ8BQWsjfu1x6kZwtuhrxe6GcZu9hg2QWC1sCZrgqOvJmPeYEvkP2eDPsC1Ae-YqGqrdVZmpPAWWk3OvzymtmkP2ieP3yUI3P7SiNOHKfHDQlc_cBKkFYyhj_ZOqGvundRm1KyMhaYW4EQ07mB3O2URqmT0uqiVRbTMhGeZ8mB1XmPVC3ERQa1k24ZoELn6BmcGfdtp8ISobfVYXE6CizI7xUcXIBtgvjX7LUpscpUTxnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAfQEAAAAAAAAP8gUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0HENvbnRlbnQtRGlnZXN0gAFkZjg2OWU5ZDhjYjg2ZTY0OTc5N2VkNjRlNjk3NDhhMmQyZWZkYjkzMmY2NTc5ZGUwZDdhY2JlZmJkYmZkY2EwHENvbnRlbnQtQXV0aG9yGGs2Mjk3MjcxMjk4cQ5DaGFpbklkBDU2HENvbnRlbnQtVGFyZ2V0gAEzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlDFNvdXJjZUgxNTUzMWZhMi0xMjA1LTRmNjEtYjZlNC1jOWY2OGVjZjgxZjcUQ29udGVudC1JZIABZGY4NjllOWQ4Y2I4NmU2NDk3OTdlZDY0ZTY5NzQ4YTJkMmVmZGI5MzJmNjU3OWRlMGQ3YWNiZWZiZGJmZGNhMAB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwiY29tbWVudFwiLFwiYWRkcmVzc1wiOlwiMHg4ZDJhMzU2MWQ5OGNkMGJmYzUwNDY0NjQzNGY3OWJmMzM1NDRmOGQzXCIsXCJ0c1wiOjE2OTE0NjA2MjM1NjgsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcIms2Mjk3MjcxMjk4cVwiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIlNvIGZ1biB0byBwbGF5IGluIG15IHNwYXJlIHRpbWUuXCJ9IiwiZGlnZXN0IjoiZGY4NjllOWQ4Y2I4NmU2NDk3OTdlZDY0ZTY5NzQ4YTJkMmVmZGI5MzJmNjU3OWRlMGQ3YWNiZWZiZGJmZGNhMCIsInNpZ25hdHVyZSI6IjB4YmU3NDljYTI2MmUyMjdiMjY2ZGVmZTU4OGU1Njk4NGQyOThjNzYwYmJlZTkwMWRmN2UyNzg2YjFmNDIwOWI3MWRiNDJkYjFmY2I4YWE4MDkxMDcwYTAzMDQ0MmM3ODk0NWUxNzhjMDkwYTUyZjViYjQ2NDU5OTgxMjJjNWZhNGIiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTJ6M3dPMlovMzZVL2VCY1hZRDRrd0E1Y1BPYTdJSHBQWXIraHNtdk9TQUczRldiOVQ2dnZvKy9VZ2hjV2RSTndldlBPSE9oKzM4aWl5a1lTZUxlbVd3PT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDhkMmEzNTYxZDk4Y2QwYmZjNTA0NjQ2NDM0Zjc5YmYzMzU0NGY4ZDMiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHg1NTc2YWJhODg0YWZlOTQ4NGI3NDMwZmNjNWRhNTVlNWY2YzhlN2ZlZjZmNzk3MDQ3YjZjNGFiZWJjOGU3NDI5NmEwYWM3ZDg4YTI1NzZkZjFiN2EwZDQxNzFlZTRhNThlMWNhOTA3MGRkYjg4ZGY0ZDUzNjE5MzQ1OTIwODI2NDFjIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBDeWJlckNvbm5lY3QgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTJ6M3dPMlovMzZVL2VCY1hZRDRrd0E1Y1BPYTdJSHBQWXIraHNtdk9TQUczRldiOVQ2dnZvKy9VZ2hjV2RSTndldlBPSE9oKzM4aWl5a1lTZUxlbVd3PT0ifX0BACqKIykjdRZ7vVeH7oUdxMWH-OifIAKwKKcsMS1QLX5dJVfsutQyXfnJjYAK0VKxXTw5FKYEsYWYjgc7DZFL6WPVwWvMTcUA9Opmc1f7qtOwiU_4j7F8bRCpTdw8Wzx-WDX1-l35Brb24bEI-m2hV8ahMeP3DRb0lMRou22SOgzwC9E4I5vlEfak5ANSIdXznBbSs_ydGNnmnvrCwTRgBTuDVFNRX6FdV_V7DsaWumnDujmR0q6XNXwx79ZIp7x0eTvbUM0Ih0DqFPcerAZtlCNYVUdGpI3Ea9hMqiKQgjYKYi6SmwOcoq7D7WSNKXtDh6AavyFDje6SKBCWIZYh-mG3be4XUG8-niZoVgBuzdgSwXaSv_KgPOiQKH-kHK8eg1F5YqhXz3r6r42LbPpCZO1JuxaMqFK1pTRh_4jZ5PL5gjfbXjyEAApmdZf_UHZkSQ5mJ4xgBMBPSr-SXqOx3YcVIDBT_HhVaYXNT8mpsshLpo7nqir2nxdi7VROjvPZRTB3SF5T9z0JvN1_vuhNfVjTkLYWS_KfRduC3SAa5lMupv46lhMNXb4SC-Kmp3KcX7LoonkQ7Ee_qzjybeJCntpN4BMaRktf03UTU7CDhvsuxiPvDgLTBq0i3s_cuB2d2e0cN0kGgpfWxKnBhx8YgecXIXNoiM64pZNkfUpRRNjEnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAfQEAAAAAAAAP8gUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0DkNoYWluSWQENTYcQ29udGVudC1UYXJnZXSAATM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2UMU291cmNlSDE1NTMxZmEyLTEyMDUtNGY2MS1iNmU0LWM5ZjY4ZWNmODFmNxRDb250ZW50LUlkgAExMzgxNjQyZmEwZmVmOTE1ODZlYTIzMmU2MDEwMDcyODFmOGQ2NmU5ODBiYmE5NmEzNmYxMTMyODNjN2EwOTAxHENvbnRlbnQtRGlnZXN0gAExMzgxNjQyZmEwZmVmOTE1ODZlYTIzMmU2MDEwMDcyODFmOGQ2NmU5ODBiYmE5NmEzNmYxMTMyODNjN2EwOTAxHENvbnRlbnQtQXV0aG9yGGk3bnJsdWI2cXl2bQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwiY29tbWVudFwiLFwiYWRkcmVzc1wiOlwiMHhmNTlkOTY1YTQ5ZjFlZmQxZTA2ZGVmZjUxOTRmZWE4OTQ1NzEwOWUwXCIsXCJ0c1wiOjE2OTE0NjA2MjMzNjEsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcImk3bnJsdWI2cXl2bVwiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIlNvIGZ1biB0byBwbGF5IGluIG15IHNwYXJlIHRpbWUuXCJ9IiwiZGlnZXN0IjoiMTM4MTY0MmZhMGZlZjkxNTg2ZWEyMzJlNjAxMDA3MjgxZjhkNjZlOTgwYmJhOTZhMzZmMTEzMjgzYzdhMDkwMSIsInNpZ25hdHVyZSI6IjB4NGI5ZDgwMDlkOTk5ZDk4ZTE2OWM0OWVhZmM5YTljMWU1YTRlYThjNzM0YWIzOTMzMzUyZTM1YWM0MGM2MDkyOTc2ZDQ0NGM4NjEzNzNjY2JjMmZkMTk3NzNjNzczYjMxMzhlMTcyZmQyOWUxMTQ5MTUwZjVjMWNkNzdmNWQ5MGMiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUZMOVppSHM2YU5ram8xUGZENlEzempUZDNaWXRYaEZnaldiK1hoRUFPU3VnWEVLaG9HbnExTlZ6cVdCUmtoUzBlUVhOU2lDNFNaWEMreWdIZGZUYlNBPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweGY1OWQ5NjVhNDlmMWVmZDFlMDZkZWZmNTE5NGZlYTg5NDU3MTA5ZTAiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHhmMTAxYTM2YzQyY2VkYWRiYTY5ZDgxODFiNmY3Zjk4Y2E3YTk1ZmNmYmJkZTdiODhhOWMyNWFlODU1YTllMDIwNjY2MjNkODVlN2FkZDI1NTFmNGViZDAzMzE1MTQxMTAzMWEwYzdiYTEyMGE1MGFkMDQyYWNjM2YyOTZmYTY1NzFjIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBDeWJlckNvbm5lY3QgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUZMOVppSHM2YU5ram8xUGZENlEzempUZDNaWXRYaEZnaldiK1hoRUFPU3VnWEVLaG9HbnExTlZ6cVdCUmtoUzBlUVhOU2lDNFNaWEMreWdIZGZUYlNBPT0ifX0BAJIV9ru-TGGcmlue53pB48ubXZH_Vr_DLruV4_hsFH4oZp58ukQk0Djvp6Rp_ek3UFurRO0Zd5knd-ZYPdqSnscOQmC7IU4-RALBvKPn8Qe35gg_EvBPiT542qbvY6Us9H0atkuVU78coX8U07LuOg9OUXInA6wJHqmATDSzHCfRQTHqTkZtppPhZMJZ4xvvSAU1bzpIxRA40bnARhIFnplaf1Kjv_NRX_WXl9LMbWvHz_bKa1JyMAoxaIMh8Lp_u_qr2OZXh-i7_dEClCbjsXurFoCOexZVEFaRtVLMm9c5jK4I4Q1f75KEkL-bXuEZVRKDhVgYimsjVD8Lpje16sqhg9AHqRFOJ5ahkXLxYaske-wMUMNaW48O3H0ylCqOacT9eCaNr5Ywc5oDlpFUk0nvdOVqvCTc-ybgiDfxmwykOIVvyYOHFQsUOgs_VuZEb7QsRojVkn_8sPbJ1QKMhy6ZWQN_xc3MVY-580juS-TOPZd1PAtW-2AjezkEeGdBW6J_U1KSXREUylLXczT1RP02mZp3BklCLqNWz1SmmiHRCGb4Ukl-7LKdpeLG2EvgNPOuZKcvaeUKzv0sZ4QHu-FrxCuJNupM6vAJNRCTfhAfn4nVmPNRCuFsC2QqXJkIMVfYp3hLX35HV3PiZ1c6OlbQ5tzVeVJwCuwgf85EhCfqnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAcAAAAAAAAADAEAAAAAAAANkAQYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0HENvbnRlbnQtQXV0aG9yGHp1dXBta2JuZXBudQ5DaGFpbklkBDU2DFNvdXJjZQhhdGVtFENvbnRlbnQtSWSAATk2MjIzMzVlNGEyZmQ4ZDZkMzM5ZmM4YzBlMzRjN2I1NWI4ODM0NzM4NjI4NDM5ZjFlYzEyYjRhZTkwYmVmNTEcQ29udGVudC1EaWdlc3SAATk2MjIzMzVlNGEyZmQ4ZDZkMzM5ZmM4YzBlMzRjN2I1NWI4ODM0NzM4NjI4NDM5ZjFlYzEyYjRhZTkwYmVmNTEAeyJjb250ZW50Ijoie1wib3BcIjpcInBvc3RcIixcImFkZHJlc3NcIjpcIjB4MmQ3ZDhjOWYzMWE4OWQ5MjQ4ZjY2MjkzOTM2N2M4OTY1NzBmZTg0OFwiLFwidHNcIjoxNjkxNDYwNjIzNjQ1LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJ6dXVwbWtibmVwbnVcIixcInRpdGxlXCI6XCIxMTExMlwiLFwiYm9keVwiOlwiMjIyMjIyMjIyMjIyMjIyMjIyXCJ9IiwiZGlnZXN0IjoiOTYyMjMzNWU0YTJmZDhkNmQzMzlmYzhjMGUzNGM3YjU1Yjg4MzQ3Mzg2Mjg0MzlmMWVjMTJiNGFlOTBiZWY1MSIsInNpZ25hdHVyZSI6IjB4NjIxODY5YjQ5YjkwZjcyYzlmYzQyZGU3MTMyMTJhYmFiMDc3Mzc2MzA4OTA4ZmFjMjMxMjQwNmEyMWU3MzFmY2RkYzNjYjhkMDg1NTkxYmRiZDU0NWQyNzYyOWJlY2Y2NTJlNTMyZWEwODk0ZjIzM2Q2MWEwZmZmNGJiYzRlMzIiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVJ0MEVUQVNrVlN6U1BEWXFDOC9jeEpINDFmbEJpQnFqdUJuZGpYbmJZbEdiTUw5SVdIK3B4M25veXZ6a2RKSkVNbHJXRzNEVHdRNHd0SFlaZ2Y0aURnPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDJkN2Q4YzlmMzFhODlkOTI0OGY2NjI5MzkzNjdjODk2NTcwZmU4NDgiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHg1MzBjMmM1NTVhNzZiNjBkOWM0ZmY1ZTJjMzI0NWFlMjEyZWE5MjU1OTRkMDZlYmNhNWRhZThhMTg2MTJkYWZhMmY3MzA0ZjU3NjcxMzMzNzg5NmUwMzNlMDNiZWM4OTQ4MTZhYWYxNGJkNjYwNjE0NDUxMmM2NmU3NzJkNzNkNjFjIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBBdGVtUmV2aWV3IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVSdDBFVEFTa1ZTelNQRFlxQzgvY3hKSDQxZmxCaUJxanVCbmRqWG5iWWxHYk1MOUlXSCtweDNub3l2emtkSkpFTWxyV0czRFR3UTR3dEhZWmdmNGlEZz09In19AQBePN4annyUzab45W_nr9HokFZKBc2RdXXnJeSh9LX2tvUTTdyXFSWiGf9TNeKzvZvFmddjiHlHG2l0kIbzUBoZwY6cfN2RvVviW1VqnS-Xwm7uoJb-CrDHE5qj3rG8vZcwMvC0lziU-R21RIaO7Qw8Mq8_l8q699HIr5FRqsiC2OESp9bRTURCHK0njQ2sMox--XDuDAzfVpSj1gH0PA9s0a8gmjCMHGCpBZXUtyURfUYs405fpju4YpB0An_lWe8SID1rW2oypd-HSObwEHJEVWGNFymZNZWhoKLHG4dU0ChNWOIJCO8BJfeJVNJJkvY1NKOJDa_sVKJUoCcUdAUOyZNpue2vulivrpYuvyd0URsCnWZMmrqZwFDpYpJixnYDMO7R8VrvudTzeCz93zbcwOFJi5qNi0ALAp8lvN8O-BVKicHm3mpV9fmxVWF1ij8w3b8MZO6aBr0L3wTA8oqkIhc3igyXr9n_9FstHdmoHUZy7v7S79ukECJexpakCMiJVMcZNxbb2Mc6QPdC1zDOpacuDGtLGrVJlPEGk2R5AcJhcaf_B3Jyne4weV7_m0lMtfhsljegrJgj9nPJOAXihebBlZjkGemjRmo6mZvpxNPowxE4_j09MqsOogfZNVu1h9d3NrPmEkmXGjM3YUUgrRGvg6RFgTZ2vk_zAPRd15z4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAIAAAAAAAAAH4BAAAAAAAAD_QFGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdBxDb250ZW50LUF1dGhvcho4NDY5MjgyNjY2MDYxDkNoYWluSWQENTYcQ29udGVudC1UYXJnZXSAATM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2UMU291cmNlSDE1NTMxZmEyLTEyMDUtNGY2MS1iNmU0LWM5ZjY4ZWNmODFmNxRDb250ZW50LUlkgAE0NTM3ODRjZDY0MWYzMWU1OTI4ZmY5MDkyNzRlZTE5NjM0NmJlNTAxZThlMmZiZGI1YzcxZWFkMDk3Yjc2YjNlHENvbnRlbnQtRGlnZXN0gAE0NTM3ODRjZDY0MWYzMWU1OTI4ZmY5MDkyNzRlZTE5NjM0NmJlNTAxZThlMmZiZGI1YzcxZWFkMDk3Yjc2YjNlAHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweDcxNzhmODgzMDI5NzhlMWExMjMyMGNjZTU2ODZjYzFhMTYwODJkMGRcIixcInRzXCI6MTY5MTQ2MDYyMzY3NixcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiODQ2OTI4MjY2NjA2MVwiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIlNvIGZ1biB0byBwbGF5IGluIG15IHNwYXJlIHRpbWUuXCJ9IiwiZGlnZXN0IjoiNDUzNzg0Y2Q2NDFmMzFlNTkyOGZmOTA5Mjc0ZWUxOTYzNDZiZTUwMWU4ZTJmYmRiNWM3MWVhZDA5N2I3NmIzZSIsInNpZ25hdHVyZSI6IjB4NDdhNmVmNjFjNDU0NjA4OTk2YzJiMDYzYWY4MGZhODBmNDVjZWVlMGJhYmRjNTBjYTk0MjY4ODlmOWI1NWU2MjAzZGMwM2MyNzY5MzE1ODllNzFmMjQzMWYwNzU0MWZhOWE2ZmMyNWU5NDQ4NDViNTAzYTVlOTQwYjJkNWVjNmIiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXdJbW1pcUNzdXdMMHV0MndJNHZEejA2SklYSi9acTdNUUhLT3JFV3dWSE1FS3ZhVzBiRXArT2h2eGtwOENoUStGTHd0Zk1sTndKNDg4aXZNVlVIRWtRPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDcxNzhmODgzMDI5NzhlMWExMjMyMGNjZTU2ODZjYzFhMTYwODJkMGQiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHhkMjJiYzg4MjAzOWE0YjcxYWUwMWZkMjE1ZDk5ODNjYmFhY2NlMGI5YmQzYzM5OGVhYTNmOTdiZDFjOGUxYjc1NzhkNzU4N2VkNzVjMGQ3ZTBiMzhhODA1NjA2ZDEwZTJkZGRjOGYwMDQxNjBjNTZlNTAyY2IzZjEzMWVmODI0ZjFjIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBDeWJlckNvbm5lY3QgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXdJbW1pcUNzdXdMMHV0MndJNHZEejA2SklYSi9acTdNUUhLT3JFV3dWSE1FS3ZhVzBiRXArT2h2eGtwOENoUStGTHd0Zk1sTndKNDg4aXZNVlVIRWtRPT0ifX0BAGQvd7SMh2QAqiTW67RwRqza4qQeccXBPh4qQv7LCk5LVDcAmm9j8C1nTcn0l5e5FCEVQ-hZKl6YFAgb-0DSaeEPOxJ_HcQPmrFbDKkc8lUhxV6Czg7txyAJH8NvUsECF1YFl6kgTXAh8mCyPe8iji1DLYJMzFEqrECWIoctBw2fcYiI99dLUwTMnIy3vUN5DmlWpPaW-_ooLA1NDAUDALFFnVFeZbef54JidQ1iMxhco3hFZU1-I5ukcB_9qk-9o5mhXoLUiXKL8vDqXhavsvrfy_y-Cpo3o7czYY71wonFalrltjSxlDzqwR0QcZedxT3zLWKVEMpKOXAUVg_jUpkgio_YVMXUBRp6blK1zS7PUI4yvjzqsRKNCpICMjzRIlnemAv5ziZE3fjE6Jufn-bT-R8r3vIJsDR5CejDfgb94YgGCiOrJ4i2xogfBTwRz7HW3Iydw1XOYsFJsUpem9SYb5ORbbldnaz1IUHFIY__G9Rf-NkWgugj6OVZ8bqaP_MJmldRIemcyXCvia6HSAcwe5fyoSWRbpzavlBVVuO1XuEZ5JfKRGbaGlOwJYqrGAIBH4s9Yw9qOgWJ7aaZeARQiZOpIYSz7J2zqig2bItoyTJC_rV9W5pQ0Hxe5fNZT-rNu46afVSVq3RrtzdSwWWmGo6PevD4xveQy_lWnjSnnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAfQEAAAAAAAAP8gUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0HENvbnRlbnQtRGlnZXN0gAFjZWY5MDM4ZjI4NzM3OTc3YWJhODc0Yzc5MGE2YTQzNjQzMWEyMmMwOTZiN2Y5MmM3YWQxODM4Zjg4MjYzMGZiHENvbnRlbnQtQXV0aG9yGDd3bWFwbnEwbjE0bA5DaGFpbklkBDU2HENvbnRlbnQtVGFyZ2V0gAEzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlDFNvdXJjZUgxNTUzMWZhMi0xMjA1LTRmNjEtYjZlNC1jOWY2OGVjZjgxZjcUQ29udGVudC1JZIABY2VmOTAzOGYyODczNzk3N2FiYTg3NGM3OTBhNmE0MzY0MzFhMjJjMDk2YjdmOTJjN2FkMTgzOGY4ODI2MzBmYgB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwiY29tbWVudFwiLFwiYWRkcmVzc1wiOlwiMHhkNGE5ODA5ODIxMTJmNDQ2YTVjMjgwNzhiMGNiZWZhMzRhNmRlNjllXCIsXCJ0c1wiOjE2OTE0NjA2MjI4NTMsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcIjd3bWFwbnEwbjE0bFwiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIlNvIGZ1biB0byBwbGF5IGluIG15IHNwYXJlIHRpbWUuXCJ9IiwiZGlnZXN0IjoiY2VmOTAzOGYyODczNzk3N2FiYTg3NGM3OTBhNmE0MzY0MzFhMjJjMDk2YjdmOTJjN2FkMTgzOGY4ODI2MzBmYiIsInNpZ25hdHVyZSI6IjB4YzhiNTkyNTRhYjUxZWZmNzRkMzJlODU3M2FmNjViMDA1NzZhYzg0OGI5YTEwMjUxNTU2M2YxYjVjMTI0ZmViZDYwMjI4OWZmYTFiZTY3ZGEwODY5OGQ1YTUwNDE5NmM4M2UxYTgwN2ZlYmM4YTA2NDlkODhjNDFlMzE0ZjIyM2UiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXZ4U2FHQVloVzF0ZGZTUDdJZmxhbXd3UExGdnYzT2xrSEdGU2V5d0tLUko5Mm94Vkx3ZThqNTY0T0Iwb2F1SDBXcjJIRm5GK3AwNDVlc2NtNUVkcHR3PT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweGQ0YTk4MDk4MjExMmY0NDZhNWMyODA3OGIwY2JlZmEzNGE2ZGU2OWUiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHg4NzUwYjBmODIzMzUyNzY3YzFkYTEwN2I3ZmY3ZDk2YTYzMTgwZmExOTcxMjAzZDgxZTdkMjc4YTdmMDhlMmM3MzFmY2JlM2Q0ZTg0N2IwY2MxNjZkYTM1YTAyODM3NThkNTBhOGNmNzdjMjYxZDZkZGFmNzdiY2ZhM2RjYmExYjFiIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBDeWJlckNvbm5lY3QgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXZ4U2FHQVloVzF0ZGZTUDdJZmxhbXd3UExGdnYzT2xrSEdGU2V5d0tLUko5Mm94Vkx3ZThqNTY0T0Iwb2F1SDBXcjJIRm5GK3AwNDVlc2NtNUVkcHR3PT0ifX0BAEvksf3R-DXnHvsecVlMPdcBsF3WUFwlVRhDrXo_5mhQwMWzG0q4q9qUhjy3IUoRh1hnQTG0taHHqZl12x8VhDPUPiAsGY06fMqfAdGoyB8rqyudy8aPPhX_1_II8gP5xkh7yc8pJ48ZtF8jp2hQ0Ynw8NTfyUJg26YUlBOQ5zVFknFdidfRjbV4SrCXt8lpUHq6bfqGHU0iYQukownPIDzXCgok3Aqszo10ghBDuTAldmqHkMx-TqB-kDRn62kVppnmo0xvQodA_xcnIqZ1z4tjE1dJW0A38qPCAgYQ3UGsnawG0wDsUmEKz1hVbRFWdK5UNGN9E67Uysh0RSJpx4YJ5xoMS9_MLMaLUAkFF6Ghhx7HEDfEUoI1GVS12KtRwlG_qmx-FkdHxdac25rhvgvWkKNKFAbJH4XlSm9yLa-zdvfOZwFmziByoOM6dvOfc_sd-jbTicZKP9eiMdrP26Y9XlNk3iag7-TJENSUhJ4QCuoUgUdre-R9JknQ-ftwY63YyMKelmb8XofTXqGyL3uN0kdUUuDjlurzKm_A9BQLT8Cf6844VcpQR3K_hzNCo0DFEEPLgQRLjrJyO1_BSgOu_ghXWaEn16EbZRgVi3odWhZGns7yVfzGbJ_F2-VwxS1a7r5Yj4fQhNVDM3JtmXvxySh0Cqghjp7oHnbxPBFonPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAfQEAAAAAAAAP8gUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0HENvbnRlbnQtQXV0aG9yGGhsbmpvb3VxYmd5aA5DaGFpbklkBDU2HENvbnRlbnQtVGFyZ2V0gAEzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlDFNvdXJjZUgxNTUzMWZhMi0xMjA1LTRmNjEtYjZlNC1jOWY2OGVjZjgxZjcUQ29udGVudC1JZIABMGEzY2VhNjIxZjUyMGM2NDlkZGI4Mzg0Y2ExOWQ1YTJjYjAwOWIyYjhlNzUwZjA0OTNlOTMwYmFkOGY4NjdlMRxDb250ZW50LURpZ2VzdIABMGEzY2VhNjIxZjUyMGM2NDlkZGI4Mzg0Y2ExOWQ1YTJjYjAwOWIyYjhlNzUwZjA0OTNlOTMwYmFkOGY4NjdlMQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwiY29tbWVudFwiLFwiYWRkcmVzc1wiOlwiMHg2YWY5NDViM2U0MjZlMmFhMjZjYmMzOTU2NjQ2ZTA4MDk5OTMzOWNlXCIsXCJ0c1wiOjE2OTE0NjA2MjI5NzQsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcImhsbmpvb3VxYmd5aFwiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIlNvIGZ1biB0byBwbGF5IGluIG15IHNwYXJlIHRpbWUuXCJ9IiwiZGlnZXN0IjoiMGEzY2VhNjIxZjUyMGM2NDlkZGI4Mzg0Y2ExOWQ1YTJjYjAwOWIyYjhlNzUwZjA0OTNlOTMwYmFkOGY4NjdlMSIsInNpZ25hdHVyZSI6IjB4MzFiOWFlMjJjNWM3MzUyZjk2ZmU0ODM0OGU2MDk5OTkyNWU1ZDZkNjkzNDA3ZWIzZTQ4NmY3ZDdmZDA5ZGM3MDQ0NmU5OTY3MjA3NDE0ZjNjNzJmNDAyMWFjMzY0MGJmODg1NmEyYWE5YTgxNjZiNjYzYjBjYTY0NjRhNDdlNDUiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVNuNzNkYWN0MURFc0VPK1ZHNlQzMnk2c0FBalJjNm9SMW9zNlNyWGUyYVJYNllZVXhhRWdKZ1V0VmdlMjBKWHRzRTlreGJmSzl2bnptWWtYVENxWllnPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDZhZjk0NWIzZTQyNmUyYWEyNmNiYzM5NTY2NDZlMDgwOTk5MzM5Y2UiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHhlMWIxZTFlZjQ5YjMxYWEyMGE5ZWFmNzQxOGE5NjBjNjgyNGJkYWM2YjM1YzZiYjFhNzVmZDM1ODJkOGMxOWZhNWU0YWRhMDFjZjU1ODM2MGM2NDgxNTI4Y2E4Mzk1YjAyNTA4MzIyNzNkNTgwYWI4YTBlZmNiZWM5Njk2YzU5YTFiIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBDeWJlckNvbm5lY3QgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVNuNzNkYWN0MURFc0VPK1ZHNlQzMnk2c0FBalJjNm9SMW9zNlNyWGUyYVJYNllZVXhhRWdKZ1V0VmdlMjBKWHRzRTlreGJmSzl2bnptWWtYVENxWllnPT0ifX0BABpCO_NC8mLOdI46arZ0-STrdU4zWKHwwnXZ1ZFeq56Y7FBR30QUFCCotKXPeV1XGzXWCcLbeteuJlQm7s_4aJQ_wOLwjxLGIqd8zG2ZteJYabA7OOEsrBFzDUbU5w_K5y5PW-KtwTYmzL3G701UvAHavp_8wA-qtbvNn1eTsqhSl8fqJAHQox6Yp5Qkp0H-2QuIOXeU_fapIFV5Ht2XurHXy9map33ivQqTMQt7HgsRJtWLwlhN9Y_ewTErNQLqdhtP5g0A96KpfCg9Lo6uYgcsVfnLW7uvrJpctTya5ukCThmsZVaTr7pny2y7cEczvvOIbug1LmUYsrtnKni9t5mJHQWlfsHPd0MdvfVv1byh2CsvBDhXzL6eYmXzZ5VZlPqFsfp0Srxhg0t_u3Mxqh4Hq4iB_o7kx4WqadQuue12s_QN97c0KZzVbxvxstQ-moAZ-jVQ7_JXLb3uCGTX22sKISYgov8VF3YS82T0xtB8zMdGjSb0NZE8D5zu8xjPWsvyDNWVPkwyvYtIdfKW2eQK7AdLg76OkPMcxNOno8sHQM2V7OGPP5opk_NRJTSnx_CgMdxdji_oXArWWWvLXMY-yBru1lQq7IDkXPU3hSyhww7oHFclUCOnDIMlHX9-slwtYW4Db89s-kiUsyxL8LBX3vW2j16eIzQ16qo_L6BPnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAfQEAAAAAAAAP8gUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0DkNoYWluSWQENTYcQ29udGVudC1UYXJnZXSAATM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2UMU291cmNlSDE1NTMxZmEyLTEyMDUtNGY2MS1iNmU0LWM5ZjY4ZWNmODFmNxRDb250ZW50LUlkgAEwZTQzM2VlZDM2ZDNmYzBhMjJmZjNmNDgyMTg0NTNhM2EwYjYwMTJkZGU2MjgxNWRhNjJlMzEwODU3ZTIyNDlhHENvbnRlbnQtRGlnZXN0gAEwZTQzM2VlZDM2ZDNmYzBhMjJmZjNmNDgyMTg0NTNhM2EwYjYwMTJkZGU2MjgxNWRhNjJlMzEwODU3ZTIyNDlhHENvbnRlbnQtQXV0aG9yGGZvdnVleXA0cm1tYgB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwiY29tbWVudFwiLFwiYWRkcmVzc1wiOlwiMHhmMTcwMTg3Yzk4NTMwOGRkZTMwN2ZjODdjMmQzNTU4ZjZmNmNlMTQwXCIsXCJ0c1wiOjE2OTE0NjA2MjI5NTIsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcImZvdnVleXA0cm1tYlwiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIlNvIGZ1biB0byBwbGF5IGluIG15IHNwYXJlIHRpbWUuXCJ9IiwiZGlnZXN0IjoiMGU0MzNlZWQzNmQzZmMwYTIyZmYzZjQ4MjE4NDUzYTNhMGI2MDEyZGRlNjI4MTVkYTYyZTMxMDg1N2UyMjQ5YSIsInNpZ25hdHVyZSI6IjB4MmJiMTk1N2Q0MmUxNzgwNzA4YzFkMDRhNjg0OGY2YjU2YzcxYzJmZGI1MDY5MjVmMDNmNWM4ZDVkZjQ4M2Q1NjBmZTk4ODhiNTc2ZTllZWRiNWE0Yzg1ODNmNjI5ZDk0Y2NhMTJmYjUxOGU0N2ViMjE1YmI4MTdhYjc3YmMyNWEiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTZwRGNSYXRnZHZCSHVGazYzRG1HRUw3emVWeEltSW0yeFUvd1NWTFZRZEhwQVExN0pUN2psRFhtL2RZdlNSb2NMcnNGVE1mRkxmMWtUUVlnZWVEMUF3PT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweGYxNzAxODdjOTg1MzA4ZGRlMzA3ZmM4N2MyZDM1NThmNmY2Y2UxNDAiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHg1Yjc3MWQ1YWQwNDZmZDFkOTEyN2RmOTc2YzY4NDQ2ZTA4Zjg4YTg0ZTFjODc1ZTE1ODljMTMxN2JlNzRlNGNiMzljNzM1OTYyZWM1OTk0NzljNWNhZDViODZmY2JiZGU3N2Q4MDRiNDFlMzZjNDUwNmFiYTEyNjM5NzI3YmQ2NzFjIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBDeWJlckNvbm5lY3QgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTZwRGNSYXRnZHZCSHVGazYzRG1HRUw3emVWeEltSW0yeFUvd1NWTFZRZEhwQVExN0pUN2psRFhtL2RZdlNSb2NMcnNGVE1mRkxmMWtUUVlnZWVEMUF3PT0ifX0BAIkNboJ9ZLi0IgofVN5eZBqya5mlAHCVfKbvfcz8HSRzir_PQtc6ZUbjJL5sFd4mp-OQcLDZSnUUc3LItV77_2Bwy94Bod2TAD1b8Vb1_p42LTtwWIlPBLvRL9sy6GHuD9NeIABdUszbYnFrSUV6sPPfJtG_iKPzwykUMNOqqLp70HJMpPLI0hlXSfxAg_GE-zgye77c18dw6TC0Q-08c3jjjJ45e9CZ9c90IzRLyXYePuehqdoJBXJi0re41ONQDDyTzsfDu7wNjXiAphT7DOWIJyvs14D_7LSD7U7jFATygl4GCkJQz6VU9wY3OvCbbUnwp0Ed9vD3iyAy_sxlCBdI4JPNja9cYt3sEXOFOpQDRZ9vMQB3k7ha6DQ6C9nZEcw-pqKCr3a_YcevEiCrYas7elyxrM0qcTTfBWBk4v8pgHwgOt0G73nhmeWXa2cc0T4Xy6luutMU3xLvar5IMDD4vYUIXRDLNeuGtnDLyylUYiX1TtUgdeaLuzuZK2-paVxi2gVp1IKpcpJEjGTQlMHVtXhqQeB9XLBrzT_Ar-LHujsLzt-2YCD1xkzC2KA2-kcDtc302VRNfT_qIqHmvnjaj5A81O65ivwx-TNk-ELdpeqob5JW296xmMySYhf5KZ-iapF7wN-83tWQmFTSz_EQLH75P9fiIiDeVm4zOH3nnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAcAAAAAAAAAEgEAAAAAAAANnAQYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0FENvbnRlbnQtSWSAAWEzZWZkZGJkOGQxNjcxMTYzOGUwMzQzOTEyMmQzMjk4OGM2NzIyNTZhODk1MmUzMDcxMTg4NzUxZTY3MDhiYjkcQ29udGVudC1EaWdlc3SAAWEzZWZkZGJkOGQxNjcxMTYzOGUwMzQzOTEyMmQzMjk4OGM2NzIyNTZhODk1MmUzMDcxMTg4NzUxZTY3MDhiYjkcQ29udGVudC1BdXRob3IaaGllbjI3MTEwMjQ2Ng5DaGFpbklkBDU2DFNvdXJjZRJjeWJlcnR1bmUAeyJjb250ZW50Ijoie1wib3BcIjpcInBvc3RcIixcImFkZHJlc3NcIjpcIjB4Nzg1YWE4M2E4ZDUwN2E2NzYyZjM0ZWM0MmY5MzU3YjhmYTYwMGQ0NFwiLFwidHNcIjoxNjkxNDYwNjI0MjM1LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJoaWVuMjcxMTAyNDY2XCIsXCJ0aXRsZVwiOlwiNjc2N1wiLFwiYm9keVwiOlwiNjc2XCJ9IiwiZGlnZXN0IjoiYTNlZmRkYmQ4ZDE2NzExNjM4ZTAzNDM5MTIyZDMyOTg4YzY3MjI1NmE4OTUyZTMwNzExODg3NTFlNjcwOGJiOSIsInNpZ25hdHVyZSI6IjB4Njk1NDA0YmJhNmJjMGVhYTM3OTcxN2MwMzRjOGYyZWI0ZmU2M2IwNTg5NmFjNGQwOTZkOTQxNTUxOTcwNTk2NTM4MDE0NzU1OWQxODljZjAwMDdiYmYyNWI3YzRkZTBjYWM2YWFmMzU5OWJiOTcwYmVkMWE3NzNiOTFhNWYyYzEiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXdUb3o5VDhjdE9iaE1saGdKK3dwaHpiTXlqbkFRdlM1K2dTb2ZvaWtPQ3ZibVd4akEzcTRxZEVzWEViVmRYanBZeGJtRHF0b0JHTytRKytNdDJOakxRPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDc4NWFhODNhOGQ1MDdhNjc2MmYzNGVjNDJmOTM1N2I4ZmE2MDBkNDQiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHhiOTRhNGRlMDcxMzk5ODYzYWMzMzczMjdkN2E1MmJhNjhmMmE3ZWM4Y2UwZjg4Zjc3NWQ4YWYwYzBmOTVjMTRmN2I0MjBjM2NjOGQzNTUzMjBiNjJiZGFiMGUxZjk4ZTAyMzY4N2IzYzBlYTE1NWVkNDE3MjFiOGI2ZjU0ZjM4ZTFjIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBJIGF1dGhvcml6ZSBDeWJlclR1bmUueHl6IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6ICBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFd1RvejlUOGN0T2JoTWxoZ0ord3BoemJNeWpuQVF2UzUrZ1NvZm9pa09DdmJtV3hqQTNxNHFkRXNYRWJWZFhqcFl4Ym1EcXRvQkdPK1ErK010Mk5qTFE9PSJ9fQEAP6QuvbRAOOGNUzGn7Ef_YJu6lY6nWT6lYYiqbiC5Yk9wK5zpLvdtbI6j4-1BVIvS_traTxw4KxsKRHms5Tkr3Bx1t9kNWiLrMOgmx6NnqTNdSM-WEsQlKl9t0-PXcuEAwjcmX8JUgV91rMskDv6EPeW2OPoaZPdZY9z2P2qXdZqVy_WKNZr02Sp3X5MNmuCTnLO4ouuKnGB2n46tHuZOVtuW2HWICHCfQWXlJhfrxI0EbrJBo_PfyInGCwUl26QnBvxIVuk0RhBOGoAG-5E0Eo0ZrUMQ6cU6NBIu7g73OyMuMPLjpEEUWJ7BsqxZ28MQ_-vhkpPPVVsC_a5cD5_8UhcxSZfrYBp4XE6622eJWdaWXNMvVSYXWyrdJe0JoeMIrCk3D6Bq3xP8Baht45R19914FKNoaZ6JtvPVj1EScIhOMCKLrbA_Fu2FR979AR0DmAVMOxMhoVDU8yyOtpaLFinDBlNFw5MUKoU3FPqs4l3eJhV05e3fBZwC_0hwezwand1P4aUx6GPgEToyM1gwR1n94NpSIya3Ca3wiQ_D9KZgyCdCu6PiGtZAwQMW9OsPBbfC6XqKEXlRRZ_VNpySgX1SAhW79UNg-LIKFX0xoPS28Ec5FZ9aTZIsHQHs7q37l--B9mwwpSH3Ap8XZWiwySOtOGsyFzRhHFrTaRY85pSc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAACAAAAAAAAAB9AQAAAAAAAA_yBRhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QcQ29udGVudC1UYXJnZXSAATM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2UMU291cmNlSDE1NTMxZmEyLTEyMDUtNGY2MS1iNmU0LWM5ZjY4ZWNmODFmNxRDb250ZW50LUlkgAEwZGZkNzE2NjE4OTcyN2I1M2Q3NGUwOTA2MTQzZGYyNDMyNjVjNjE5NzNlZGNkY2NmOGEwZDhiNjAxMmM3MzU2HENvbnRlbnQtRGlnZXN0gAEwZGZkNzE2NjE4OTcyN2I1M2Q3NGUwOTA2MTQzZGYyNDMyNjVjNjE5NzNlZGNkY2NmOGEwZDhiNjAxMmM3MzU2HENvbnRlbnQtQXV0aG9yGDU3d2x2aW44bHJjZw5DaGFpbklkBDU2AHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweGMzY2YwZjI4MjIxODJmMWU2NTdjNzkyNjEzOTUxZWUwMzZlYmFjMTJcIixcInRzXCI6MTY5MTQ2MDYyMzY5NSxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiNTd3bHZpbjhscmNnXCIsXCJ0YXJnZXRcIjpcIjM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2VcIixcInRpdGxlXCI6XCJGbGFwcHlNb29uYmlyZFwiLFwiYm9keVwiOlwiU28gZnVuIHRvIHBsYXkgaW4gbXkgc3BhcmUgdGltZS5cIn0iLCJkaWdlc3QiOiIwZGZkNzE2NjE4OTcyN2I1M2Q3NGUwOTA2MTQzZGYyNDMyNjVjNjE5NzNlZGNkY2NmOGEwZDhiNjAxMmM3MzU2Iiwic2lnbmF0dXJlIjoiMHhiZDU0MmFiZDIwM2RiMjJmMjQ3MTg2ZTI4ZGM4NmEwMjA4NmJlZjViNjU2YWViMTY1ZTEyYzYwMjJlYTQ1YzY1MmE3NjE3OGNlNzRlYTVlNDFiNGIzZGUyZmNiNjQyNGU0ODc2YTdiZDU4ZTI0NTlkYTk4MTdkYWY4NWFiNmFlZiIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFdUVoMTVab0Q0OG1SMWtBVGFsSHZiVGhFU3BpWGRnS3A2T25HZHlUdXJZRzlJV2pYYnc2blJENGwyZ2JjZStNUDdoS1NuSndWdWkydlhucUU0VEZpckE9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4YzNjZjBmMjgyMjE4MmYxZTY1N2M3OTI2MTM5NTFlZTAzNmViYWMxMiIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDkzODYyMWY2MDM2YmNlNWZiMDhiMzNmYzg4YjM0ZmExY2JmYjdiMDcyNDU2YjQ3MzM4MDYwYzI0ZTE1NmQ2NDE2OTI3MzgyZTQwZTEzZGRkYzdlNjJkYTYyYTEzZjQ4MTliYzZiMWZmZDgwZjUxMmM3YjAwM2I5ODc3NjIxMzNkMWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFdUVoMTVab0Q0OG1SMWtBVGFsSHZiVGhFU3BpWGRnS3A2T25HZHlUdXJZRzlJV2pYYnc2blJENGwyZ2JjZStNUDdoS1NuSndWdWkydlhucUU0VEZpckE9PSJ9fQEADfd1ZVEZmpRxGvpMWRHc7u4ooyqxUN1KI4kzo-85Qq2QEbcxztyo1WvVG5y1Y_WGUccYRxmTe8XDD9rBOPoC7HEmAox-v47YZGsjl_NPxpoKoiD6WpD6bnqSIQcR6rt0-WcL48UKwlLh1s-HZwNQC57QZFWvSAHhXXjz_ibrtXjGDGqG6n-fXELkjSOAshW6zLF0RjTM8sZIOCPK7O8lJFtEBMJxoSyn_RU1lChu6sICJrebFbXZfUe8sagYyaLd8V5ASJa455oESbzsLRQVY4FAExpsYO-s9Dx-5-DCz924AVfLUeEgYvhI77SW9sOFhoAiHBEZNxcG1X_Wh05UpSA-KyKvOTTggs83zHzQi_j7w1u4xkoc1oUXuOurgdyO_RQUEt8bEbZVa7-4W0wYiwgXQ8H8ZLi-1IsYNy4xYjybIieY1yI2WKpmVYkriKR3dXwtWta3iFY1EaUVnjeR7H3qpH3gJzS4hgQIi3tIeg6frwpeshsDjVAVJDEQVmMQ3apxexldirXAd4NJIR1KohvN47JhhB0qJhAXjYShrQBb2IJ2mSG31cEm_kc3fHdfFwj72NIUGZHLS6wIpheOfzlavLvItnumxjXBBVnqLh1Am2FUypaybe_nv8VzzchvfTNuGSLRjYQ2j4nhz0Xfnmekz2Ka6VP2KfxU3-MLiDqc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAABwAAAAAAAAANAQAAAAAAAA2SBBhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QMU291cmNlCGF0ZW0UQ29udGVudC1JZIABODYwOTM0NmI1ZTU4ZjczMmZlYWYxOGIzNWUzZmNkY2M3NTJlNjhjNzAwM2UxMzY3OGFmZTg0NTAxMjNiMDAwMRxDb250ZW50LURpZ2VzdIABODYwOTM0NmI1ZTU4ZjczMmZlYWYxOGIzNWUzZmNkY2M3NTJlNjhjNzAwM2UxMzY3OGFmZTg0NTAxMjNiMDAwMRxDb250ZW50LUF1dGhvcho5MjU2NzQyNjI3MjcxDkNoYWluSWQENTYAeyJjb250ZW50Ijoie1wib3BcIjpcInBvc3RcIixcImFkZHJlc3NcIjpcIjB4ZTNhZmZmNWZlYjBmYTdlNmUzMmY5NGQxZjcwMzE1M2U4NDAzMGNjNlwiLFwidHNcIjoxNjkxNDYwNjI0MTgxLFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCI5MjU2NzQyNjI3MjcxXCIsXCJ0aXRsZVwiOlwiMTExMTJcIixcImJvZHlcIjpcIjIyMjIyMjIyMjIyMjIyMjIyMlwifSIsImRpZ2VzdCI6Ijg2MDkzNDZiNWU1OGY3MzJmZWFmMThiMzVlM2ZjZGNjNzUyZTY4YzcwMDNlMTM2NzhhZmU4NDUwMTIzYjAwMDEiLCJzaWduYXR1cmUiOiIweDc1OTIxMjBjN2EyMDAxMTQ3MzA4MjM3MTc5Y2QxYmUyNGUxOTYyOTc3MjMwY2ViMTBiN2QzOGIyMmVlOTAxZWFkYjExN2ZjMDM2MmQ0YTEyNWNjYmY0N2NmOTVlZGI5ZDIyYzRiZjZiMDM3M2M2ZTdlZmE5YmJhZGVkOTAwYTYwIiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUxSml5MzYwVkVTOWZ5WCs3aHFpNjJ5Z2c0SSsyOFdKdlRTSW9xZDBPSzFWcGJKVFJ0bmtIcGRQZTdHampVek9UMDY2VGNJSVVlbmZkMFd5bmZUU2RSZz09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHhlM2FmZmY1ZmViMGZhN2U2ZTMyZjk0ZDFmNzAzMTUzZTg0MDMwY2M2Iiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4NDA5NzE5Y2IzMTBmYTgwZDE2MWUyOTU2NzQ5M2RlZTBkMWExNGFlZjM1MmMxY2JkZWQzNjgzZWJmZDQ2M2M0NjM5NWM3YmVlMWY5ZWFlYzAyODg3MzZiNDFmN2ExMjVjZTA2MjU0NzZjNTk4ZDI1NWI2NmViOTQ4NjRmN2VmYWIxYyIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQXRlbVJldmlldyBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFMUppeTM2MFZFUzlmeVgrN2hxaTYyeWdnNEkrMjhXSnZUU0lvcWQwT0sxVnBiSlRSdG5rSHBkUGU3R2pqVXpPVDA2NlRjSUlVZW5mZDBXeW5mVFNkUmc9PSJ9fQEAXueKfIFm0B5wVLin_odyUWvtNpzfS67PsxWTKgiC0uBdfPCm-GL07Kdsr3sbWjPrEsceZDKXDbTuSUVL0MjW3JRtkZ2gE765gF8dL4fhMS1ckzq7SXtLG4OYdoA8RODK5ewgyMGvYE9-NthTf5WhN82XO0_Cu5ib48QF0qiO98owVoZKNPzUF359snsIFpcwL2Cjt2elYsTKBsJxt2A2dInwZo1nMvM2scuckXTLy1r7gtmOT8d9z9aIQxmGntTMgu6tGjCuXcqba0V6sv4qzGrvs_hhKtSXOXCVbg2xyvQsn5JQ384dZIYk070eGTZISNfTEK18BR4wTp6axv8Wmd59h985YMODIanwV-BQF-WieI4mrr1VkbNIldfGBv6pr85u5slk_74wFnIEHpAKOsXk_e8WhctQ9fvFG-I2GdCFn8FQ7qIdc_H0wdAFXvDSMjgDl6LINwBGhWLHWUpfgem9lkgzIObaG_gc9bAZGISrrULiBnLxhqqU66_QNaRbq2xClYU1XXcBNoub0N8NUlnWbsRowecsSz7r3nnDzoIjYJX4ryOULd2LAH9kpJ_2khwgpuTIuKMB1BrgkPF7WrGHGpBJT9eizieT5WUxsJcIZXkbjZNjwH9X2NFigrgWFTIhBJfBKgAWo1bVhRoAWMcpF1i8_amRLO0rpsgPy_Wc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAACAAAAAAAAAB9AQAAAAAAAA_yBRhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QcQ29udGVudC1BdXRob3IYNWptemFlN3M4aDJ4DkNoYWluSWQENTYcQ29udGVudC1UYXJnZXSAATM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2UMU291cmNlSDE1NTMxZmEyLTEyMDUtNGY2MS1iNmU0LWM5ZjY4ZWNmODFmNxRDb250ZW50LUlkgAE3ZGZkY2RhMDI0OTE1ZDE5MDg4YTgwY2VlNmE5MjkxYTY2NDVjNjAxN2NlMDE3ZDJlMTcxZGNkZWViZWI4YTk0HENvbnRlbnQtRGlnZXN0gAE3ZGZkY2RhMDI0OTE1ZDE5MDg4YTgwY2VlNmE5MjkxYTY2NDVjNjAxN2NlMDE3ZDJlMTcxZGNkZWViZWI4YTk0AHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweDVkZWExMDIzYWE1ODU0YzUzNWJlYjkyYzg4ZGI4MWRjMDI0NzEyY2FcIixcInRzXCI6MTY5MTQ2MDYyMzM2NixcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiNWptemFlN3M4aDJ4XCIsXCJ0YXJnZXRcIjpcIjM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2VcIixcInRpdGxlXCI6XCJGbGFwcHlNb29uYmlyZFwiLFwiYm9keVwiOlwiU28gZnVuIHRvIHBsYXkgaW4gbXkgc3BhcmUgdGltZS5cIn0iLCJkaWdlc3QiOiI3ZGZkY2RhMDI0OTE1ZDE5MDg4YTgwY2VlNmE5MjkxYTY2NDVjNjAxN2NlMDE3ZDJlMTcxZGNkZWViZWI4YTk0Iiwic2lnbmF0dXJlIjoiMHgzMGE0NDA3ZGM2YjMzZWVlY2Q5OGFkNWI4NWQzY2MxNThhOTEyMWYxM2U1MjdiNDU2NzM1ZWQwYzk4MWQwODZmOWJiMzM1MDU1OTE0ZDc5NjYzYjFhM2U1NGMyYzAxNzZiNjQ4NzIyNDdjMDAzZDY1N2U2MzkzMGM3OTJjMDVmZiIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaTVZTjA1RkhTeEVtQlNIMU5xRmxFQlo5Znc0Sm1xdWFneGM3SGY2eWZUcHVCbDZpUXkxais4K3lLYUxKSWhvQm5RU0NNS2pWS2RlMXk5cGxKVFdGSkE9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4NWRlYTEwMjNhYTU4NTRjNTM1YmViOTJjODhkYjgxZGMwMjQ3MTJjYSIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDU1NTJmNDVjN2M2YWZhYzJjZDJmMzA0YTU5OGU0ZmVkNzNkOWQ4NzU5NDc4ZDBkYTEwMmJjZWY5NzQxMWU1N2EwZDg2NjMxNGZkM2UxNTFhMmFmZjJhNDQyYmM0YTUxODkzNTE0MjVjYjYzYTIwM2ZiZTI2MWJiMTY1NTU4ODRkMWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaTVZTjA1RkhTeEVtQlNIMU5xRmxFQlo5Znc0Sm1xdWFneGM3SGY2eWZUcHVCbDZpUXkxais4K3lLYUxKSWhvQm5RU0NNS2pWS2RlMXk5cGxKVFdGSkE9PSJ9fQEAkvMnAGqxxX1jZbZbVddDRuGu31Pgimdv6nrTQOFaTbGrQTFKHnyPGtaPGkhaAoc11xQ-oWbDfYqRRaEfGVchnJHiRoEOmJxp1vHGvvOfFma7x7BipHdXo7uaXOiC0Iq5E190eNG81iTWU9pnUWg-luT8YP3WNb_tWrMZ2dhOBAiIvuVR81kkMrooOJp_LoiOabujIoSW0oFo0vJ1PzvmCp9B9UVRTzqkurV8TQVWMltIuNeD1x0nB495UFwmuE94VG1R-JW7SUvF4WewNoLHwVonpIoHKGOhoFDhcfEDMVFLP6LpCXbSOrQnNdKRj1GOmLaw-6SJ5ZOPCGn1keVk8VDfcYBrR_pDB2wrBpBlwp2SltF6dil3S3vSO6KJrcqX83MGITMjMjhFjgzoXVgxVHhu4F3UGhhSFcdeHufY75OWZdOaVBT3dI_22cT1jA2rQI24PU3nrhh-cMbfgZAKjJyh6SWc-0mJfrpydyOkTarjDP2E5VnME5-SIJh84UpiEQLRQz0u3Yq8tr6IvHhpDHNoxWk7XWpI85HZySPYS5n3TTJLvwRDFfNqDwwSKkAWvCRD2dvdz_tmFxC1hiK53IgVEMc5qS3-HMACUJDAR0DG2Bb5XJ8SQQB371z7d3K17P3BcX9AZ0Ij9u5dCY2PrDF9SitXyf1j0xU00AjAa_qc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAACAAAAAAAAAB9AQAAAAAAAA_yBRhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QcQ29udGVudC1BdXRob3IYMGkxemQ1b3A0YjZ3DkNoYWluSWQENTYcQ29udGVudC1UYXJnZXSAATM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2UMU291cmNlSDE1NTMxZmEyLTEyMDUtNGY2MS1iNmU0LWM5ZjY4ZWNmODFmNxRDb250ZW50LUlkgAEyYmQyY2JkYmUzMzMxYWQ3ZDJmMTE3NjNlMTU3M2I5ZGFlZWQ4MTA4MTJhYTc3ZjFlNjE5MWRmZWMyZTM1MzM1HENvbnRlbnQtRGlnZXN0gAEyYmQyY2JkYmUzMzMxYWQ3ZDJmMTE3NjNlMTU3M2I5ZGFlZWQ4MTA4MTJhYTc3ZjFlNjE5MWRmZWMyZTM1MzM1AHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweDZjNmY3ZTBlZjRkZDZjNTUyNjE3MjQ2ZTAzZTYxMzM4Y2M2NGJiYjJcIixcInRzXCI6MTY5MTQ2MDYyMzM5OCxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiMGkxemQ1b3A0YjZ3XCIsXCJ0YXJnZXRcIjpcIjM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2VcIixcInRpdGxlXCI6XCJGbGFwcHlNb29uYmlyZFwiLFwiYm9keVwiOlwiU28gZnVuIHRvIHBsYXkgaW4gbXkgc3BhcmUgdGltZS5cIn0iLCJkaWdlc3QiOiIyYmQyY2JkYmUzMzMxYWQ3ZDJmMTE3NjNlMTU3M2I5ZGFlZWQ4MTA4MTJhYTc3ZjFlNjE5MWRmZWMyZTM1MzM1Iiwic2lnbmF0dXJlIjoiMHhkZGI3NzlkZjY2MTMxODlkMDFhOWY3YzlmYzdjYzY3MzA4MDlkNzA1YTgzNDE5YTdlZmNlY2VhM2I0OWQ4Y2U5NGVmZjUyOTRkMGQ1YWJkZmM2OGNkM2QyNzRiMDRiZGU5ZGQyMTA5ZDIyODQ3ZTU3MjcwYTIzNGM0N2JmZjliMSIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFMlhCeTdjNGF1dmpCMUJ6MndaTkhyQWlTa3RualFiRnh3VlI4UTVMQTJtbDFwdnZCTHFWM3ZRV3hxLzBuUVZ2Ykt6dWRxQzMzMjU4WEtveEVDV2hIa3c9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4NmM2ZjdlMGVmNGRkNmM1NTI2MTcyNDZlMDNlNjEzMzhjYzY0YmJiMiIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweGQ1ODMzYWM3ZTUyMDQ3ZjJiNDBhNDIzZjNjN2IzZGVkYmUwMTBkNjUzNjU5MTExYjYxMmNkMTQxZjY3OGZmY2ExN2ZkNGNlMWZmY2Y0Nzc0YzI3YmY3NTJjNzc1OWI2ODc5NDEzYjg2MzRlYTA4MmQxNWI5Mzg0NjViY2UxMGRiMWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFMlhCeTdjNGF1dmpCMUJ6MndaTkhyQWlTa3RualFiRnh3VlI4UTVMQTJtbDFwdnZCTHFWM3ZRV3hxLzBuUVZ2Ykt6dWRxQzMzMjU4WEtveEVDV2hIa3c9PSJ9fQEAj6MA9o_vKkqo-mi60v7jqRU0usrHypgP85hp4OnKUWGGdrCmTfagUf3xnvD2vY7aTRma_EM-dPukCZLGCxnjgzV792QP3YNIWyjUve2RcLCIvrYTpxZFoc9DY7qYzebyTu0e2M80mc5R8IPLbhtyv7qq7B9ORrcs2cpDCJUkl8FbhXZkKeBevq_AdbotHmy4_js6wu5EsnREwk3fbNDPH3cAbTNlLcNGYrsAwyDXGnaoi3N5_Qrz5WJ5RmU9stMKbNvF426A2nY8mAMisg1Yvvsdk8Xp2TBJ6PIRYNBo6iFDvw38mhH000xBNwqW3ih76CkrnfbbLBEzCIYXG3VeHPUY0J_jAwlFzHlmEtGLPnPM43EZwZ_cKEyOtRXErhz68N9rkhp1JdRSPcGEYP1SBUmWLgcHuLG5UtsEpe6iAV9AXNx5SPLOKRfLJhzLv8C9w8C9txdDoy-df7H6GKtHOVe0qQ_s7Ah9dc3750qkLawZc2eTFBp4_6VLeLwCkwzQMxXkpP7XNHu4iVofcygZZgU8Yl3igrpM-a5jg7VXDtorLjS3yUmcn5ZKXd-q5eAvEd1qFx6W4iz80ilueAblDZD4alMt9tL3PukRoWSYFWTGD3VCM1JjnFeRyjfu5UvhIK4mtLEKW5UzKqeTQwuSEjygZgKvl9RgKIL3ca47L7Kc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAACAAAAAAAAAB9AQAAAAAAAA_yBRhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QMU291cmNlSDE1NTMxZmEyLTEyMDUtNGY2MS1iNmU0LWM5ZjY4ZWNmODFmNxRDb250ZW50LUlkgAE3NzM1NzUxZGE3NWQ1ODI1MjdkN2FkMjA2YTQ5OTc1MjE4NTYzMjZhNzA2MzFhNTc5MmEyOThmMzc1ZTRhNmYyHENvbnRlbnQtRGlnZXN0gAE3NzM1NzUxZGE3NWQ1ODI1MjdkN2FkMjA2YTQ5OTc1MjE4NTYzMjZhNzA2MzFhNTc5MmEyOThmMzc1ZTRhNmYyHENvbnRlbnQtQXV0aG9yGHJ2bTBqMHcxZjZ0bA5DaGFpbklkBDU2HENvbnRlbnQtVGFyZ2V0gAEzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlAHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweGU0OTBlZTNjNGM3ZWRlNGMzNWRjMDExYzZlNGM2ZjkwYTUyNGMyZDRcIixcInRzXCI6MTY5MTQ2MDYyNDM1MCxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwicnZtMGowdzFmNnRsXCIsXCJ0YXJnZXRcIjpcIjM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2VcIixcInRpdGxlXCI6XCJGbGFwcHlNb29uYmlyZFwiLFwiYm9keVwiOlwiU28gZnVuIHRvIHBsYXkgaW4gbXkgc3BhcmUgdGltZS5cIn0iLCJkaWdlc3QiOiI3NzM1NzUxZGE3NWQ1ODI1MjdkN2FkMjA2YTQ5OTc1MjE4NTYzMjZhNzA2MzFhNTc5MmEyOThmMzc1ZTRhNmYyIiwic2lnbmF0dXJlIjoiMHg5ODY1NDljMWRjZDQ4MTNiYjRkZmVkZjQ0NmE1MWRiMWI5MTg5ZjZkZTVhOWE4ZWI5N2QyYmY2NzAxYWNiZTI1OWMyMjA4ZDZkZDE2ODUxOGI0NjY0MTIwZDUyOGMzNzJlOTM0NjA0ZGZlN2MzZDE3MWQxNjBhYjYyMzMxMGY2YiIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFREJRWE9UN2xmL05ueDlqNkhSejROUzM3ajVVYkFvYzJtV0pUYTkvaE95TGtObGRsaDdRSFYyRnAvWU10emQyVDBEOStoWHBrUmtQR0xMeWdrUWUyTEE9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4ZTQ5MGVlM2M0YzdlZGU0YzM1ZGMwMTFjNmU0YzZmOTBhNTI0YzJkNCIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweGJhZWYyMzRiMTFmMDg1NTc2MmZkOTg3OGRiMWM2MDVkNGUwOGE3YjIxNDRiZjNiM2M0YmI5ZTc5NTRkM2ZmZWM2NjE0MGU5NzVjNGM5NDdjM2E0YzdhMmUzY2Y2MjAzODFmMmE2MTIzNDFiYzc1NjNmMmRhNGQ1MzViZDEyMzMxMWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFREJRWE9UN2xmL05ueDlqNkhSejROUzM3ajVVYkFvYzJtV0pUYTkvaE95TGtObGRsaDdRSFYyRnAvWU10emQyVDBEOStoWHBrUmtQR0xMeWdrUWUyTEE9PSJ9fQEACM7s6Tr7rDyKzchgY4qVdyRZYnArKLF71Vy465VtLp18MOJ9Nuj1oP2uwHWmLsnFg5Gifcr9YIsqLtOCqcmSOrsZGKDOnGvaXjHI7suHs7Qmo2uCXbcxZCbC0VSB3kB2M4uM_zvGjfr4FZk6_b2TBLND4EuXllycDgXnewaR3qskG7BjjQMn16rKjRa-Hax7IBVoQNddpqRTeQQwip0W95xI0JK6CcVyu-76ZVHt3mQMrv0v3NjBSlaWx2gebEopLAw9B8b5cJWtxI75A8o6sTBbQXeDwYP3a7mr_jVA1H_eDVPfp5sU7BKu3CPoVTE3AoWupR_i-naERzT0XekIEdZYbdaVen9Wdu_uwgGuXku_tZSPpn_6YYbSfuJ42Ph4Ov8Wldu4sRAReas4Fw7xPnB9DqzpIXw5lZxnnLDn04xt4M-nJlh3mdDTVJdG8UdhIZoV9eT-3YPLytPKzNwlNKKeqR_N6PzHVBtocok-fHEJ-jv_8h5fnr4pNNgX22F3U6XijffzgrWY-0i-qpvX0s0secrtbyinsU1jZamWd6gxpQBOGjTBRSY5Hc756FW4b5dSaLFi7wokqJPhQ9G7XEblrf_EaV-EoQVxkMv6FZAm60VawZLxCE_25uJiA-ac1F05dJL2p7MdTTq_Uh1pB2R4A14qXWjtswhECNgAJ02c-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAABwAAAAAAAAAMAQAAAAAAAA2QBBhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QcQ29udGVudC1BdXRob3IYem53eHczNjF3eW1wDkNoYWluSWQENTYMU291cmNlCGF0ZW0UQ29udGVudC1JZIABOGZhYjViNDExMDJiMTFhNDhkZWJiYzViNjg0NDIxMTI5MjM5NTYzZjA4YzRhYWJmOWMzNmYyZmJjMzc2Mzg2ZRxDb250ZW50LURpZ2VzdIABOGZhYjViNDExMDJiMTFhNDhkZWJiYzViNjg0NDIxMTI5MjM5NTYzZjA4YzRhYWJmOWMzNmYyZmJjMzc2Mzg2ZQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwicG9zdFwiLFwiYWRkcmVzc1wiOlwiMHhlMTVmYzUxMTYwZDI1YTYyMzQyZTdlZTdkNGVjMGExMDdlZDBmNWU0XCIsXCJ0c1wiOjE2OTE0NjA2MjQ0MDYsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcInpud3h3MzYxd3ltcFwiLFwidGl0bGVcIjpcIjExMTEyXCIsXCJib2R5XCI6XCIyMjIyMjIyMjIyMjIyMjIyMjJcIn0iLCJkaWdlc3QiOiI4ZmFiNWI0MTEwMmIxMWE0OGRlYmJjNWI2ODQ0MjExMjkyMzk1NjNmMDhjNGFhYmY5YzM2ZjJmYmMzNzYzODZlIiwic2lnbmF0dXJlIjoiMHhmM2YyYTRhNzJmNDY3MGNhYWI4MmQ1ZTRiYzgxYjRkYWU2YzNiNWQ3NDMzYzJkNWNjNWJmMjc2ODk0MzYwNjFiZTVkNjk4YTE0NzAyNzJjMTI0ZjcwNDI2MTQyN2E1MmExYTJlYTE4MzQyZTI2NGYxODhmYWJjMmM5OWIwMTUyZCIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFdnppZFJsTllIdEUrazR5R2Q5bjJOVWNPajJLeGZ3T2J3T1doLzdwVnR5OXlQYnBTb3hOQUIvdnBPODFCdFZpN0t3U3UxcVNWRXhCT1lmZ05VTW1kR3c9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4ZTE1ZmM1MTE2MGQyNWE2MjM0MmU3ZWU3ZDRlYzBhMTA3ZWQwZjVlNCIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDliNDc1OWMyNTZkNjNiYzM1M2RlYmEzMmViMDE5NWEzMWE3NDg1MTNiMjM1ZWYxOTJlOTAyNGI3N2E0ZGFiM2YzYTA4MDcyYzI4MGY0MTAyNzJhMDBmYjI5YWY1MTg1YjE4OGYwZDQzZjg5MDExYzE4ZDk1NzI0MDA1OTZkZmEzMWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEF0ZW1SZXZpZXcgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXZ6aWRSbE5ZSHRFK2s0eUdkOW4yTlVjT2oyS3hmd09id09XaC83cFZ0eTl5UGJwU294TkFCL3ZwTzgxQnRWaTdLd1N1MXFTVkV4Qk9ZZmdOVU1tZEd3PT0ifX0BABKPnmUhWwx73U3CW5F5_WN2OH3MQnMv8MtTntOnWZw2BlC9fLWc7SZkotSsM4ZaQiPmWww_bg6aa6mqgr2sBqBODmXErwZs4z8xe0bpmx7B2rDrmOjYM6cfkg2L-u04maT9eQVJTMk_SP_EMz8VC1KhXHfd1ZV-CB5uuJ8GWh6Sr-L5_Hb4ghYmnu1174MEXWpvhSE3qHQRkaJne1eReQtaFAjvmotUHDMSFYir7FwtddaVa4uF4oT60_9_5ffMmgdzz2o3ZB5_nFaEAMIibdTJemgubDkFyaYepNBbnUX7zfmeYuXRLy-zewC9yqyRLayXlgfHtFMoTTBrwXG8cDLyZlXiRGUtOyWFcl0eVA_4Y5Vr8gxzV7Id4BlLPC_OLugTnQJ4bCNq-boxhsz8hXEXb9h6olOI2lnMe5ge4VprDote4uKqjCdGvGK_IVdLZQDtSdKtV-v6_4Wi9_tbeb9jdVY_GBzyuv-HVMm9dBcL5dBS14rmHEegejwObxx-N0ekst3R6N_G5ldne6TtNQ0XgSvRsOehORloDbsDFyUWiwk84Pw0ag4fIjDt-AsqcYmBxA_H_-hSlZ6BnnGvmydz6H6iajbS563FVImbCkovEAuQNaVrZ0xxhYoOi0N-CiZ8QUMXPGIm_CRYSiQ2m94BMU-FFwOLcHeOLBedtkhHnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAfQEAAAAAAAAP8gUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0FENvbnRlbnQtSWSAATU5ODAzNmZiYTkxYjBlOTMxMDExODg1MmRhY2VlMDBjM2ZhYTdkMWM3MDI0MGI1ZTI2NDYxMDM0ZDRkNDZlNzIcQ29udGVudC1EaWdlc3SAATU5ODAzNmZiYTkxYjBlOTMxMDExODg1MmRhY2VlMDBjM2ZhYTdkMWM3MDI0MGI1ZTI2NDYxMDM0ZDRkNDZlNzIcQ29udGVudC1BdXRob3IYOXRvdHVpaHA3MTh2DkNoYWluSWQENTYcQ29udGVudC1UYXJnZXSAATM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2UMU291cmNlSDE1NTMxZmEyLTEyMDUtNGY2MS1iNmU0LWM5ZjY4ZWNmODFmNwB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwiY29tbWVudFwiLFwiYWRkcmVzc1wiOlwiMHhlZDIwMDc1ZThiMTZlMWNmNTE0NzdlM2Y3OTc5ZmQ5MTliZDI5NzYzXCIsXCJ0c1wiOjE2OTE0NjA2MjM2NjUsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcIjl0b3R1aWhwNzE4dlwiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIlNvIGZ1biB0byBwbGF5IGluIG15IHNwYXJlIHRpbWUuXCJ9IiwiZGlnZXN0IjoiNTk4MDM2ZmJhOTFiMGU5MzEwMTE4ODUyZGFjZWUwMGMzZmFhN2QxYzcwMjQwYjVlMjY0NjEwMzRkNGQ0NmU3MiIsInNpZ25hdHVyZSI6IjB4NzNmOGNmZGZiNmM1ZTZiYTNmZmU3ZDQ0ODI0Y2M0ZmRjYTM0MWM3Y2VkMmIwMjcwNzFiODlhYWE3MTc1YTVmMGFkM2E4MzVmY2Q3MjVkMzg1ZTcyMjU0YTZjOTY1ZDA4YThmMDAyZjNjN2Y2MzViZjVmM2VhMGExMDMzNjVhMTUiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRStSbEk0VWM1WW8rQ05sWWw5WFBaUjdZampzVVAvSXFTRjlmSC9tLzZyeTJUdTBlS2c5cS9yaXpyTVhRQ2FhcksxQ0djZXZMcFZPa00wRXhpSkkxNDVBPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweGVkMjAwNzVlOGIxNmUxY2Y1MTQ3N2UzZjc5NzlmZDkxOWJkMjk3NjMiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHhjNmE0NWU3ZjgxMzY1YzQ3ODljMWQ2MzMyOTkyNjI3Njk2MzYzZWNlNTlhZjc4ZWE5YmZjMmFhZDUyNjViYWU1MzFlOWVjZGY3ZGU0NDUzMmRmMWQ0MGM2YTZhNDdlMTA4MWRjMmZkZTAzMzFmNWMwMGJhYzgwZDZlM2ZmNWU4NTFiIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBDeWJlckNvbm5lY3QgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRStSbEk0VWM1WW8rQ05sWWw5WFBaUjdZampzVVAvSXFTRjlmSC9tLzZyeTJUdTBlS2c5cS9yaXpyTVhRQ2FhcksxQ0djZXZMcFZPa00wRXhpSkkxNDVBPT0ifX0BAIdVIKxewDm5EmGscWsx72pr8JQxgU_vaOz1iHDDw1_JDdOvRy95cKhzDkdsb4TNt2txMomjypMiueTfg8-OpcveaasTuuG7ymu5BkjEQDaO1EC1lMLhuY5cGoT0Mv5zMDhHBHY023Ydef_mCkNj5I8eFSZllSojA3OJSR6Mu3_rhZEs-BxPbFOJarSNMCjhg2wRzGXqF8OMVgbq2GF4LxYKnsD-ZHIdLN-fkFmhvytMiwhWhF6WFIko9rUvFeuNBNdkSD1gN2GWiZsVrhcN4gsYGpzoIi0OImhAg_hgROK5NFuH4yQH-94Zxi9pJYhSMGFkS_xG1R1VfqY3j_Xlc3gqHyEPcGpOpcUQb0s1-hK5n5izi2jH9AUy_PAfSTlJ6P_OOyr14I65NA0RykGt2cATSQ7_zW_FdgO0yhPFSGMTUi-C57vK2wf9i5geOkUwO9VZZqArkupYKqYk4YeeDcI7eBYR4lNQWQ5htB_IsT1jGSHgwhpT0EN4t5CCQJygeZnwqvsoTTmqSE08vnwqOxMJDnuWva-wjMMmT3iii3AGGiDFKHrdo_fCnZn0wa_lIQ5lc1WTcIufp8L5lTR-EuLPicDjXn25RRS2np5qf-t9QDcORmfqZGMxRlW7DEM1jEhUqjvUBt816ded3Q9F_OsIGxi-v4JoCv33hjhRJ45SnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAcAAAAAAAAAFgEAAAAAAAANpAQYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0FENvbnRlbnQtSWSAATA0Y2NhOGFmOGQ3YzM4NzgyNjY2Y2JiZTYwNGIzY2NmOTU2MDI1MjkwMjY2YjkxNmI3MDAwYzdjMTk2OTgzYjgcQ29udGVudC1EaWdlc3SAATA0Y2NhOGFmOGQ3YzM4NzgyNjY2Y2JiZTYwNGIzY2NmOTU2MDI1MjkwMjY2YjkxNmI3MDAwYzdjMTk2OTgzYjgcQ29udGVudC1BdXRob3IiY3Voa3RkcHNxY2xoZnlhODYOQ2hhaW5JZAQ1NgxTb3VyY2USY3liZXJ0dW5lAHsiY29udGVudCI6IntcIm9wXCI6XCJwb3N0XCIsXCJhZGRyZXNzXCI6XCIweDExNGNlMTNiMzJmZGY4MjEzM2YxNTUzMTAyYTc0Y2U5NGQ3ZGEyODVcIixcInRzXCI6MTY5MTQ2MDYyNDY3NCxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiY3Voa3RkcHNxY2xoZnlhODZcIixcInRpdGxlXCI6XCJUaGUgUG9ydHJhaXQgb2YgdGhlIEludmlzaWJsZSBXb21hblwiLFwiYm9keVwiOlwiWW91ciBwb3N0IHdhcyBib3RoIGluZm9ybWF0aXZlIGFuZCB3ZWxsLXdyaXR0ZW4uIFRoYW5rcyBmb3Igc2hhcmluZyB5b3VyIGV4cGVydGlzZS5cIn0iLCJkaWdlc3QiOiIwNGNjYThhZjhkN2MzODc4MjY2NmNiYmU2MDRiM2NjZjk1NjAyNTI5MDI2NmI5MTZiNzAwMGM3YzE5Njk4M2I4Iiwic2lnbmF0dXJlIjoiMHhlOGZhOWY5ODViNDUxZDdmZjAyNTVjNzdmZjNlNzc1YmIxYmVkYWQwYWY3ZDg4MTkxM2NmMDk5ZmU1NjNmODljZjYwZTg1MWNjMmZhNTVmMTJiMjFhZDBlMGEzNGU5NGQzYWU4MjYzYmRlZjBlM2EzNWM4Yzc0NjgzNmM5MmMxOCIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFckVNR3E5VW1XazdXa05OY3ZlVUJaUS92NnhabmdtMWp0Ky9nQVU3ZVI0L2hxZWxyQkN2K2FBNGpyMHA2MUxiTTBlcVl5ZGpydndCcXNBNDR2VEFYSmc9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4MTE0Y2UxM2IzMmZkZjgyMTMzZjE1NTMxMDJhNzRjZTk0ZDdkYTI4NSIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweGQ4ODlkMzIwMGNlYTlmMjVkMDgyZjliOTM2ZWI1OWNkYmQ3NTYzMGUzNGJjNDU5YmRiMzAzNzBkYTk0NWUyYjk1NDAwMTcwYjY2NTE3OWMzNWUxMzI1YjIyNWQwNGVjY2NjNTcwYzkwZmE0NjkyNGFhNGY4MTMxYzQ4NDdlMDBkMWIiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEkgYXV0aG9yaXplIEN5YmVyVHVuZS54eXogZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXJFTUdxOVVtV2s3V2tOTmN2ZVVCWlEvdjZ4Wm5nbTFqdCsvZ0FVN2VSNC9ocWVsckJDdithQTRqcjBwNjFMYk0wZXFZeWRqcnZ3QnFzQTQ0dlRBWEpnPT0ifX0BADM3VeePELZ5yBNHp0RVcIcMNmvI5q0Lbup0LWRpa1rtVx3YNajlS2ysmOJbdwZ21HIDnbYQ8y6KSbvO4S4J_ArD_wHhatpfZ0teY_Vi-QeXoeHjcVpDN5X3ovuzMpKvvULaFcjVfmm4gZKmffVz-AHYjj7ZeQLY1tBoEGoADuuCkGt91wRdqg5gnBHcvt4cm14xzarUFwQF2ZeDcnWz-UG5kLILgW_Drm2-J1L697-AO9tvInXdWAnkZLS8tm3pJQaO2VZDmA0VEeUiyFwIlAgPByQyjJ4cyjI5CJu0FlkiX8a5SyZKVDEVXpdrCYwCUihHKI9Y2k-cMXSkhiuZU58dhsjIQ6PSkSgZm5gUkog4iRC3g9qEIoTOQkJY3h2gQjOArhKmVq6tE9U05grCRCN6TprygbocjG815fBUHSDkGHKxj5kf7bKpIc3_jsSMVznwS8W6E-hlfhzUJv6GLleLFWpkq3mezqIgLhcygDc6sJfAyKRbmC9STe9O3CbtmLHIsz1YMDQVOsrn7FEvEnvOCOMaW3q7jx5tNefMFLBTQx9bIzUbhxfG6CeDVOZwpdzzy-qtvOkSAY9H4X9lmdwtfg1EjaHqyX1qoKwXfPcpzNJytXccL5_NRCy0uvC2732rvwCgTo1YY25gCf5vGpQy4kuOvQBsvz1JWH6Rm_sdnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAfQEAAAAAAAAP8gUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0HENvbnRlbnQtQXV0aG9yGGJmbTdmaWk0NHNyeA5DaGFpbklkBDU2HENvbnRlbnQtVGFyZ2V0gAEzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlDFNvdXJjZUgxNTUzMWZhMi0xMjA1LTRmNjEtYjZlNC1jOWY2OGVjZjgxZjcUQ29udGVudC1JZIABN2UwNjU4YzYxZmNkMzkwNTVhZGJlZmE1MWU3YzJjNGNiODVhZTVjNjc0OWI5ZDM5ZTYwNWIyNGNkMDkzYTY1YhxDb250ZW50LURpZ2VzdIABN2UwNjU4YzYxZmNkMzkwNTVhZGJlZmE1MWU3YzJjNGNiODVhZTVjNjc0OWI5ZDM5ZTYwNWIyNGNkMDkzYTY1YgB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwiY29tbWVudFwiLFwiYWRkcmVzc1wiOlwiMHgzODE0ZWYxZjQyNWVmMzFiYmI0MzEyY2IyMjAwODA1YTgzZGQwMjE3XCIsXCJ0c1wiOjE2OTE0NjA2MjM2NTQsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcImJmbTdmaWk0NHNyeFwiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIlNvIGZ1biB0byBwbGF5IGluIG15IHNwYXJlIHRpbWUuXCJ9IiwiZGlnZXN0IjoiN2UwNjU4YzYxZmNkMzkwNTVhZGJlZmE1MWU3YzJjNGNiODVhZTVjNjc0OWI5ZDM5ZTYwNWIyNGNkMDkzYTY1YiIsInNpZ25hdHVyZSI6IjB4MmI4ZGVmY2IyNDZmZDI3YjdmODQxMDQ0MDJiNzI2YzEyNjlhYzdlZjgxYzE3NDg4YzcwZGY1ZmM0NjcxMTYwYjYyZWUwZGI0MWUxZDY2ZWQ2OGRkN2FlN2UzYmIyMmJjMDVmMDI3ZjE0MjY5YTZiMGVjYTZmNWViMjJjODgxMzAiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTRLcHh5YVVFeHc5aXFaMit3L0FBcWFPOUFZRVd2aWp3RlEybjNXZGk5dHVleUlPZkRVZ1lwbHpES2o3cTh4aXJGWUZ4R0haZC9KZ2d5RDZmUkNWRXJnPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDM4MTRlZjFmNDI1ZWYzMWJiYjQzMTJjYjIyMDA4MDVhODNkZDAyMTciLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHgwNDQ2MjQ0ZDJhODQ0MTQ0MzRjZGZkNThkZTlkNjUwZGY2NDdmY2FlZWNkMmFjN2JkNmE3OWQzYTYyMWJiNWRlNDNlZGYzOGU2YjllNjg5OTNjZDFjYmVkOWI1Nzk1NTkyN2M0YTYzZjM0ODM5NWRlY2VkOGU0MDJmY2EwNDYwYTFjIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBDeWJlckNvbm5lY3QgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTRLcHh5YVVFeHc5aXFaMit3L0FBcWFPOUFZRVd2aWp3RlEybjNXZGk5dHVleUlPZkRVZ1lwbHpES2o3cTh4aXJGWUZ4R0haZC9KZ2d5RDZmUkNWRXJnPT0ifX0BAFJpEsI7e5Kzo0XFLHqa1JupQ4vf9KwLZnumpS9BY8Cjkz93YirNnUhYIEM_-CADChI3Z-PS9A2EtaNH_CVpN2fEyPduTTRIsTDBljahKg_OlzAcKkOGrkreitW290n5YQIDa-8h9bmSUE1HYPyDvquvcAgAuO_bZBKerU5P8-abLR0IQBxXbbc2F6Ic-kLIbAr32tAr-NcRmUgMddrR2muDPmththOmoBBynPQT5c3Wm_mF0fAdJpgQWCcEj2iexXP79bZFnzDPnH8lVzrLc9E9I8LiLbxhJbhLg34hhijDTZjCsWaQo8r772ns8IUf47U-6l4sQKRGNO6Zj80XynlpVaZobDzIw-1Jmh2btyZVCp3VSWdh4TsFoWIL0JDSvnJ85d_VKrgkWuc9uCBQuWcSNsnGqAcUzXsHnuUCvZtcy5-YD02eNNKRel0jIk-mp3VjlL1_9kzjj4ykkLtOGet67l5bj2tNJ8OKuQGQAN2lpmNqoltGDGcHiCRlyFgFOYNadNzCWhRu69Y0QOtrI_upTKbG3c3UYd8LigzXSAlstU5pLmkQ8DhY8RLaPJjGQOfJqTpWPGEzGFPgdkJFiNPPuflwaGwjaTxtBQwMxsrpOGMIv-aSzjf-dYdF0cRgO-mFbisWUB7FN5IMZU3IAfRTaE30DaE57qDeXPxQYoj1nPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAfQEAAAAAAAAP8gUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0DFNvdXJjZUgxNTUzMWZhMi0xMjA1LTRmNjEtYjZlNC1jOWY2OGVjZjgxZjcUQ29udGVudC1JZIABZjA5NTM2MDQ1YzhkNDZhMDEyMWM3NjgwNTBjNGE2MWQ1NDhjYmRhNjJmNGQ5MmE4M2ZkYzA4MTdiNTFhN2RhOBxDb250ZW50LURpZ2VzdIABZjA5NTM2MDQ1YzhkNDZhMDEyMWM3NjgwNTBjNGE2MWQ1NDhjYmRhNjJmNGQ5MmE4M2ZkYzA4MTdiNTFhN2RhOBxDb250ZW50LUF1dGhvchh1YjV6ZTd4ZGp1NWwOQ2hhaW5JZAQ1NhxDb250ZW50LVRhcmdldIABMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwiY29tbWVudFwiLFwiYWRkcmVzc1wiOlwiMHg2NjhiYjhiYWFkMThhZDA5ODEwYzRmMjlhZjBmNjVjZDQyZmZlMGU0XCIsXCJ0c1wiOjE2OTE0NjA2MjQ2ODQsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcInViNXplN3hkanU1bFwiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIlNvIGZ1biB0byBwbGF5IGluIG15IHNwYXJlIHRpbWUuXCJ9IiwiZGlnZXN0IjoiZjA5NTM2MDQ1YzhkNDZhMDEyMWM3NjgwNTBjNGE2MWQ1NDhjYmRhNjJmNGQ5MmE4M2ZkYzA4MTdiNTFhN2RhOCIsInNpZ25hdHVyZSI6IjB4OTIwZDgzNzJjZDk1YWE2OGQyY2Y3N2VkNTFkYjUzNzZhMjc5NzI4NmYyYzczYzUzOTA3OTI4ZGMzNWU0ODg0MDNiNjQ5ZWU5YTQxZGQyMWE0ZjZmMWQ3NmNhY2RlZWIzMzMzYmIwYTQ2ZDdlOGRhZmQ3NWRlOTIxN2ZlOTRhYzIiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRWJWVnF2T0FLcUdYelBYbVNza1lPam9vbzlxdzBYdjRvMnVzNWV4U1VsQlpLLzFVY3NpdDZuYVNNaVBBNFRlZkRMUjZlbzFEQllDOW5HQUIwM2ZZSjlRPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDY2OGJiOGJhYWQxOGFkMDk4MTBjNGYyOWFmMGY2NWNkNDJmZmUwZTQiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHgwMGQ2NGM5YTBiNDI1ZDcyM2JmYmQ4NTZjZWVhYjQwZmE2YTdjZjY4ZWE0YmNkZDAzOGQ1NzRlNDM2NjMzNmQwMDA5MTRjNDRjODM2MWZjZDJjYmMyZDRmYTFlOThhZTA1ZjdkYWU3MTVjODliN2YzYzc3NTBhNmViOTVjOWY2MDFiIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBDeWJlckNvbm5lY3QgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRWJWVnF2T0FLcUdYelBYbVNza1lPam9vbzlxdzBYdjRvMnVzNWV4U1VsQlpLLzFVY3NpdDZuYVNNaVBBNFRlZkRMUjZlbzFEQllDOW5HQUIwM2ZZSjlRPT0ifX0BABMkeQvdumydQyKZV-F0qd9bw4bZABzqYAfEhORY-LqUefbREjlD6Qk5c0mBy_IKbhfvToRrTCE-HP_Qp9a_WTTwItoW7iRvQk0yGSiLr7AN2PkdWlXkxkBNo2E9e0mcUri2RYFKGSfwt3t-wvJFNxFvMyZ_vIkouIGprYsr_ue0RWYM2iLGdoHaqSpwG93DBGnm4Jttx2MTF8g5HOA47uNimOMEJpEBAs9CWfE-DLPQsEVxJbefEqms3RPt1dpdxip7qohi4cBVeY1Vjg9wBiIzRi36bQOJRnMw_C2zupu0HnVXsRLUH8jhk_qyT7nlLdWtr_X9ZZWxIeZuXeDyMQnMn02LDqyW3k0Ohaybsp_nPN2I8dMX0P-Q0tr5eaF8bEF2Q_gqsMepAniC9MUktIN4auus30sgKlu5l3OcgTb-HfG1Zpeqv1VVzum9nytxiwjqFPtK82Kd_gjbsYP5_pc9KU7upbVtQbXhvDiKHciiicsIT-2zd3YgZKemorlzlh7MzAmgABBoKC9kfgigVhrY7cgLib2uWScfiIRuA8BPVymeCZju8BYeHvWpG1bXIzkQDd4FBwze2RgcqmIpGXG5M0yaOjo7WuvnwHVRlmbVuj1MRr1z8NogpmgbS-hgpusHY2U1nYIsOMQGXzO5RfmZiQgC54OfFtF-GnDpx82XnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAcAAAAAAAAADAEAAAAAAAANkAQYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0HENvbnRlbnQtQXV0aG9yGDF3ZWI4OXJrMTUwMQ5DaGFpbklkBDU2DFNvdXJjZQhhdGVtFENvbnRlbnQtSWSAAWE4NWQwMTM4ZDU0Yjc0MDdmOTM0ZmExOTlhYzA5YzQwN2E3ZTI3NTc1YzNmOWVjODUxMjczNDVkZTFlMTNmMDAcQ29udGVudC1EaWdlc3SAAWE4NWQwMTM4ZDU0Yjc0MDdmOTM0ZmExOTlhYzA5YzQwN2E3ZTI3NTc1YzNmOWVjODUxMjczNDVkZTFlMTNmMDAAeyJjb250ZW50Ijoie1wib3BcIjpcInBvc3RcIixcImFkZHJlc3NcIjpcIjB4MTM4YzY3NDk2YzRhMTVkNDk3MDEwM2U4NmNlN2I0ZThhOGFmNmI4ZVwiLFwidHNcIjoxNjkxNDYwNjIzOTUyLFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCIxd2ViODlyazE1MDFcIixcInRpdGxlXCI6XCIxMTExMlwiLFwiYm9keVwiOlwiMjIyMjIyMjIyMjIyMjIyMjIyXCJ9IiwiZGlnZXN0IjoiYTg1ZDAxMzhkNTRiNzQwN2Y5MzRmYTE5OWFjMDljNDA3YTdlMjc1NzVjM2Y5ZWM4NTEyNzM0NWRlMWUxM2YwMCIsInNpZ25hdHVyZSI6IjB4OWFlOTk3NjRiYTlmNjRkYjE2YmExNGNhMDI3ZmVjMzRjNzJlOWIyOWYyYmM2ZDNmODBhMjVmYTBmNTEwZjM5OGQzMmM1ZDE4NDU0MzAzZjc4MzVmMzMxYTBjZGQ2YjVlYmRjNGZhNGYyYzBkNzRkYzBjNzkzZDBjZTI2OTcxODgiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXhMREk3VG42ckl2M1lGK01NMFdSNVdKOHZZbThsNXkrSGZicHFuOHF5cXdHMTducDl2dEVuMFNzNDUxZFZHeFRXU3VOSE9rdEhLU3I4cnRidWhPVmVRPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDEzOGM2NzQ5NmM0YTE1ZDQ5NzAxMDNlODZjZTdiNGU4YThhZjZiOGUiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHhiMGIxNjc4NzY4ZTEwNjBmZmY0ZTExNWRlNTY5NzkyNjQ1NmEyZTkzNWZiYjA1N2ZiMTdhMmU5YjY3ZWMyN2Q0MzA1N2Q1OWRlY2FhYTZhZjdkNGM1MWY0NWRlMWU3ZDllMGYxOTQzMmUxYjI2MjAyNjBhNzAxZGJiYmYwZjEzZDFiIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBBdGVtUmV2aWV3IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUV4TERJN1RuNnJJdjNZRitNTTBXUjVXSjh2WW04bDV5K0hmYnBxbjhxeXF3RzE3bnA5dnRFbjBTczQ1MWRWR3hUV1N1TkhPa3RIS1NyOHJ0YnVoT1ZlUT09In19AQCX4Oc9jt3xVNvGe7dPhAunWiIf6LyME6ogapDlhPU1X5Us6dvjfyKbsYsUnYHeILugGRksRCwfSdwgu1dPv_Jn_BDAwxJMJi1lw5OO3UmkG-jB96Qo28jft2w0Z1ljHr_qZrVYTQCSc8cKhYddDgkw0YflDckpuMEGQMEQTKRaqrQ-TaOHlLMHq6LHZQ6VpIaGv9uBfHe-A1eZJEhBbQAuNIGnTeHSPGh4dAkvL_kBLz9QvvJkWnWbVPG9JamjDCG6qqkTNKpbaryPdhjCO1u_kJ0Pt8ZsHRW3o9_43_ZNpm6zeKDtoSuPA1bv58SK_tELLljs3evw3UkSIJyEKDmTe0pzpWoqha7__HIMqswK1N77-eNScEVE1CAq_mYveEaslIJ1KCt5-8Zpsp7rMtZCFp9qwsbum0XZOQ61sjllWIWpXN2fW5z5WJ7JTPR9KUm9wKcp-n-rsPgzNmPTwKlGu0Ui38AXrfaG_3_-_KMAPtt8wQpvWghqYMECQefURz7Zapps915_Nsq7-mn57GzTEvjxo6-bBRyNGA93C-l8sum0RlyGP0Mhn8ILSp7UYvfngQCfaHtputoITKiNnT0Zz6h9pDxzy-xkmLjNVmzRBa984PssyPsjYcMaY5Mw4Z6yR_XCr-DZ6aEq-_e2JyChg9aUTmM3xwrIrHbcomoijJz4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAHAAAAAAAAAAwBAAAAAAAADZAEGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdA5DaGFpbklkBDU2DFNvdXJjZQhhdGVtFENvbnRlbnQtSWSAAWU1NjEzMDViMDY4YzJmNjZhY2U4MWE0ZDEyM2M4YTQxYWY3M2NjYjcxNmQ1M2FjNTI5ZjI3YTM3ZGQ3ODY4MTYcQ29udGVudC1EaWdlc3SAAWU1NjEzMDViMDY4YzJmNjZhY2U4MWE0ZDEyM2M4YTQxYWY3M2NjYjcxNmQ1M2FjNTI5ZjI3YTM3ZGQ3ODY4MTYcQ29udGVudC1BdXRob3IYcTJrdGZjZGJrdHNvAHsiY29udGVudCI6IntcIm9wXCI6XCJwb3N0XCIsXCJhZGRyZXNzXCI6XCIweDFkNDIyNjJmODQ3YWQyZWU0Y2M3NjIyZjQxZDBhMTlhMzZhMDZhMmNcIixcInRzXCI6MTY5MTQ2MDYyNDE2NCxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwicTJrdGZjZGJrdHNvXCIsXCJ0aXRsZVwiOlwiMTExMTJcIixcImJvZHlcIjpcIjIyMjIyMjIyMjIyMjIyMjIyMlwifSIsImRpZ2VzdCI6ImU1NjEzMDViMDY4YzJmNjZhY2U4MWE0ZDEyM2M4YTQxYWY3M2NjYjcxNmQ1M2FjNTI5ZjI3YTM3ZGQ3ODY4MTYiLCJzaWduYXR1cmUiOiIweDdlMjZhNzlkNzMyYjdkMzQ3M2NlZDlkYTlhZDNlYzZkZTIxNGFiZTU3YTFlYWJmZDA4MjM4Zjg0NWI1NDgzMTA3NmU4ZWVmODJiMWE0OTZmZmJmMWI4ZTA3MDhiZmYzMzNjZTQ5NjI1MmU0ZjI3NjBiNGU3ZTJhNWVhMjIyMWM5Iiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVaSlk2UHJGN1BzRTZxYUcyL3N2Q2hTVGZnZkkreVZ4ZTlSaVhMUW5EOUREUklUOFJHQkhqL1c0SUxDNVM2dXNJZ1dhUUllSGtKK3poWEllVmJiU08xQT09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHgxZDQyMjYyZjg0N2FkMmVlNGNjNzYyMmY0MWQwYTE5YTM2YTA2YTJjIiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4OGZmMGFlYWM5MTE2Y2JlMTRlNTlmNzkyMmFjMGM2NzMyYTNhMjZjOTUxNzcwMjhjOTRlZDg0ZTk2ZmQ2YWQ5NzY1NGJmY2JhNTQ3MDA1YWQxODA0ZDM5MDFhMDBmMjZhZjNkOTgwNmQ3YWVjM2RmZjAwMzgyNjEwYjU5NTMxMzYxYiIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQXRlbVJldmlldyBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWkpZNlByRjdQc0U2cWFHMi9zdkNoU1RmZ2ZJK3lWeGU5UmlYTFFuRDlERFJJVDhSR0JIai9XNElMQzVTNnVzSWdXYVFJZUhrSit6aFhJZVZiYlNPMUE9PSJ9fQEADtIAjH3_Ut5OtJGcmjrv4d42U7Nz4ruA-4184ESk6Zm1FQk85P5aHevcq4AiZlHP6HGdW7CtIJgOQIQXPFLdGZO8y8mdgO-tQUbiXjMFYkwX4IDtX1hK239Z8WdT3_s4USHYXLx3kTOiqXJPu8r48V6GWxEJn-jYgYjeViGrxZggQEq-WLrXEfVnj46ndeh4TlpIiWoi0gNixmuIYhCkrGvtNxpUD__FOu7HBRiZ-0MB_AVKA3PKBpnkWgu1ni38S4Cx6Y0CkxANGYmWQPrK-gZHfzeatO3_8OtJ6i6bvnwUB0htBl4rUm7Z7QCOstp_UAfR03ACGKfmvrqJ59sPCcFCBj36VH4M7qLd1xzEdExClYa9WrukewlBxSu7Bm33aF6poIw3XLr9GkxKvBbQM7GvJizPAjlWsLm_SB8_IZFYCE9fSh6UifE9faBeVU5J5kZbakhwmaxeemjfUaoIp_c6ZuP39Wrm3eC82CdCMpuoB3rhaydaBPDaIP4tKt5sjdH_TY3rBF2W39ipytP-pygctVXXCmhgRsqQmJRgh-3T01WxELPGyJOBC-U-MhhqqMZF1ehHvnWjFmOoxyBUzC1qdXq6DlB0EbeyUtWskYmixnYF6ZduHaYhZiiqlCZPKxLk28RqMSkAKFTA9yofZ0dPp9MDNW5Mq3vgcrmD_JKc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAABwAAAAAAAAAMAQAAAAAAAA2QBBhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QUQ29udGVudC1JZIABZjI2NDQxZjc5MDVmYjA3M2ZlMTM2OTE3ZWU2Y2EwYmVkMmU5MTUxNjgzMmFiN2JmNTQ4MDc0Mjk5Y2QxOTcyZBxDb250ZW50LURpZ2VzdIABZjI2NDQxZjc5MDVmYjA3M2ZlMTM2OTE3ZWU2Y2EwYmVkMmU5MTUxNjgzMmFiN2JmNTQ4MDc0Mjk5Y2QxOTcyZBxDb250ZW50LUF1dGhvchg5N3NsNjd4a2R6Y3MOQ2hhaW5JZAQ1NgxTb3VyY2UIYXRlbQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwicG9zdFwiLFwiYWRkcmVzc1wiOlwiMHhjNzBlNTU2NzUwMWE2ZDMzYmU1ZmNhMWNiMGUwMDFhMmMyMjdjMzg3XCIsXCJ0c1wiOjE2OTE0NjA2MjQwMjgsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcIjk3c2w2N3hrZHpjc1wiLFwidGl0bGVcIjpcIjExMTEyXCIsXCJib2R5XCI6XCIyMjIyMjIyMjIyMjIyMjIyMjJcIn0iLCJkaWdlc3QiOiJmMjY0NDFmNzkwNWZiMDczZmUxMzY5MTdlZTZjYTBiZWQyZTkxNTE2ODMyYWI3YmY1NDgwNzQyOTljZDE5NzJkIiwic2lnbmF0dXJlIjoiMHg4MzMxYzBlODAzOTUwN2VkNjAwMzY4M2Q1ODVmZTZlOGU5MjU2NTFhMWY5MzJhZmMyZWEzZTE2ODQwMmQ4ZWIzOGE5YWQxZmIwNmNlMjMzZTljMjVkYWE1MzVhZDc4YTcwZDk2NjE4YzE0NGM5M2FhMjUyM2Y3ZWYxODgzNGEwYyIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFTlRpaEpWRStxeHFqZXJycVAxMFlNTG1FUFduNUZ5cUF3bzhpajZmWFQwZVE1Ky8vd29tbk05VWFpWGdHWFNzMmFVT081eUwxa0dtdUxaQ0dBQXVNWnc9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4YzcwZTU1Njc1MDFhNmQzM2JlNWZjYTFjYjBlMDAxYTJjMjI3YzM4NyIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDBjZDE2NjZiMWFjY2RiMzc0Mjk5MzQ4NmViNGMyZDc4MGMyMjdjNzViYTA5YzE3NTZhMWQyZDk2OGNjMWE1ZGIyYjA3ODk0NjQyZjhiNDdjOGRkMWYwMjU5YTRhYjRlZmJiNzU4MmMyOTNkNDliY2QyOTAwMDgxNTlhNGY3ZDRlMWIiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEF0ZW1SZXZpZXcgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRU5UaWhKVkUrcXhxamVycnFQMTBZTUxtRVBXbjVGeXFBd284aWo2ZlhUMGVRNSsvL3dvbW5NOVVhaVhnR1hTczJhVU9PNXlMMWtHbXVMWkNHQUF1TVp3PT0ifX0BAHJEnd9y_pDL64eMfDztNRaN64cm-8kMDLSl08Eyt_UjpmDoG0mG-47fX3HHnwJr4Ey2JDw8d9xZ37Dtn88D4B1xtY01Ei1UJRVRanarF0hvGvugGSUkw_pDEOOE11PZ7n2_IwMDbFO2A5aHQUMaILhLxPjfdEDk3UWYRBCKqMSBn5eVPspYktc2EfHIQCUjFimp45jDyxiUtRKqV-ockK6f5-HM7kroG4OKdc8ZWguO47zQQTgCtiapkZ0qyVUQ5lwkYOaUFpGGCrTYVZl_1kdR_YdAGvAWhEU5ezQufjMT4-Eq77BySFxoZbjIi5fUZEH49evlFln3pq7BvAvRf3FdzkpYdZQyh7LD2tafSE4bJ8NdRubfehNgsYO5__qg1hOnZK3TSjtzPt8BnNceVyfFkqdLoW71aUfSJq8jzjuC3sWZgcNIG3SWDhgxmPcHxGqPxy88wR65HMB9Jzoa6vdtCqUPQcMu3q-v-C5Cbduran7xhrt2wXGtTVbkR_dPkAg8HyEp3kRpOGHBnbq4t-IP-SH_wjtCgoWoVVBcIlzJa-f0pjNkcj85g5dYqEJKdEjRLjRyUEC67piC6Anq0PtOUGx3tuHq0KsUIH7H5eU8Y_YO1lHd728nxSLvRKaLvBNp93nbPl4N3ucuFVxGwTZLnQFvYikC5uZN0Rgi38FTnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAcAAAAAAAAADAEAAAAAAAANkAQYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0DkNoYWluSWQENTYMU291cmNlCGF0ZW0UQ29udGVudC1JZIABYjVjNmQ1OGJmMDQyZDdiOTM5NzQ3NDA1OTAyNTViZWMzM2VjOGZlODQyZmI5Yzg4NjFmNDc4YzE1MTUwMmI5MBxDb250ZW50LURpZ2VzdIABYjVjNmQ1OGJmMDQyZDdiOTM5NzQ3NDA1OTAyNTViZWMzM2VjOGZlODQyZmI5Yzg4NjFmNDc4YzE1MTUwMmI5MBxDb250ZW50LUF1dGhvchg5Y2ExeWZteXdvMmMAeyJjb250ZW50Ijoie1wib3BcIjpcInBvc3RcIixcImFkZHJlc3NcIjpcIjB4NzgzYWQwMThmY2M5OTk5MDlmNDU3ZTViNzAwMmFjNDdhOWJlZmNlZVwiLFwidHNcIjoxNjkxNDYwNjI0MDk4LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCI5Y2ExeWZteXdvMmNcIixcInRpdGxlXCI6XCIxMTExMlwiLFwiYm9keVwiOlwiMjIyMjIyMjIyMjIyMjIyMjIyXCJ9IiwiZGlnZXN0IjoiYjVjNmQ1OGJmMDQyZDdiOTM5NzQ3NDA1OTAyNTViZWMzM2VjOGZlODQyZmI5Yzg4NjFmNDc4YzE1MTUwMmI5MCIsInNpZ25hdHVyZSI6IjB4ZDdlYjY3YmQxNGJlNTBkMTEzNzVkYzEwZWU5ZmI3NmRiZDhiMzJhNjAzYTgwYmI2MjU5ZWFjMjlhZDY0NzA5Yzc5MmI0YTlkODAzMjAzNjViMmE4MTAwY2YzYTk3NGViNTEzMzNlNmJiZjAwNjgzOWQwNzk3NTI2YWY1NmY4M2IiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUgxNlR0emM0Znd1dTIvWTFBZUs2cHNvTlpTek9lTEV1TFNOMy9IUW5rMUswL0JsOThicnJnZFdIckVBY1ZqMHg2TmRpMTFlSVdEMDl1b0l3WEpobktBPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDc4M2FkMDE4ZmNjOTk5OTA5ZjQ1N2U1YjcwMDJhYzQ3YTliZWZjZWUiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHgzNWUyNzMwOGI3MjcwYWZmNTg3OThhZmI2NTQ3MTNjMmE4ZWQ1YTlkYjAwNGI4ZTkwZGQ0NWQwNGE0Zjk1OTJkNzZkMDg1OWY5OGMwNGNlNGRhZTUxNTMzNjI0Nzk0NTYzMmE1NTc0MDgzNWNiNWUzZGQ2MTQ1NjczMmFiNjdjMzFjIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBBdGVtUmV2aWV3IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVIMTZUdHpjNGZ3dXUyL1kxQWVLNnBzb05aU3pPZUxFdUxTTjMvSFFuazFLMC9CbDk4YnJyZ2RXSHJFQWNWajB4Nk5kaTExZUlXRDA5dW9Jd1hKaG5LQT09In19AQBxhpl8y0ozf5WWfEVZ84ZG04LDhATmwWm-yoZ_B_tNYr2801oGNkRFt9NdgvoKRISgguKgDT7CVS3Gz5h-ko0rGEH5drgJKfHdBda4iVv0ygGut5EQxmMkYTqmJCnhxytF1mub9B_R3KqtVPhP24lwndDBZ6U1IVWbH_19lCTmd2lERWLzxlONBh39y84klGd1fWCYsNKOvjIvB9X7opR8Wqm8NjrhWACTCBY6BSC1bZYRBAKMVG1vZgHXB4OjlbdVGKkkLrrbwLVKr8TRLeKyy2eMhbYH7N-aN_Qz0ghPlGHwfk5c9KP-_Zi8xSTLrVaPm9iHysRyxRyWaKzGtbyEmR6R6M3pF5GdIdCzU7RrCfwXDrdCEkcG1FZ6r3ZlCIp2Vamv-6xQI283BbS_lQk_X4dLx7H9tWJRGASSN5en52HryAxux_PKpAQcy4nYR2RuNVW31ls8tGayrxiyoSNHOmCX9fbt1I09BltymCGYNJ11x7ewpJdWMaf6iWa45ogR1rQQkIBHhKGvmEfkF_0ZHJe9WgH6TCWzpM5li313QzZNoa-K12YyRu1rtUM1UVV3OgHYqyt9GK3HkBzelTP_xcWf_9nTjtkzzq4LeZG8iZ7XlmIsIPLbN4JYEPr4h3W2pzRCOLWdejC7kwQWTFs0UVpIwaeQIrbPYhnRiGcvRJz4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAIAAAAAAAAAH0BAAAAAAAAD_IFGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdAxTb3VyY2VIMTU1MzFmYTItMTIwNS00ZjYxLWI2ZTQtYzlmNjhlY2Y4MWY3FENvbnRlbnQtSWSAAWFjMGRiMmMyZGJiMWRiYTg4NGNkMTE5YmU3OWViYjRiMjJiZjg3MjZiN2JiNGRiNWE5M2U5NzE4MzUzYjA1MTUcQ29udGVudC1EaWdlc3SAAWFjMGRiMmMyZGJiMWRiYTg4NGNkMTE5YmU3OWViYjRiMjJiZjg3MjZiN2JiNGRiNWE5M2U5NzE4MzUzYjA1MTUcQ29udGVudC1BdXRob3IYZzdzZDA3cmk4ZXc5DkNoYWluSWQENTYcQ29udGVudC1UYXJnZXSAATM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2UAeyJjb250ZW50Ijoie1wib3BcIjpcImNvbW1lbnRcIixcImFkZHJlc3NcIjpcIjB4Y2VhNDk4MTA5OGVmMDc5MWMxYmFiMmUyYWM4MTQxNGYzYmRjMTdmN1wiLFwidHNcIjoxNjkxNDYwNjI0MTc3LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJnN3NkMDdyaThldzlcIixcInRhcmdldFwiOlwiMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZVwiLFwidGl0bGVcIjpcIkZsYXBweU1vb25iaXJkXCIsXCJib2R5XCI6XCJTbyBmdW4gdG8gcGxheSBpbiBteSBzcGFyZSB0aW1lLlwifSIsImRpZ2VzdCI6ImFjMGRiMmMyZGJiMWRiYTg4NGNkMTE5YmU3OWViYjRiMjJiZjg3MjZiN2JiNGRiNWE5M2U5NzE4MzUzYjA1MTUiLCJzaWduYXR1cmUiOiIweDY2MTRmOGFhNDE2NzgyZGMyYzY0NWE2MjBhYjk4NGMzNjAxNTc1MThlMjg3ZTUwMzYxOWQ3NjI5ZDI5OTBhNGM1NDVjNjNmNTFhMWY0ZWIyN2I3NzM1OTYwMGZkY2Y5Nzk5YzYxOGQ5MGM2ZTQwYmMxYjg1ZjZlNzE5ZDAyMDZjIiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVWWE93Z2RhVFEveXZGTXQ5emI3em5LeTBlbURhZis3aXdMR0V1ZEc4SHZLWCtlaUE1Yk9XMmc2c3BqaVdUaDJIUnFPZ0Z4QkNOMGtidnltd2c3NDl2UT09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHhjZWE0OTgxMDk4ZWYwNzkxYzFiYWIyZTJhYzgxNDE0ZjNiZGMxN2Y3Iiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4ZWJkYjdjMmM1MmU2NDhjMmViOWJmNjcyZDVjNWY1NDRiMzAyYWFkMzNjZWNjNzg5NTA0YTA0NzdhMzgwM2ZjZDY0NGRiNTE5YzhhY2RiZjdmN2UyYzU3YTM2MTAxNTczNjFjMzQ3OTFlODUyODhhYWM5ZmVmNzMyMWM5ZWFiY2IxYiIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQ3liZXJDb25uZWN0IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVWWE93Z2RhVFEveXZGTXQ5emI3em5LeTBlbURhZis3aXdMR0V1ZEc4SHZLWCtlaUE1Yk9XMmc2c3BqaVdUaDJIUnFPZ0Z4QkNOMGtidnltd2c3NDl2UT09In19AQBt-Ss9rOo3E7ACINl8XRf-Qyhdtb4cvvYWXPWNSg06NRAhAsLOuHBTw3cVSEAWAWywNsIQ_IsauJG1pv81nv_Uq7enrCGnUy3yCr9oFonD0dWxDU2mNaBEzJkDM73YhoRWRsTDNixdeRqBOEoQZIM02PoNnJJ2_2YRZgHXmNX6YG_WI_4gwEjyfyEIbKh8M8dOlw7XPTTE_8ONiQ_YixwsJIjAFwHWUEefQgzVEohlSzKUl7OIsHSnxxCe6xS24UqSD6Zne8SSGl9DU4oj9b9jc0_V8umJfCngMzYxab4lYKcGLuJTHZK0dS-TsiR0eaeMXecVrU8sK9SlGI8TmGyGq-stT9lWYyI52Ky73N9tQn5XbkH1DYg7g9o1HiPnede-N5Wperxfiz6WD4qerY103KCAZMFJdg6MX3FLTwh07G-4QJqXbsTRrPbOOM0Kz3N0njp-1bYngKuV8sQf5bx8jIN0uErlW_O6_0k4B6vs9lbmpLcWeTI50wQzDQlhQFmwHw_OiPSk_pJ5vJHT75KzQAnV8Nd2EpRvC7FNUBaLx55vgTj5BNfgVwPlMn3QTd11tnz39gXjLOMX3Dr6JZscdv8hvW0GerJK8wWTftxD5qXAFtDqGCPm8mrlSrANqbqjhlqVgJEeLPOrqnVW4zDgJ6aOOGaHsP1A9uloN1TUnZz4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAHAAAAAAAAABIBAAAAAAAADZwEGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdBRDb250ZW50LUlkgAEzN2ZjODkzNDNkMmFhNzVlYTc4MTlhNGNlM2M5NDU0MDg4ZmQ1NGY5MjRiZDdjMmMzYjNiZDI5OTQ2MDg0ZDg1HENvbnRlbnQtRGlnZXN0gAEzN2ZjODkzNDNkMmFhNzVlYTc4MTlhNGNlM2M5NDU0MDg4ZmQ1NGY5MjRiZDdjMmMzYjNiZDI5OTQ2MDg0ZDg1HENvbnRlbnQtQXV0aG9yJGphaXJvYmVybmFyZGI4YWpnNA5DaGFpbklkBDU2DFNvdXJjZQhhdGVtAHsiY29udGVudCI6IntcIm9wXCI6XCJwb3N0XCIsXCJhZGRyZXNzXCI6XCIweDc4OTRjYTBkYWYzODA1YTFhNTk3NmZjNWU4YWY5NThlZTBlNTIwMzZcIixcInRzXCI6MTY5MTQ2MDYyNDkzMyxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiamFpcm9iZXJuYXJkYjhhamc0XCIsXCJ0aXRsZVwiOlwiVGhlIElzbGFuZCBvZiB0aGUgQmx1ZSBEb2xwaGluc1wiLFwiYm9keVwiOlwiU3VwZXIgVG9wLW5vdGNoXCJ9IiwiZGlnZXN0IjoiMzdmYzg5MzQzZDJhYTc1ZWE3ODE5YTRjZTNjOTQ1NDA4OGZkNTRmOTI0YmQ3YzJjM2IzYmQyOTk0NjA4NGQ4NSIsInNpZ25hdHVyZSI6IjB4MmZiMjU5OGI4Zjc0MmU0YmYxZjZhZDNiMmY5NWQyZjQ0NTViYWNlZmZjNzdiYjUyNDU3ODNjNmQ4NzZhYTY1NmVmZmNmYzgyN2E2NTVlMDVmMmUwNjZhZjRkZmZiNmM4NWM5YjBlMzMyNjU1OWExNzExODkzZWI5N2ZhN2I1YzYiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRWxCdTZXK2hEZmtId2FTOEdKaXkybURHZHlwdFlUdmhUV3BJR3VsTWtZSTV3UDhJNWYrZGs0N2RHeTQySnVTQkhHOWFzK2pWUzl0NEZBbHV6d01IT05RPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDc4OTRjYTBkYWYzODA1YTFhNTk3NmZjNWU4YWY5NThlZTBlNTIwMzYiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHgyNDU4ZGY1MmViZjE5ZGVlYzlkMjQyYzJhODI0NTBmNDE3YWNlMjljYWY0ZDg2ODlhNmI0ZGU1OTQ3MjJjOTk2NzBkYzM3OTdjZTczMWEwOTM4NGQ3YTU4NWFjNmZhOGU3Y2Y3N2Y1NjYzNmFiNTE2ODA1ZjA1OGE2YTgyYjJmZTFiIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBBdGVtUmV2aWV3IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVsQnU2VytoRGZrSHdhUzhHSml5Mm1ER2R5cHRZVHZoVFdwSUd1bE1rWUk1d1A4STVmK2RrNDdkR3k0Mkp1U0JIRzlhcytqVlM5dDRGQWx1endNSE9OUT09In19AQCKY755ww4SGy2v6rU36pvHqHGXe5tjRr1thowZhxqlR2iz07nFrECVHmBaCr_vyn-tLx7917SmutWAaxB8Vyd5a9dgluO1cJ7rH1KYEs8Zjg6kv-f3l8vAsUhHhk4QHPIr0ju8Rdg77Z4fSPhlRQ4cEJ6fDyjdnwSrlUCCqbSo_eb_rRFn6imjxPf16RRZzusxtoAm2_zd_R34_0I9zaz7dmkTUXdf20jDa4R28t5uAXPlTf7xT9wJU-va11Y7dSp7kCAmQjBBE3UlnT8eCbILX8LpJu8J3_76ZnAI8DqPrYOCS0l4Q1Glk7UvTllhTupZ9xbj65YGZRy3OENxJeOF719FV50_LFj0II-McU1F1SIAmyvSAbAITef3b7VN3Br_AGfdSZhN-Cjaqv1Yo4ye5Mnr_LaU-gE2xDZayb0ufxdLXR2K0SN5OzwyW99_o6rdaXjkpOWWnkikAk5_R3Qy5Y-didNLMm67R7axxKWSoNpUELTRajHlr-0gonrSuSqcJnt30VQF_bpVg1TptZOmxDwf9j1gC4fIFo4PTLWJGGl35ehwdQxm5xUq1Q5WzVwi3LAdbRTrih_aQthbX9cGlaUe6002UH3W74MWxRU52dXiOKlLBzRkt-LGNz6RE_0TiY5G8ydGyf7vjQ-qpAud8t56AtZjtdH-gXV4EVTZ7Jz4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAHAAAAAAAAAA0BAAAAAAAADZIEGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdBRDb250ZW50LUlkgAE3ZDAwMGNiNTI5NTc4N2I3MWU5YThhM2M1NGY5MjdjNGRkZDA2MTg1MGMxYzMwYTU0MWEyMzlhNmQwYTlmNDdlHENvbnRlbnQtRGlnZXN0gAE3ZDAwMGNiNTI5NTc4N2I3MWU5YThhM2M1NGY5MjdjNGRkZDA2MTg1MGMxYzMwYTU0MWEyMzlhNmQwYTlmNDdlHENvbnRlbnQtQXV0aG9yGjg0NjkyODI2NjYwNjEOQ2hhaW5JZAQ1NgxTb3VyY2UIYXRlbQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwicG9zdFwiLFwiYWRkcmVzc1wiOlwiMHg3MTc4Zjg4MzAyOTc4ZTFhMTIzMjBjY2U1Njg2Y2MxYTE2MDgyZDBkXCIsXCJ0c1wiOjE2OTE0NjA2MjUxOTIsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcIjg0NjkyODI2NjYwNjFcIixcInRpdGxlXCI6XCIxMTExMlwiLFwiYm9keVwiOlwiMjIyMjIyMjIyMjIyMjIyMjIyXCJ9IiwiZGlnZXN0IjoiN2QwMDBjYjUyOTU3ODdiNzFlOWE4YTNjNTRmOTI3YzRkZGQwNjE4NTBjMWMzMGE1NDFhMjM5YTZkMGE5ZjQ3ZSIsInNpZ25hdHVyZSI6IjB4YjRjNTRiNzFjZWE0NGE2ZjBhNTUyMzlhNTEzYmU1NTg2ZWQyMDY2N2M0M2UxYjU1MTJlY2ZiMDFmMWI3ZWM5OWIzYzM3NzlmMjU1NGE2YTNlNzBmYTEzYTQ4YzAyYmM5ZjQyYjRhODljNGEyMTY3ZGFjMzQwMTcxMzllMWE3OTciLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUpTMXM5MHBTVlFnWWRYOTJIZGVXaDJjWnA0WHVvNjRmRERYVnF6QWtvb1NJeXhzVmkrRU54a1RINHVDckhuSVpGZ244c1hpQXdaSHVDTWp6bjRZVkp3PT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDcxNzhmODgzMDI5NzhlMWExMjMyMGNjZTU2ODZjYzFhMTYwODJkMGQiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHhlMzhhMWE1OGY3Y2ViMDI1NDA5OTkwYmYxYTk1NzVlMmEyNWZmODZlMjBkOTA4N2I0ZWMzMzQ1ZWE3NjBkOTUzMGM1Y2IzNDA2ZTFiOTE2Mjk5MjcxZDczOWVhZDFhYTgyYmRiMTllNzVmMDVhZjZlZDY4NTJlNjliN2UyNTA1OTFjIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBBdGVtUmV2aWV3IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVKUzFzOTBwU1ZRZ1lkWDkySGRlV2gyY1pwNFh1bzY0ZkREWFZxekFrb29TSXl4c1ZpK0VOeGtUSDR1Q3JIbklaRmduOHNYaUF3Wkh1Q01qem40WVZKdz09In19AQB3a49J0vHj4Q-1T7Rz-8moRKNbXX9gw0IpzLTuxog0ckxHr6JHo1H_meRPKX_kFUJoqBgZw2eVoirnXcE1rCKFaMAqY8fK10_w8eTWogoBuHqO6GP3iHS868TNIkSuZh9KCZ61bX2sOwOKQWWA681EQCMvjZELkOrAhzPwT93p3cErQmcc1jm9gv9LcACSI46uxTvv_glmWSXWgyozti9lXQmiEmeGuUP5bS8pbFKR155XogDOmoBrns4EgP4GJypBABX80UEgtJyfLC-yBM49W9nSkyxLJZ7hIsZIwSdULWhRhqVtrSJY-R38JJLeu16WitQJiCmgGo3H_6Rpg5rI08wagVWJMM9RX8QL_4w6D9j0wdguT5xzzVM0Xaw2WV50pM1INErpW3at0odfIkuFeN1NGkZYmecnZwzbXjeioUerQfuVmBqBwfB5UskJdDTZfpXgAKLk_VcZsnre1P53Pae8JvFUFheqs_NUkwTe2dMCtLntYynntF3vt-HJVaEok7pfr7SZFJe50-ReUCQvTTSKXW1Nv-oOwCBlhY0Uy2_6cMjybeuBnVkPLy0M8IBUhYH4bjH8os-asOrKtW9qRevFwedxvx7zlAZOMjzpyTZ6aWQu5e1mvmPgzc-VEQJzPv2YlHaK0o0LGO0RnyST9ZSQs-Fybs3jxxdlJA6pO5z4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAHAAAAAAAAAAwBAAAAAAAADZAEGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdBxDb250ZW50LUF1dGhvchgxaWR1azc2Y3BmZnYOQ2hhaW5JZAQ1NgxTb3VyY2UIYXRlbRRDb250ZW50LUlkgAE0OWE5ZGFkM2UzNWY0YmE4ZGJlYmQ2ZTRhNDIyMmI4MjhhNDcwZDE5YzNjNjk4ODNiNTBlMmE2MjEzNzYxZjIxHENvbnRlbnQtRGlnZXN0gAE0OWE5ZGFkM2UzNWY0YmE4ZGJlYmQ2ZTRhNDIyMmI4MjhhNDcwZDE5YzNjNjk4ODNiNTBlMmE2MjEzNzYxZjIxAHsiY29udGVudCI6IntcIm9wXCI6XCJwb3N0XCIsXCJhZGRyZXNzXCI6XCIweDIyYWZlYThhMzc2MjJkOWNmYzU0MGY2ZGM3MDI2MjBiZTMzNjJhMWJcIixcInRzXCI6MTY5MTQ2MDYyNDM2MCxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiMWlkdWs3NmNwZmZ2XCIsXCJ0aXRsZVwiOlwiMTExMTJcIixcImJvZHlcIjpcIjIyMjIyMjIyMjIyMjIyMjIyMlwifSIsImRpZ2VzdCI6IjQ5YTlkYWQzZTM1ZjRiYThkYmViZDZlNGE0MjIyYjgyOGE0NzBkMTljM2M2OTg4M2I1MGUyYTYyMTM3NjFmMjEiLCJzaWduYXR1cmUiOiIweDM4OTM1OTk4NjBlZjc2ZTRmMWRhZTI5Yzg5YjI4ZDZmNjk5Njc2NzA4MjhiYjAyYmEyY2FhZmUxMjllNTZjNTk2MDI5OTg0OTUwYTc1NDY3YWRiN2I2ZmVhZTQxMTVkZTllYjM2ZmNhMzQ4ODEyYmJmMDZkMTRiNDEzOWU0NWJjIiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVvKzQ0d0tBVWp4SkVtZWRLY2NvUXMwTG5LWnlOU1FiRXdoVzloTEFPMnBKdnFpcHgwREdSRVFMd1VCalNQNy9Bb0JCdkVRV1ltRWptd01JTlF1Z3NlUT09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHgyMmFmZWE4YTM3NjIyZDljZmM1NDBmNmRjNzAyNjIwYmUzMzYyYTFiIiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4ZTMzYThlOTZlZDY5ZTgzM2QyOGRkY2VlM2UxM2ZkZjg0ZjIwNDAyMmVhNzhhMjNhMjkzOGNkOTdlMDRlMjYwYjA3MTczYTBlZWQ5ODJhNmM2NzU4M2JmYjhkYTViOWYzMTQwN2UyMjVhMjdmZjYxNzMwNjkxYWY1OTU0ZmU4Y2IxYiIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQXRlbVJldmlldyBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFbys0NHdLQVVqeEpFbWVkS2Njb1FzMExuS1p5TlNRYkV3aFc5aExBTzJwSnZxaXB4MERHUkVRTHdVQmpTUDcvQW9CQnZFUVdZbUVqbXdNSU5RdWdzZVE9PSJ9fQEAJwJV3hib-IwMbV1jamYLZYLWtpxOqf_GiSGXG4UD0xYsTvPNFwE2w3mvKU8m4-pIFjKqSKxaduOj8ZHbXpDLAZBL_o6UUZiWqr6bz_r3btFS4WZ52F9eM6jICx5ahMbnbKsMTPfAY5q4653HuYgs51g4BAH0OPA0yhMR_mXkQemFF0uf1s2s7WLjbehBmnTMI_fXXIwe-dauJfWlSu6pyzqZLAC3YgqEm6vPTdlW0jdw7OGeVakBCVxYsNq8O9Rznojkn0lpW5hNIpVD6nfCMqJL1uj0cH2vJ_t6wkGSBmUbSbPuedVyAMdCszSu1dK_r6ryqM3Bn1T3qGO4hBphKUnJb5j4-2gAzSibZDFp5sCHpaxdt92VlAbhDMh1skcHuJ2vc49j06k4KA4fOv9pxrruZ-QW_dLkKBjdlPq1GW3Fx5coEB5bNNd635nmK2Q6xp-zLgikQ-0ACb9SO1EedLfApZra8uNOzIHZx2ZQ4h-W5hzo31Ad2XQrz6XhUwVZ3iNNeTvAgZLVM2wS1jtohSiv_lphCXFcgnrOYT0uRSzdsx9ctE4Ry2X5oDgPGR96vxdX43Roj2jQ3Wa-CZtLXI_8Vinx2RskpClvyRC37iaMVAvSTZgL68WYFy9YcirXS6sDj_GD7a0FScQ2r32vQG5J2-cDoPp3MAZ0LMoZMrmc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAABwAAAAAAAAAUAQAAAAAAAA2gBBhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QcQ29udGVudC1BdXRob3Ieamxnb3Fua3huYXBiczM3DkNoYWluSWQENTYMU291cmNlEmN5YmVydHVuZRRDb250ZW50LUlkgAE3OWEzMDgxMTVmMTVhY2MxOWY2NjE0ZDZkMWMzYjFhN2JiM2M3ZTA3YWYyMDg5MzYzMjE0NzNjZDBhNmMwMjhmHENvbnRlbnQtRGlnZXN0gAE3OWEzMDgxMTVmMTVhY2MxOWY2NjE0ZDZkMWMzYjFhN2JiM2M3ZTA3YWYyMDg5MzYzMjE0NzNjZDBhNmMwMjhmAHsiY29udGVudCI6IntcIm9wXCI6XCJwb3N0XCIsXCJhZGRyZXNzXCI6XCIweGI4NTAzYWM1YWJhMWMzNDZjNGVkZjRhNDNlNjUxZGRlOTg5YzNjODVcIixcInRzXCI6MTY5MTQ2MDYyNTEwNCxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiamxnb3Fua3huYXBiczM3XCIsXCJ0aXRsZVwiOlwiVGhlIFNlY3JldCBvZiB0aGUgSGlkZGVuIFRlbXBsZVwiLFwiYm9keVwiOlwiVGhpcyBwb3N0IGlzIHNvIGluZm9ybWF0aXZlLCBpdCdzIGEgZ3JlYXQgcmVzb3VyY2UgZm9yIGFueW9uZVwifSIsImRpZ2VzdCI6Ijc5YTMwODExNWYxNWFjYzE5ZjY2MTRkNmQxYzNiMWE3YmIzYzdlMDdhZjIwODkzNjMyMTQ3M2NkMGE2YzAyOGYiLCJzaWduYXR1cmUiOiIweDhmYjJkMTE3MDZmZjliNjMzZTc0YWY1YmZhNWM5OTczYjNkZWEzMGFmNDEwMmZhM2VlMDg5MWY3ODMzZTIyNDk3ZDg4MDJjZWE4YWZkMjIxNjhiZDIwYmRhMmQ2YjM5ODZhNDY1NDg4ZjMyMzAwYTdjNGIxMzE4MjU0ZmEwNzhkIiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVLU1FFQ1pESlNYdXMvZWMzcWp0My9uVmFPYW9YT2QwdTJnUFpMZDlvNThoRnR5cFRXU3hWVWFyWkpSUnNtaDdYT3RucXZ5Wk93YTFkYnlrWnpmdEdtZz09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHhiODUwM2FjNWFiYTFjMzQ2YzRlZGY0YTQzZTY1MWRkZTk4OWMzYzg1Iiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4Mjc0ZmI4YmE4N2Y5YmI5OGQ2ZTNkZTRjYzY0ZWMyM2E4ZDE0OGRiZjEwZWMxYjlhMjhlOWE1OWZkMWNkZjZiYzQ4YjU5ODljZTY1ZTI2YmE1YzY5ZGZmZmZmMTZiODU1YTYzMWFmZWEyN2E3MzYyZjk0NDMzMGM1MzJkMTliYTcxYyIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgSSBhdXRob3JpemUgQ3liZXJUdW5lLnh5eiBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFS1NRRUNaREpTWHVzL2VjM3FqdDMvblZhT2FvWE9kMHUyZ1BaTGQ5bzU4aEZ0eXBUV1N4VlVhclpKUlJzbWg3WE90bnF2eVpPd2ExZGJ5a1p6ZnRHbWc9PSJ9fQEAI1xudZk174FLDQ2lzbA5-NskHBM435n5AUULzVDYVEJgCP9zfbkrkpeqcAP7XJe7VwQo9_07yVOEns0PaH-jJXwCKxi195D6-5a7sVf8HTgCRY0dtlv0-3Zbnij16vRvbfY08CFQ8Oq1qqOPpgP58fm3sRVoT2j-1TvCSrdjwFUFVcjSk07P3JkdvpLMXfEZ9O58rIAU4ILnMKQlCEy5_xcur8mGthP0VwRYimR5Te-RlLRe-6IrTVLR3RgnKItwzcd7nRjgZZPgcJxbp_eb_07MSmGeXS7B5Ndpp2TgPVRe--wZIEOTD0rCBctdUHioeuyk_08oi3b3bKcYBxVTq-IP0reVy3CygDdAsfy7mebH2uHplhB3aHWB5JY2brNyps2PP-yLRenVg0LwnnDK9k9eLc65zgvuR-9OWffRgch19RssLpXykJ8Ov2OG2JBONn9KeJiIJNh0MzTJzDH3lUAh1eTsw5LxfdP_gx_Nr7ARQrYaxBe26urVzOlhn9CWFEOR30bkD3raPvOXjRZwgf6iKNTvgBtnryvSgPBI5Jg2hK_xfTB6Jqn8ihc_Ri7YAJhtFwXWoZYLpqeL2bhUZjwnt1oP1-Q7bBXQ--H2PsbJPwxdREFZJ-sl9BbGXWd3RG4LHJ69RqDG3LRDGBYagFHIqb4sTSCM8yinxkXVTKWc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAACAAAAAAAAAB9AQAAAAAAAA_yBRhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QUQ29udGVudC1JZIABNjkwZTc4YWUwM2ZhMjFhZGQyY2E1YjA1ZGFlNjg3YTc1OWRkODFkN2U3YzljM2MzOTA0YzQ0ZjFkZjFiOTUwNxxDb250ZW50LURpZ2VzdIABNjkwZTc4YWUwM2ZhMjFhZGQyY2E1YjA1ZGFlNjg3YTc1OWRkODFkN2U3YzljM2MzOTA0YzQ0ZjFkZjFiOTUwNxxDb250ZW50LUF1dGhvchg5a3dsZ3ViZXd3aXcOQ2hhaW5JZAQ1NhxDb250ZW50LVRhcmdldIABMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZQxTb3VyY2VIMTU1MzFmYTItMTIwNS00ZjYxLWI2ZTQtYzlmNjhlY2Y4MWY3AHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweGFlOWM4MmZhMTk2NjU4YjRjOGE5ZmMyZjc1MTUyN2U1YmUzZWY3ZjJcIixcInRzXCI6MTY5MTQ2MDYyNDQ2NCxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiOWt3bGd1YmV3d2l3XCIsXCJ0YXJnZXRcIjpcIjM5ZjAyMTg4MWU3Mzg2ZjhkNzNkNmVmMjU1MzNlNjA5MWYyYTAyNTZlNDIyYjRiM2M0ZTNkMzM1Y2NhZTE0N2VcIixcInRpdGxlXCI6XCJGbGFwcHlNb29uYmlyZFwiLFwiYm9keVwiOlwiU28gZnVuIHRvIHBsYXkgaW4gbXkgc3BhcmUgdGltZS5cIn0iLCJkaWdlc3QiOiI2OTBlNzhhZTAzZmEyMWFkZDJjYTViMDVkYWU2ODdhNzU5ZGQ4MWQ3ZTdjOWMzYzM5MDRjNDRmMWRmMWI5NTA3Iiwic2lnbmF0dXJlIjoiMHg2NzU5MzkwNzIzZDRkNjllZjNhZTk5MGNiMDcyNDA0M2RiNjlkNDA0MTZmMTExNmMxMGFhYWI5OTYxNzJjYjAyMmIyMDVmYTk4ODVlZTVkZWY0NDU1ZmI4ZjFkYTVkZGZkMjgwY2U0MzhlYTgwMjFmN2U4N2VmNzQxYTc1YWFkNyIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFdDdxY1N3MXdpSlMrUUJhRy9CWjRnM2JBWE1DOE1UUWhNcWhKZTNpLzJnSGlsdlpocHk5YnkzQ0JoZmxTQm12WDdVT0xhTVA5OGtNTDV1L1ROV2p5S0E9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4YWU5YzgyZmExOTY2NThiNGM4YTlmYzJmNzUxNTI3ZTViZTNlZjdmMiIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDNmZDhmNzVlMzRhNzcwYmEyYTBkYmU0NzcyZWVjZmIxNWMwZGYyYzRjMTI0NTZmNzc4ZmE1NjdmM2UwNmRlMTY3Njg2OTM5MWU5NzY0MGU5MDkyYWEzMWZhMzUyNGZlYWIxYzZkMzQ1MDU0M2RjYTUwNTQ4MjdmN2M2OGM4NzllMWIiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFdDdxY1N3MXdpSlMrUUJhRy9CWjRnM2JBWE1DOE1UUWhNcWhKZTNpLzJnSGlsdlpocHk5YnkzQ0JoZmxTQm12WDdVT0xhTVA5OGtNTDV1L1ROV2p5S0E9PSJ9fQEAdrY2G6okB1SF17TjOpTTJhh6QluX1bafe4D2fYsw1hJ_FmfJoTfsC9CzJ1_5cSlHd4j5CFTOqXO_J94oz8ZdNNd7zDGloi-q4w9cDNdUutFWGNuwdAZm-f-L01W32c3T_euDCIwmSnr2eBMSDsx31pMpFldFSB1NNndiuiaL55wKes0YC2xcVGXt--K_TQgB-qk9087J5hB8FNuH-4x8NteLvb7xCQcFGOjyjXmJnrIRqqAylYwXfQUeOsgIHfCAaUnEsKssRpUG_93w5Wx60PXjWn_wv86r08Q331vasbiJoLydWLrRl8ANEKPLmfmJSSf3oUPRN2jOH8B8iZZA3R0GrrZ4JFcgFMtEs6dHxG09cHJu_RXBhqt3n3YyhRxJAh8EJdBorlPQbIjrmgQW3ZVk9xbZexdIIRmpUyPEuAOPgAHBYTWPMhQa4XHUw-8J6VrhCiQAhEFRnnc20N0UncCTcFZCYZS7qBFvTsjMq3_OQF4FsR-c-8Z2-7n9u8lscFGra-3ojYHHDXDXmeNXS-Dy18CDtx-LdQ2cBIygBDaM3x2zpr8H3ikDbBDX5jRnnoJmNNIKaKWje2VnQREkUIbMEod8aa0keOfA7WyU_wuFGIPr6VpQ3ZPOBuSjY_kiOLhWrcwBPcYhF0TxxQ1QS64MkD98QKJ5pfuX3V7DF4ic-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAABwAAAAAAAAAMAQAAAAAAAA2QBBhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QUQ29udGVudC1JZIABYzZmZDM1ZTY4MDlkNWY2MGNjZDMyOTgyMWFjNWM5ODAxODI1YjlhYWYzMGM0ZDdlYTk1OGRhYzg3Mjk5MTAxZRxDb250ZW50LURpZ2VzdIABYzZmZDM1ZTY4MDlkNWY2MGNjZDMyOTgyMWFjNWM5ODAxODI1YjlhYWYzMGM0ZDdlYTk1OGRhYzg3Mjk5MTAxZRxDb250ZW50LUF1dGhvchhpN25ybHViNnF5dm0OQ2hhaW5JZAQ1NgxTb3VyY2UIYXRlbQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwicG9zdFwiLFwiYWRkcmVzc1wiOlwiMHhmNTlkOTY1YTQ5ZjFlZmQxZTA2ZGVmZjUxOTRmZWE4OTQ1NzEwOWUwXCIsXCJ0c1wiOjE2OTE0NjA2MjUxNTEsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcImk3bnJsdWI2cXl2bVwiLFwidGl0bGVcIjpcIjExMTEyXCIsXCJib2R5XCI6XCIyMjIyMjIyMjIyMjIyMjIyMjJcIn0iLCJkaWdlc3QiOiJjNmZkMzVlNjgwOWQ1ZjYwY2NkMzI5ODIxYWM1Yzk4MDE4MjViOWFhZjMwYzRkN2VhOTU4ZGFjODcyOTkxMDFlIiwic2lnbmF0dXJlIjoiMHg1YzRmMzJjNjczZjhlNDlmNzRiYTRkNGI4MDA5NThiMDM2N2JhMWNlMWZlMDRjZWYxNzAxY2IyZmIzZmMzNDg4OGE2YWZkY2MzNDU0MzkxZTRlNzQ4ZmY3ODU3MWQ0YTRmYTg5Y2IwOGNhNjQyZDdmMzg5YjE1MGZiOTJlYmMyYSIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFcTJtRWR6TGNRZ2RKQitLZ3VZYWJKOXkyNzRnYTlNeGpuR3RmSGpZbjdNZHFIM2xvc1pNYmR4L3ZnN3ZoVHNJTm1MSWNscmNvV2VLMHl0NDd1V2FkQ3c9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4ZjU5ZDk2NWE0OWYxZWZkMWUwNmRlZmY1MTk0ZmVhODk0NTcxMDllMCIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDFmMGVmNTgyYjU2ZGM3NWVjMjVmZDUyNWY3OWNkZTA2Yzg2ZDg2MTI0ZGYwZmQxYjA2NzE1ZDhhOTQxN2RlMjA1NWUwM2E1YmVjNGQ4OGUxYmVmMTRkMWM1ZWY5YTNmZjUzYjNkZmNmM2NjNjUxNDY1OTQxNDJhMmUxNTExNTM5MWIiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEF0ZW1SZXZpZXcgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXEybUVkekxjUWdkSkIrS2d1WWFiSjl5Mjc0Z2E5TXhqbkd0ZkhqWW43TWRxSDNsb3NaTWJkeC92Zzd2aFRzSU5tTEljbHJjb1dlSzB5dDQ3dVdhZEN3PT0ifX0BAEN3lSFhRWQTLbY50NrVDdAoJs1sJl2j1XRaF1Y97l5CDGnRgobkpIA5zeOcA6573rJ_dNrklZdGiHq4UF16_SJWIwkcyi8yJzRTgHC7ipCC8ZVPyAVW6qYX6LVQoRjgKrwcpTIR5nSsIV7aBpZCS4BUfh_SL0yv-zkWLTDGw38jHJOhUlt-TneBe7RW2eGsHzHUoC00zUXmnvjx0liUQmSoZ3VELO-6Jd7clG8oqnY5g36gTdhJT4NSDAuG56I4kpL8ZQuamdbuTImNqnlgoZg9a2nS6YdANyMUmL84yK-zV8DFQ9Kvea_RjYAF3Sy0hYXddmmwRziBDPMzb1GRhGDrDSSrVR0UFRC6oRKqxv2G0JoLgrzFDFi3vsPgjGB5EtMjkhH_Q3iGMUhGXkIduAAU_qnH1BayZLLp1QrEjDlvMMePw-eXG6ringwB7-9vbDDDVsbSZ32ZKfOuXGJ1RngM65zuFMaMMNux8p3rHLsMvT9EbcAnPDJNut2g_4Ev9h6aiPzp-yNSDX1C0s8fwzRPOrizTYEl5m0lbwjhOGOcioO438UnN4rGd7lNO6_nE0fTlgeWcT6laxtN8sz6_gEkciggQNPu8TdAecSddJHDnY_OYPqdM0VQOmor9gV92ZbNEyMVNxB_YMjH4wX2cQg1mh7_b2ssKhLGr-lzJoBNnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAcAAAAAAAAADAEAAAAAAAANkAQYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0DFNvdXJjZQhhdGVtFENvbnRlbnQtSWSAAWQzNTAyYThmODQzZmRkZDg3MTFmZThhOThhNzM2MTI2ODNlZWRkZmI5NjgzYTJlZmY0YzJjNDk0NjM5ZDQ3YTMcQ29udGVudC1EaWdlc3SAAWQzNTAyYThmODQzZmRkZDg3MTFmZThhOThhNzM2MTI2ODNlZWRkZmI5NjgzYTJlZmY0YzJjNDk0NjM5ZDQ3YTMcQ29udGVudC1BdXRob3IYejNibG1rNDNkdndwDkNoYWluSWQENTYAeyJjb250ZW50Ijoie1wib3BcIjpcInBvc3RcIixcImFkZHJlc3NcIjpcIjB4ZWM1MDI3YjA4ODM0NDc3ZTFhYWEwYTlkNmNiMDQ4MGM0MzFjYzQ4Y1wiLFwidHNcIjoxNjkxNDYwNjI0MjM4LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJ6M2JsbWs0M2R2d3BcIixcInRpdGxlXCI6XCIxMTExMlwiLFwiYm9keVwiOlwiMjIyMjIyMjIyMjIyMjIyMjIyXCJ9IiwiZGlnZXN0IjoiZDM1MDJhOGY4NDNmZGRkODcxMWZlOGE5OGE3MzYxMjY4M2VlZGRmYjk2ODNhMmVmZjRjMmM0OTQ2MzlkNDdhMyIsInNpZ25hdHVyZSI6IjB4ODY1OWM3OGI5ZmE5ZWYwNGYxNGZjN2MzNDIyOWI1MmE4YjQ2ZGY5ZDc0OWNiZTViZTg2MDIwODY2MzY0MDE3NWEzNzFhY2RjOWE0ZTA3NmVmMDBlZTIyMWFjYzRkMjBjMGZjYTI4ODExMzFjODYxNjNmZmEwZDMwODBiZDlkOTMiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRStLaUJBbWlOeEo1M1psbmk0Z2xDUFhTd2F6MmlNU0xVUURIOVhJS3J6aGpoKzdiQVZVZys1U0dIZzVxRXdsajBuRlUxcVkxcTJaQnpMZlVIMmZhblFBPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweGVjNTAyN2IwODgzNDQ3N2UxYWFhMGE5ZDZjYjA0ODBjNDMxY2M0OGMiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHgxZTk2ZGExMWNjNjgzMTlkMTBhZTEzMWEwOTk0OWYxMThjZWMwNjhiYWM5ZTRhOWE0NThkYTkzN2IwYzQ4ZGVlNWQ2YmJhOGFkMGFhY2M3MjlhYTFhNzIxOGUzOTljZDMzM2JlYTAwMWYzZTFlODJkOGU0M2Q5MDU1OTJlZTgzYjFjIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBBdGVtUmV2aWV3IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUrS2lCQW1pTnhKNTNabG5pNGdsQ1BYU3dhejJpTVNMVVFESDlYSUtyemhqaCs3YkFWVWcrNVNHSGc1cUV3bGowbkZVMXFZMXEyWkJ6TGZVSDJmYW5RQT09In19AQAAP1Ftt9FdlOx7JsKC9l6OnE1iz5Mys04Nk40kwpS-lXb_lQNELUDep4BY1VO1d3Ebm58WNwcVy8qVFmQkmO66LosN9eCq_cMBFw3AFc4ogD0qHlnRq6QiEm6YWJvHyiXKrb7Eymes8T39SJz09ryu0aoipe686GejZDeJ2k-FYs-LBoIejfYVm5bUfqz8_bB6oSebZJqNWeuKq42ghxJQDqDOHCPg7PWHKZrYg61rmIfnVFKHTHHspzMesZgXOtm2jGz2n1oOucQXc9AVb1NCnCV7N4QNQ3xbdATEErzdZfcZoRquvbYl-GLEKqy0hO6b57YbbV_TocfC53QVk-Xk3W9omRER9BaBqo5Iji7Ge1Ju2t-cAlMQzEoN_w5Bf3PVAnwgejFGAmry2N_GpWR7hXz-pjdtrMoCJKfQJc0dwN6y129PZjL2V6TJa4mDIPjs-TcM-Z0wtQ-sHW8bKbQucjPSABHQlEM0nsxZWDD0Xh9yFWbAzq91iar3GvFzr4fJ60FBI829hhhLedq16HiWNcEMsy3XLT3RsK3ADQUxfkNbDQOxOsh5Us7S8dLkpjycPdpqG5H23Dwc0XG3Kvqdl0t_o-K-FbNN-zb_2jzTV41yGngPeKirqGtqEYWuotjIEyyXPnr_hEFKuroknx5UAHsjoJyuJHrqHiBr4iyb5Jz4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAIAAAAAAAAAH4BAAAAAAAAD_QFGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdAxTb3VyY2VIMTU1MzFmYTItMTIwNS00ZjYxLWI2ZTQtYzlmNjhlY2Y4MWY3FENvbnRlbnQtSWSAATIzNzVmNjg5ZmY1YWI2Yjg3ZWY0YzQ1MTU1YjY3OWE0ZmU5OTY0YTVlZTZkYzUyOWFhMWVkODBiNjM1MWNkNTAcQ29udGVudC1EaWdlc3SAATIzNzVmNjg5ZmY1YWI2Yjg3ZWY0YzQ1MTU1YjY3OWE0ZmU5OTY0YTVlZTZkYzUyOWFhMWVkODBiNjM1MWNkNTAcQ29udGVudC1BdXRob3IaNDA4NTQ5NjE0ODM1MQ5DaGFpbklkBDU2HENvbnRlbnQtVGFyZ2V0gAEzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlAHsiY29udGVudCI6IntcIm9wXCI6XCJjb21tZW50XCIsXCJhZGRyZXNzXCI6XCIweGNmNDY0MGE1N2M1NzI3Y2U4MWE5ODg3NmMyMjE5Yjg0Mjk4ZTA5ODdcIixcInRzXCI6MTY5MTQ2MDYyNTI5NixcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiNDA4NTQ5NjE0ODM1MVwiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIlNvIGZ1biB0byBwbGF5IGluIG15IHNwYXJlIHRpbWUuXCJ9IiwiZGlnZXN0IjoiMjM3NWY2ODlmZjVhYjZiODdlZjRjNDUxNTViNjc5YTRmZTk5NjRhNWVlNmRjNTI5YWExZWQ4MGI2MzUxY2Q1MCIsInNpZ25hdHVyZSI6IjB4OWYwNjE5Y2ZmMTJlOWI1MWJkMTg5NTA0YjdmMGY4Yjc3ODY0YjhjZTc5ZWU0MDEwZWRjZjRiZmM3ODg0ZWEzZWFlZTFmYjM0OWE4NGU2MGJlMGQ4ZTEwZGI0ZDE5OTNmMGZmY2RhMzFiZTY0MDIyZGE4MDcwMmZlNzY4YTljMTAiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTBBRWNKbHgzdS8wTk9kUWxxWmN3UExwd0NRWkdMUUs0OEN0TzFmanFSMk8vRTdsQUE3RGNHcVNNQ2lJTlhkKzdIQ203dzUvZGl6T3ZoSmNZU0s5NENnPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweGNmNDY0MGE1N2M1NzI3Y2U4MWE5ODg3NmMyMjE5Yjg0Mjk4ZTA5ODciLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHg1NTQ0NzkzZjU0Nzg4OTcxMTI3ZTI4Y2QzY2EyYjI3NTczOGQwNzZhYTIxZjQ3MmM4Y2E0NzMxNDQwYzdlYjkwMjljNjAzOWUyMTg4ZWE4NzQ3ZGE3MGJhOGRjNzQzZWQ4NjY1ZjNhN2YzZWY1MWIzYzZiNmU0MDYxMzQ1ZDc2NzFiIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBDeWJlckNvbm5lY3QgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTBBRWNKbHgzdS8wTk9kUWxxWmN3UExwd0NRWkdMUUs0OEN0TzFmanFSMk8vRTdsQUE3RGNHcVNNQ2lJTlhkKzdIQ203dzUvZGl6T3ZoSmNZU0s5NENnPT0ifX0BADnYqxaB1rm_Sszh4zu92BwhN-9msI6_sfUosEnCfA9hnpjr81Gi5C5JMoUZi9yath1Vf72Tw0Y2huq83wdPQ7DXm_6YfnP7KfOQ5XkQfcX81raV1fXz_Lq5PIFE5E2Cc1Omwt1eJ1eOHtQokVTS__OIm13ne00lRrw-LW3_iRWwNFSMobjBZE0gDORgxlDW43yN_QJKKl0VjXcvRbWrdp8LAEG40UjNIb_oXT7S_fxsPJbn_IPVHl_w2JkLMCWCXNoqEtb1av-xjuTyP-oRw5k5npr-HzE9AND1V9wIq41iiumKrQCyHyl3Oo_-rj5o705xSZxOrlCXBdqzOkv2Dgl7XFahrbnUV-RuHE9SBr7akzZBmeaCEBgW_UO6WoJxy3BsRf4aSfIM9dl4x5aiAJTkwMi2CYhfmrSL2-oVn9QdBiwj4LTFSKGlLxypDbW_k8DNlioWgb6FWEgdQtzh8kjlj-IlTOZGgbgJTy7tFkQXJ5nOuFORG8n_9eYWA-SyIm1l6P6v15MOB5wYyuc25YRV6MgVTvyxw-Y6TpOtT4S7gVe5IG0EnL_-Sr_uX35IBtU-vEVvFIezad4oRfax1PItdy76RSS4aMvIEPmTlwqK0m8SUbH4t_pn8eB3ngUruU9f4HmfGN2M60qbAzRCNsEWlveaknilVGPAUsJuSKJnnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAcAAAAAAAAAEgEAAAAAAAANnAQYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0FENvbnRlbnQtSWSAAWE0MzI2ZGU4Y2EzOWY5Nzg1YThkNzczNjRkNDJiZjlmOGRlOTRmMWE3ZGZhZmFhYWFiMmY4NDQ3YTkwZTI0MWQcQ29udGVudC1EaWdlc3SAAWE0MzI2ZGU4Y2EzOWY5Nzg1YThkNzczNjRkNDJiZjlmOGRlOTRmMWE3ZGZhZmFhYWFiMmY4NDQ3YTkwZTI0MWQcQ29udGVudC1BdXRob3IkZGFyY2lhbWJlcnBmdGRjNGl0DkNoYWluSWQENTYMU291cmNlCGF0ZW0AeyJjb250ZW50Ijoie1wib3BcIjpcInBvc3RcIixcImFkZHJlc3NcIjpcIjB4NmE2MWFmNzc4OTYzODhkNDQ0ZDRlOTA0NjdkNmIxMDQxZDQ1NGVkMlwiLFwidHNcIjoxNjkxNDYwNjI1MzQ0LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJkYXJjaWFtYmVycGZ0ZGM0aXRcIixcInRpdGxlXCI6XCJUaGUgTWVtb2lycyBvZiBhIFJlbHVjdGFudCBTcHlcIixcImJvZHlcIjpcIlRoaXMgcG9zdCB3YXMgYSBncmVhdCByZWFkISBJIGFwcHJlY2lhdGUgdGhlIGVmZm9ydCB5b3UgcHV0IGludG8gaXQuXCJ9IiwiZGlnZXN0IjoiYTQzMjZkZThjYTM5Zjk3ODVhOGQ3NzM2NGQ0MmJmOWY4ZGU5NGYxYTdkZmFmYWFhYWIyZjg0NDdhOTBlMjQxZCIsInNpZ25hdHVyZSI6IjB4ZDcwMmM5Mjg1YzYyMWZkYjk2ZTE0YWMxMjc0MDAzYmJlZGM1ODZhYmNlODc3ZjU0MzE0ZmJlMDRlYjY5MzZjZGE5NDljYjM5NDNkZDgwMDdiZmY1ZDIzMTY4MmNjZTkxNGFhZWM2N2RkOTUwOTcxZjFmNTU0YTM0N2Y5NDcyNWQiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVFsWFFtSGZLNU8rbDZkRGNsYWdoOHBvMDdnajFVRFdocTJjTk5ja21mY2hoeVBkSkFHYTZ1Z1pXRTFXcmZnRUR2R1p3bG5zcFRXYTNUcGpmVENkRlN3PT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweDZhNjFhZjc3ODk2Mzg4ZDQ0NGQ0ZTkwNDY3ZDZiMTA0MWQ0NTRlZDIiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHgzMzk3MDJiZGM4ZTdjMTY1M2VlZWE0ODk0NzMzNDdhNzg3MzViYjQzNjM5NTFmMTYyMmY1ZTAxZTUwY2NiNzllMjUzN2QwMDVlMjMxMjI0ODNmNWUxYzA4ZTUxOTNjMDkyYjJmM2NkOWE5MWUyMGFmY2ZmYjU2Mzg4OTQ2MWFkYTFiIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBBdGVtUmV2aWV3IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVRbFhRbUhmSzVPK2w2ZERjbGFnaDhwbzA3Z2oxVURXaHEyY05OY2ttZmNoaHlQZEpBR2E2dWdaV0UxV3JmZ0VEdkdad2xuc3BUV2EzVHBqZlRDZEZTdz09In19AQCHPMikfO8Yby2Og-Xzj6XEFbdl_jRLlmwU99wXcrI3yuiK7v70lpQGMprWhY4d4vF3RlKI7sMToEEVFlsmg9MsRx43g06dC8r-ZCE3m018Qtw4kU8yld5dVIj5IUlcexd2MtkFt4JnJNuKMNPD0vQCaCIyjHZW4z1yW74idHvTgTAAdUWsUKgqpMGFUKsejb41_QVfgqFHRmIum6tbMvzehKkqYCTbLPwN20-NjLpoUCgSdYY8YZTzevuG3llQikc99RqfAl149ODHGfzv9GIIhiQyHGZzxh873PT1u61N5AvmrEt8v6prmJZn_UhGGx-nHpVEH2zAqHILtW-2tBoSskQjNCgrhhB0Gy6fSsBQbjlkCYRm8lxoDFIBHDc6yEELuQHieepUTY8RPyFYhZwM_nHzJsV6trbV62433wCJ5P88cdcjxr5vPvq1bFOxlDMH8fP3fGs06ycdea9wD1Iy1q2cRxVqmK_X5YPY-PhB__5E_A7-7OTRYCkovPEzSKHkhPrzZP-sUaku320vQsDxl1s1-Eg8-8eqYRUiQOwRLm9bpaMKOzqS70I_gBCt9xDULQeZj0gujgqrJoFOfZRkFa3KQIEyiHqtV-R3l_YVS4LFkWAXWocXLlwVnmgMi6RRV6BW0eDeGFa0NxFdSAM5zym35nibQAO88qYsl4WlcZz4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAHAAAAAAAAAAwBAAAAAAAADZAEGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdBxDb250ZW50LURpZ2VzdIABMjhiZjU3NWU4YTQxYmRjYmQxN2E1NGVmZGU0ODQ2MTUwODQyZTFkYjExNjNhZTJjZTkyNzAzMDU5YTc2ZTNkNxxDb250ZW50LUF1dGhvchhlZm9qdXl5NGF2NncOQ2hhaW5JZAQ1NgxTb3VyY2UIYXRlbRRDb250ZW50LUlkgAEyOGJmNTc1ZThhNDFiZGNiZDE3YTU0ZWZkZTQ4NDYxNTA4NDJlMWRiMTE2M2FlMmNlOTI3MDMwNTlhNzZlM2Q3AHsiY29udGVudCI6IntcIm9wXCI6XCJwb3N0XCIsXCJhZGRyZXNzXCI6XCIweDNhMDA2NWVhMjU3MDYzMDY5NTI5MjU2MjkyZDE5NDQ2YjA1MjY0ODBcIixcInRzXCI6MTY5MTQ2MDYyNDQ1NCxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiZWZvanV5eTRhdjZ3XCIsXCJ0aXRsZVwiOlwiMTExMTJcIixcImJvZHlcIjpcIjIyMjIyMjIyMjIyMjIyMjIyMlwifSIsImRpZ2VzdCI6IjI4YmY1NzVlOGE0MWJkY2JkMTdhNTRlZmRlNDg0NjE1MDg0MmUxZGIxMTYzYWUyY2U5MjcwMzA1OWE3NmUzZDciLCJzaWduYXR1cmUiOiIweDE0NGM0OGQ4YjBlMWQyZWEwNDdkN2E4YTExOTRjZTBiNDlhNWU0Mzk2NTU0ZTVlOTFhYjZiOTY3NTNiNGZiNTExMjY5NjJhZDc0Y2RjOGQyNzdiOGQxMmNlM2I4ZWQ2ZGUyODYzODMyM2QxNTViODkzZTA0NjkzZDk0MzgwYzRlIiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVzZVp4Rnlkd2tOOVFOOEI0T3E3Ump1aUhRWnc3R1ZiYWIzcjh3ZWlwU1hrUXkrTDVwTm5KMXgwbEExS25RWGExb3NhNDVNRzMxVXYzclBldlF1Y1VLZz09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHgzYTAwNjVlYTI1NzA2MzA2OTUyOTI1NjI5MmQxOTQ0NmIwNTI2NDgwIiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4YzhlMDFiMjcwNWVkNTM4MjAwNTRjYjlhZGFhMGE1N2VhZjk3NmJlMjIwNDNkZmE5YmEyMWFjMjczMjg1MmFhYTY3ZDYwNGIzMmE0OThkOWQ1NDg2Y2JhMjllZjE4ZWFlYjMyYmQ3ZjFlZmEzOTg1ODRlOThkZjI4YTA5NDQ0OWExYiIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQXRlbVJldmlldyBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFc2VaeEZ5ZHdrTjlRTjhCNE9xN1JqdWlIUVp3N0dWYmFiM3I4d2VpcFNYa1F5K0w1cE5uSjF4MGxBMUtuUVhhMW9zYTQ1TUczMVV2M3JQZXZRdWNVS2c9PSJ9fQEAWWXuHeBgyqNLL1XKiT35u5qGkKSggiQgkqe1j92w802RFG8OUjTx_ST6YfubfF8E23Y1rZHtzgEjRIrTep9Ju0kvQ52o0GQrzIdyGGPqrz240G5MAn-tUR1BEZSM6pa7AqXVyt8OJU5zFHTYxLmGeCiv1UXJeWAZr-o-PokyDe0-c3XKcjQ6dvntr2Z8tSNSbYpbx8pd32QZxXQEHCqC7QQ1wuSFN0kX-TsNFamUkk6NcPbPds6WgIUNNi22G64Dw2Fsmq40g4RdviUglxrfGSPq2xprPKCvN8Rtnji8Ja1hXl_PNhskd0L-jBp_XtTLgHvET6tjieAfOAd3fYQh0LqFlqanl6NzqdkK50wkiDdUJIFdJNmbVoby_0FnyFyWkoPD0ixSvcK9bQjTiXSlTtWfoYv9kpWx7iGKEhOpO4N7uHm9qQVILR2e7ProiFubEiyl3aV70OQA7rE2kYBcw31apWoA_07gYmawaenCxUINXcbz_u003MKpRKc05D37QBQYHlYXkmWsmOWsB2BAAtdp1tpQOEYixP_0GeU8uIibmv39_ur3nyYrbU_86QPouJXuDmnRnshdb1O1gEq7PFTuJCWW3p4HRJg7SMaG2CxlAssw3FexhoBs-S0Su9-JTOYVhtB3ZfeP2qKdfbCPH8Y3Iy7S3ctSadMDw_WJWNKc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAACAAAAAAAAACCAQAAAAAAAA_8BRhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QcQ29udGVudC1EaWdlc3SAAWRjNjM4NjgwZTE0ZTcxNGM2NjM1MDk3OGI2Zjc0YzJkMmI4ZTQwNDU4YjkzYzMxYTFkZWQyMWMzNjNhOWIzMTYcQ29udGVudC1BdXRob3IiYWRnbXRxcG1vaXVjc2h0NzMOQ2hhaW5JZAQ1NhxDb250ZW50LVRhcmdldIABMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZQxTb3VyY2VIMTU1MzFmYTItMTIwNS00ZjYxLWI2ZTQtYzlmNjhlY2Y4MWY3FENvbnRlbnQtSWSAAWRjNjM4NjgwZTE0ZTcxNGM2NjM1MDk3OGI2Zjc0YzJkMmI4ZTQwNDU4YjkzYzMxYTFkZWQyMWMzNjNhOWIzMTYAeyJjb250ZW50Ijoie1wib3BcIjpcImNvbW1lbnRcIixcImFkZHJlc3NcIjpcIjB4YzNkMDczYzI0NTZhMWJmNTc5ZjAyOTAyZWY0YzgyNDQ4MDhhNzc0MlwiLFwidHNcIjoxNjkxNDYwNjI1NjQ1LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJhZGdtdHFwbW9pdWNzaHQ3M1wiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIldvbnQgYmxpbmsgd2hpbGUgcGxheWluZyBoYWhhaGFcIn0iLCJkaWdlc3QiOiJkYzYzODY4MGUxNGU3MTRjNjYzNTA5NzhiNmY3NGMyZDJiOGU0MDQ1OGI5M2MzMWExZGVkMjFjMzYzYTliMzE2Iiwic2lnbmF0dXJlIjoiMHgzMjlkNjM0ODg4ODljMDhkZmMxMjJhMjlkM2Y2NTQ4MjdiMzExMjhhZWZlNjY3NzZkYzU5Mzg4OTJlY2UzMTJjNDlmZTRiMjFiMjdmMTFlNDdmZDU2MGZhMTA0MzQ3ZTgzYTRhNjYyNTNiMTI1NTFkYTY5OGVkZTU2YmExYmVmZSIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFZzZFelhDUjVKZzVJV05OTnhrZ1piMks3cTQ2YzZvRndnOHJCb0Z6S0FPekhoWFUvYlQ3L04xL3FPL2dLQkg5NU9TR3F6UFdWVWNsby9ISnJEUUgwK1E9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4YzNkMDczYzI0NTZhMWJmNTc5ZjAyOTAyZWY0YzgyNDQ4MDhhNzc0MiIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDEyNmRlNmE0MTJhMDgxNTU1ZDU3MTNmN2RkYmZiN2U2NTYzNTExNTQ2NzE5MzhjYTkzYzYyYTcyMTY4YWIwMGQwZjFhMDZlYjNmNmNmNDE5OTIyNTg5OGUyODJlMzYzOWE0MmQ1ZDAwYTkwZDljODg0Zjg5MzQ5MDkzZDZmYzE1MWIiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEN5YmVyQ29ubmVjdCBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFZzZFelhDUjVKZzVJV05OTnhrZ1piMks3cTQ2YzZvRndnOHJCb0Z6S0FPekhoWFUvYlQ3L04xL3FPL2dLQkg5NU9TR3F6UFdWVWNsby9ISnJEUUgwK1E9PSJ9fQEAI-gvC4U3JMxA6Mg2xTs3oAuPx1nfChQvPt6xrxFiKPPMUXhSziDAsB1OfdKFOq9YXGghXVhoRqAELh_PTZj0_MjWvEcF0RZ-gB4eSawzt3u3DzEHlL1g6B8P1Ilml2l-1hj2NE1Ycn-2_zET2LoUSEPPokO7uIWbFPnI6Tkt3pP7J_CA3R_3xcJW1_8iXNSxIrwFFjIEdv34Ti80rI-6QwXIbkfgSNj-LAmsEWKp-zgwx52OOp5RkCQal9SXBIfhnbFlGfd5CfmxpXjQVfS3G5wfwvK-vPFLFQh1js4uU84A7zfAGBYV2OSUUU-vWldmvskxs2kLtZWoHQthCMphE4KlHQKKnjlZaprsbVx8-Lbv5p7t-6eNmlAM1MsFJ2HwXkBF_GtrKdd9DjeoCvoyws2nEEwCC8Ux_cB-4VRgM1DcpZSsqtzp5HmZkt3VxLzQCB_DU5BYhoqtHwOfpqudBXdU-wJnrM5kkOosM4ibN-Ai22UiFDWEACOxMUR7rvOahvCdotYBFVayVQiyGUpXISmqg5hMIvXURAmNYlSIgoiyeUYFp3C5vAmIKPHcqzUyvm28xookr7fZbKkck8Bz-Kuy5KvRdBtDXjmBPma_voiGVW9d44g8deOLQy6JZKd5P953uOxOXspxR27xR8Q3ShVKz9ohOStMQjvngMYcJYCc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAABwAAAAAAAAAMAQAAAAAAAA2QBBhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QUQ29udGVudC1JZIABZjFkMmQ1NzJkZGRlZjNjYzRlZDNkZWI3MzY0MmE2YmMzOTBiOGVmNTJkMWQ3YjViNzc2MWMxYWI0MjFmZTIzMhxDb250ZW50LURpZ2VzdIABZjFkMmQ1NzJkZGRlZjNjYzRlZDNkZWI3MzY0MmE2YmMzOTBiOGVmNTJkMWQ3YjViNzc2MWMxYWI0MjFmZTIzMhxDb250ZW50LUF1dGhvchhrNjI5NzI3MTI5OHEOQ2hhaW5JZAQ1NgxTb3VyY2UIYXRlbQB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwicG9zdFwiLFwiYWRkcmVzc1wiOlwiMHg4ZDJhMzU2MWQ5OGNkMGJmYzUwNDY0NjQzNGY3OWJmMzM1NDRmOGQzXCIsXCJ0c1wiOjE2OTE0NjA2MjUxMDQsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcIms2Mjk3MjcxMjk4cVwiLFwidGl0bGVcIjpcIjExMTEyXCIsXCJib2R5XCI6XCIyMjIyMjIyMjIyMjIyMjIyMjJcIn0iLCJkaWdlc3QiOiJmMWQyZDU3MmRkZGVmM2NjNGVkM2RlYjczNjQyYTZiYzM5MGI4ZWY1MmQxZDdiNWI3NzYxYzFhYjQyMWZlMjMyIiwic2lnbmF0dXJlIjoiMHhjNDZkZGE2ZWQ1ZTk0OTI5Y2E0NWExYWU0MGFmY2YzMTFmYzQyOWViOTQ3OGNmNzBmMTBkMTAzZWMyODgxNTFjMmJkNzllNzgwNjBlMDZmMGY3MDlhNmQyY2E4YTBmYmEwY2ViMWNiYjVmNmFlOTY3YzE1ZDJhNWQ5NDNhYmZlNyIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFRm1nRDNhT1dCbmVUNXh6bHJVcGxQQ1lsSHhvdnhUc0MrSk9UNDErWWVSeHZya2lrcEZWck9mb25WQUFXbyt1T1cxNDBTemdEWFhjUjM3NStLRHhuV1E9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4OGQyYTM1NjFkOThjZDBiZmM1MDQ2NDY0MzRmNzliZjMzNTQ0ZjhkMyIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweDNlYmU4NWJjZDY5YTc1M2RiMDdmYzdkMTQ3MmI5YzQ4OTY1ZmE1YzEyODI0MTlhZDMzMjJhZWJjYjc1ZmExMDU0ZDBlMjljODU5MzMwMDMyZDYzMDhiM2M5YmEwODFhYWQxOWUwZmJlYmU4YTFkYjczYjk3ZGNhMWI2Njg2NGQ1MWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEF0ZW1SZXZpZXcgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUZtZ0QzYU9XQm5lVDV4emxyVXBsUENZbEh4b3Z4VHNDK0pPVDQxK1llUnh2cmtpa3BGVnJPZm9uVkFBV28rdU9XMTQwU3pnRFhYY1IzNzUrS0R4bldRPT0ifX0BAIPqwBXWj3YR0HZqZCbrsjzIsLo57TYIStspGZ0AJHAGOCa5A_xrd-nk33NOT4lKButT8bfyNynEfsSBkEsIK1XGKGi9CvVPKuCu7ZpBoIORLYwyM-YvJBwuiLyVaixmVGEZAYhSsiOUjHbMwJATccLKSUrmqz7UX_tVe5DwLqeBgd-UDT9sy8RjTmFsU4fMVgZoyj8k0OpXBy1iJHmJGOuW2LoMe5rr3OUVXucaXjFLXuo4A5bEbldbd3hotfhMiPu_3gB75zsbVm8T4c-J4g-x8b2XUT-in8tsX7jRQ1TS53quXio8zBmGcspuY8ohm-E7S6L93FTmf1P3Qr0n4qL_Vkw7KFExou9PyeYOMpVVBjjN8xDLm8FdM45BbKjChvI_pi8DOmLV2WjtV3qDBC45WSLYLOHY_LmOc1X5zbgcAAVhhr9rd4jp7pb0-1lFZSO2T29UXuQ3uTwTbEKIQPJ_m2B2YsFoDS6nGmNLk70AHo77DQCj2WPeijOxxkTNfwHT_aIPwVVwU7h96vxIeXO9jjwfB69Pn-RnC59tFEMi-6T0e9zpo6l0Hez3Hdi_XjaehYu-FjQChkoERvP95CNikjx5QEFV2g7Y12M1Iftk-630krEu-GswmXPyw3OxgMcnN1-iDjxOuu8ZPDmx2FnE7xUKZ_Y--l8ZNIcyOf74nPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAgAAAAAAAAAfQEAAAAAAAAP8gUYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0HENvbnRlbnQtVGFyZ2V0gAEzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlDFNvdXJjZUgxNTUzMWZhMi0xMjA1LTRmNjEtYjZlNC1jOWY2OGVjZjgxZjcUQ29udGVudC1JZIABN2FmZmViZjg3M2E5NzUyYWY5ODYxMDVhYjE0MmE4ZWJiZTZkODIzMGM3YjMzYjAxNjFlNzdhMjVmOWNiZGRlZRxDb250ZW50LURpZ2VzdIABN2FmZmViZjg3M2E5NzUyYWY5ODYxMDVhYjE0MmE4ZWJiZTZkODIzMGM3YjMzYjAxNjFlNzdhMjVmOWNiZGRlZRxDb250ZW50LUF1dGhvchhya3pjaWhkdXJoeWwOQ2hhaW5JZAQ1NgB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwiY29tbWVudFwiLFwiYWRkcmVzc1wiOlwiMHhlOTg0NjE1ODI2ZmNjMmEwY2IxODJlZjE5OWQ5OGZiOTU4MDMzOTEzXCIsXCJ0c1wiOjE2OTE0NjA2MjQ5MzEsXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcInJremNpaGR1cmh5bFwiLFwidGFyZ2V0XCI6XCIzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlXCIsXCJ0aXRsZVwiOlwiRmxhcHB5TW9vbmJpcmRcIixcImJvZHlcIjpcIlNvIGZ1biB0byBwbGF5IGluIG15IHNwYXJlIHRpbWUuXCJ9IiwiZGlnZXN0IjoiN2FmZmViZjg3M2E5NzUyYWY5ODYxMDVhYjE0MmE4ZWJiZTZkODIzMGM3YjMzYjAxNjFlNzdhMjVmOWNiZGRlZSIsInNpZ25hdHVyZSI6IjB4MWE4OGQ3OTAwMjRmNDQ3YTFhNjkzZjNiZWFlNTViMTVjOWI1ZTQ3YzIwMDljMTYwNDdlYmNiMmUxOTQ4ZGVjMWVlYWRmODUzNmM3ZDJmNzk1NzQ3MzA0N2ZkZGZmMWI2OTJkYTQ1YjM5NjVjMTM4OTE0YjJjY2NmYWE2NzhlODQiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVV1MDNFVmJnVkRZdGRZYmxZeHY3NHNxMXpqZTZQTXdUQkxSK1ErckJDWURNb0t1TlFXR2FtdjkxdHdGWUx6VUxBT2pMUmxTOTlQYXlqM3J1RmFqVmdBPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweGU5ODQ2MTU4MjZmY2MyYTBjYjE4MmVmMTk5ZDk4ZmI5NTgwMzM5MTMiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHg2MTFiYjRlMzIzOGRhYTQ5ZTgyNzQ3NjM1MjQzZjhmMWY2ZjkyYTZjODI0MTI1MTFjNjg5YzhiMjhiMTllODBiMDFjN2Q1OWMyOWY5MDMyYjYxODlhZjc4OTk4NzdhYmE5YzQwNjk0OWQwNzc2NjQ1ZWJkNzc5NDdmYzNjYmY4MjFjIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBDeWJlckNvbm5lY3QgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVV1MDNFVmJnVkRZdGRZYmxZeHY3NHNxMXpqZTZQTXdUQkxSK1ErckJDWURNb0t1TlFXR2FtdjkxdHdGWUx6VUxBT2pMUmxTOTlQYXlqM3J1RmFqVmdBPT0ifX0BAAf3gikvLrCOlnI0HMhzN4uSuS6LKsTTDSROVpUFVR-P97E3EAoB-6G9qKq5ksGmj0kWARn8I-Tih6SYcAy5sfVghMGKcXhjCyCTAUbu9oxl_xYE8cVzGwwNwjEAp52k_SWG6p1IJtmWkStZsxlCUIZCBW9g-iJvT1ctKeZSIXRwP6HiiaZskZqgqoypw-0KVdOdf2PKfQooVmblB8jfyZjBbnE62NpJCbbWbWVoQcyRsgfjGV84bD2Y07fZlh1S0gJYdbh7doc19wa7MtWSL0nwVHTqP-R5y2qTwnfmMIHoiSgPYbl-Ivfxkng9vFe8LXsQcWOoJtmhMqDzTKlVUqxjie_CoXnLoaKyrqdT9JTBaRRawrsWU8EjNn_5L6ryo__LZVC6mwSOLFTlmTsqM048yAknAgypkdziSJC5Bpq1NjyMDksYizY5GsoLf7WELkTLctzU99a0hc6VYmcU203jHx2MuelIgRLHEqkE3K9YsxCxWaSOiIHdekoYILtZJOFQHMDa3ujP_aM1dKHXHDX1yLDp7GmFHJrzKK5Pc8zxbxr2m5VXm4W3nUI0I0MHqrd-zJFOHBIQV2JsOapzD9QFgjn3iHvQJXemZWVt2gqDOzlr-K-pT3RfM2hTvctx6JHG9ElANt_N94jHU9hgTjeORvQfpnhzfZrxZtv5gu5NnPgX7WyVoTnTxFtyMHzK_iyQ9jKTuTNvPZDvpKXyraIujN7xcC4NvJ3aJ8zssULFQNgqiC5cQ2opbFOhg0A7GLIBkXNwSVwD5BBfHHCsiV-mwjjqdujllzy-pR5BCvvV2FZ4PlVAgsxX8hCEQUNVpO5_gISSE_SeLuRWXlhdSRRI4dGFNWm7E75ZJzeOn_C5hZCuQjIdgS_a-O__5v2MqBQlKDUdtw54pXniUkZA4UhPXNgcGwVvdBDsybCJeM__akVDhDWrY6nqGOozHfrIUS1VR_Cdo4LP57DlSkPOwfb81MDBkYjzPu1HYNTLEUCcWiNtw0-YV7j4eDx_a5p6esNiIZInXK3DJGw2a4Na7e9FyRLWzSNPtd54Ys0qjcGYTVwJJvl4e6oE7bMPXKSptAieiO3jhCnDFROl4Wm3NX2a1IE4DZYfk1hRjhi47p9TgbZmBkw8_1y5runeAb4ZmOyO1jiOxQ6mQCBO-AQpooHnacNlQtghy05lRR5kqdJsDEcZZuSpp4nuQJT7fkBjmRObw1lOqnpyDBwrEFKQ_3ct12toPLKN6jfTdYU7naOY0xe9N_DuWrVlzWZDjvkuciLZ25P6VI4I4rrRbJuwVAk5RXBPV4RcXuH-8SZPluilQ6tfygLDEVQeF8ltlrRMxEmjoUN9GKkPjfmyZzselmkAAAcAAAAAAAAADAEAAAAAAAANkAQYQ29udGVudC1UeXBlIGFwcGxpY2F0aW9uL2pzb24WQXBwbGljYXRpb24YQ3liZXJDb25uZWN0FENvbnRlbnQtSWSAAWEwMTBjODJlZGU2OTliZjFkZDIwMWQ3YjU0ZTZmYjQ5Y2Y4OTJmOTljMTRmNjMzZTM3ZTY3YzRhY2FiYjk4M2McQ29udGVudC1EaWdlc3SAAWEwMTBjODJlZGU2OTliZjFkZDIwMWQ3YjU0ZTZmYjQ5Y2Y4OTJmOTljMTRmNjMzZTM3ZTY3YzRhY2FiYjk4M2McQ29udGVudC1BdXRob3IYN3dtYXBucTBuMTRsDkNoYWluSWQENTYMU291cmNlCGF0ZW0AeyJjb250ZW50Ijoie1wib3BcIjpcInBvc3RcIixcImFkZHJlc3NcIjpcIjB4ZDRhOTgwOTgyMTEyZjQ0NmE1YzI4MDc4YjBjYmVmYTM0YTZkZTY5ZVwiLFwidHNcIjoxNjkxNDYwNjI0NzE5LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCI3d21hcG5xMG4xNGxcIixcInRpdGxlXCI6XCIxMTExMlwiLFwiYm9keVwiOlwiMjIyMjIyMjIyMjIyMjIyMjIyXCJ9IiwiZGlnZXN0IjoiYTAxMGM4MmVkZTY5OWJmMWRkMjAxZDdiNTRlNmZiNDljZjg5MmY5OWMxNGY2MzNlMzdlNjdjNGFjYWJiOTgzYyIsInNpZ25hdHVyZSI6IjB4NDllYTU3NmJhYzViNTc4ZmE0MWZlODY4N2ViZTlkYjY0ZjY2N2Q1YTNlY2M4ZmQ2NThkNjlmM2ZiMzExYzlmODE0MWY0NzcwZDU2ZWI0YmU4YzI0ZWQ1MmUwOThjNDc2YmFiNzRjMjgwYTQ3NTc4MDdmYTYxOWFlM2QyMGI3NjIiLCJzaWduaW5nS2V5Ijp7InB1YmxpY0tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXdDR2N2Q3llQkRoM2F1Tm5Na0RjNWNkQm8zVTdyNlc4ZHl2SGNWRTVQaS9LeU5LVHdwcHYrOVJvMFdaM0ZmK0hGUzlqQ1crdGhrNDZMbTF5NW9EaHFRPT0iLCJmb3JtYXQiOiJTdWJqZWN0UHVibGljS2V5SW5mbyIsImFsZ29yaXRobSI6IkVTMjU2In0sInNpZ25pbmdLZXlBdXRoIjp7ImFkZHJlc3MiOiIweGQ0YTk4MDk4MjExMmY0NDZhNWMyODA3OGIwY2JlZmEzNGE2ZGU2OWUiLCJzaWduaW5nS2V5U2lnbmF0dXJlIjoiMHg1Njg4ZWUwOThiOGYwOTc2NGNhMzkyMTEyZTM2ZmU0NjQ4ZjEzMWM0OTZmMzk4Njg0MjM3MDVkMmZjMDgyNjA2NmMwY2E1ODkxN2E5YzhiZTJjMDQ3NTE1NDEwYzVmYTlmNjEzNWUxZjM2ZWE0YjBmZTE4OGE5OTdmNWExODYyZTFjIiwic2lnbmluZ0tleU1lc3NhZ2UiOiJJIGF1dGhvcml6ZSBBdGVtUmV2aWV3IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUV3Q0djdkN5ZUJEaDNhdU5uTWtEYzVjZEJvM1U3cjZXOGR5dkhjVkU1UGkvS3lOS1R3cHB2KzlSbzBXWjNGZitIRlM5akNXK3RoazQ2TG0xeTVvRGhxUT09In19AQAa7WfTjI3NOCSe0ZSb57FWgXmeXB-0tBxPOQm0PZc_LWx_O3OiQk8aFUkpN2idbvkwl8QZru0TXu_yhYTJcseEvVcZdqMS-isNmKFa6F9wkqZHcUBXL5gKlH9DrY4rx61G60xV-w-DVu19Xb8QXmo3go2vhcZn_TekS-VReBGiJUb2HiCM8r1swXAbg4fwII6SvlXcqF-U5RUfD3lFt33lj_POR98qCDIW5TjEVtiAQFm2KvNVjoqgJeJo8k4I7kc8yh-xnzwPBZcVxZRVU_HTnvO5ILqarrn8Mho6Klz5_n-uibw2Jc6NTfBFkKMSFfBOkBQmFgIfetxhLPYKX7ecd6x-5kL9K79cVbhtroJq3aPxV_NMc91en_XFR3gdxloUwQcO5GY08t_DFMCvzsYTPYvpuxHi1zp9eV9ayfJ4o3L6cZAk10Y5m_m2H954mD2vW3iBeMeX59zFNbkA3oiUeKrwBH2s3FVhugig4tADmrKV5K83NoWdJd4A4g3qo4vthDgR1hT__b91ayYlw1GkacJpubkkFOYCE4b07oV-AGjyYgFgU8tI7thORlax9i7qRc1Y3-6I4tEy0odz_Fd9lO_HBvVkDyoVHGgAds_oAQB-NRvW1xrNQN6tkL_MqRc5HkREBTc47Y3-Eld5aqDF4KnbzWzER3YEwlKYYcJa7Zz4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAIAAAAAAAAAH0BAAAAAAAAD_IFGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdBRDb250ZW50LUlkgAE4YWYwOTQwNzNiZTFjMTI0ZjQ0OTlkMmY0NDA4MDAzZjgzZDQ2MDczNThkZDY4OTRhMmRmMTMzMjc4M2Y3MjYxHENvbnRlbnQtRGlnZXN0gAE4YWYwOTQwNzNiZTFjMTI0ZjQ0OTlkMmY0NDA4MDAzZjgzZDQ2MDczNThkZDY4OTRhMmRmMTMzMjc4M2Y3MjYxHENvbnRlbnQtQXV0aG9yGG8zcHRwbzI3aWZnaQ5DaGFpbklkBDU2HENvbnRlbnQtVGFyZ2V0gAEzOWYwMjE4ODFlNzM4NmY4ZDczZDZlZjI1NTMzZTYwOTFmMmEwMjU2ZTQyMmI0YjNjNGUzZDMzNWNjYWUxNDdlDFNvdXJjZUgxNTUzMWZhMi0xMjA1LTRmNjEtYjZlNC1jOWY2OGVjZjgxZjcAeyJjb250ZW50Ijoie1wib3BcIjpcImNvbW1lbnRcIixcImFkZHJlc3NcIjpcIjB4OGYzZDIwNDE5ODczZDRkZTE2NzI4NTc3MTA0NWE5NmRhODc5NzVjOVwiLFwidHNcIjoxNjkxNDYwNjI0ODg3LFwiY2hhaW5JZFwiOjU2LFwiaGFuZGxlXCI6XCJvM3B0cG8yN2lmZ2lcIixcInRhcmdldFwiOlwiMzlmMDIxODgxZTczODZmOGQ3M2Q2ZWYyNTUzM2U2MDkxZjJhMDI1NmU0MjJiNGIzYzRlM2QzMzVjY2FlMTQ3ZVwiLFwidGl0bGVcIjpcIkZsYXBweU1vb25iaXJkXCIsXCJib2R5XCI6XCJTbyBmdW4gdG8gcGxheSBpbiBteSBzcGFyZSB0aW1lLlwifSIsImRpZ2VzdCI6IjhhZjA5NDA3M2JlMWMxMjRmNDQ5OWQyZjQ0MDgwMDNmODNkNDYwNzM1OGRkNjg5NGEyZGYxMzMyNzgzZjcyNjEiLCJzaWduYXR1cmUiOiIweGM0YTY4MTJiODBmNjNjZmVmNDAzODFkYmQ3MzMxNTM5MmFmZThiNmZmMWFiMzM3YWFjOTIzMDhmYjExN2QzNDA0MWQwNzFjZWM1OTc2NDk5YTdkNTc4NmZkZDJlNDY2NDBkMDExYTUyMWIwNjk0MTAzZDRlMzMzZTAxNDM5ODc1Iiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVaMG5CaW15bVNJbEpnTUZOTjA4Z0FsWngxRkFnOFUwbFIwU3RHUEtvVTFzbVlVS2psYzd4TVA2ZUNyRU1DVzVQZFZrbVZqTmN6dUkzSXo5dlB4aTVkUT09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHg4ZjNkMjA0MTk4NzNkNGRlMTY3Mjg1NzcxMDQ1YTk2ZGE4Nzk3NWM5Iiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4ODVjOGI5NDc2NjRkM2IyZGJlNDliMTYyNDM5ZmQ1YTAyOWE3ZGZmYWQ4OTMxYzNjMjY2MmU0ODNkMGFhZGY4ZTExMWMyNzAzYzU3YzAzOGI1OWU5MjdiNDIzYmU1MWM3OWFlYzFjMmU5NDYyZjM0ZDhlOWY0ODczODQxOTJhMzUxYyIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQ3liZXJDb25uZWN0IGZyb20gdGhpcyBkZXZpY2UgdXNpbmcgc2lnbmluZyBrZXk6XG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVaMG5CaW15bVNJbEpnTUZOTjA4Z0FsWngxRkFnOFUwbFIwU3RHUEtvVTFzbVlVS2psYzd4TVA2ZUNyRU1DVzVQZFZrbVZqTmN6dUkzSXo5dlB4aTVkUT09In19AQBcXgn35qFYN5wckxB6DU_D3y5r57M8F8ySSJwA5GE1LUK-C_qZyiie5QajnZ-M0TAeJO5TtjNEoiQhMloDJJ4iRdgLLJAs0EmbBkEfu829ub-FlP-LHiOFhlzuV2uiATiA83RvGNEAPQoDyLoh3mPtN9avpSual3AQtbmpQYOHA40bnJTojSG6vnTnmqLQdaas3SaXoBSWczuTOEPXEbPnDISsnBGjxAy9niBq2FV5FaMCyunXt_OJ4jStgDkrHWpvYPzYRCE0Pcq2nlnufQIXAQWs9qZHSZbv71lL47pCUPNObVn_-_4NG5m5P5o-boZIlrCAV5-1f4gX75PFPU5aU1oOeJ3EZ_dVSECgGJVKQbGVNisDdpTTtZI03-e1B8uJXfu7K0FSm0dLPTA8JkqBKEYTrSXNOdHi5QPvcFmWpY6tFrSJYgs0fj1a-ZUhqvFLt-EmjfCrPaCYf7aLn4RZsBbsGdR_OagitCG3jpQjoE8j8WInh4j5hLCL-JgRcw1b3UTVMWjByhnw5FDqR_9Y56ix-UkSFkApZbWABhYIC5zHkJFPtygo7Io7X8QEjwUWPMAOA7ZBAF5vamzv6Ui8ItIj5Kf8SMRSGsx_QCOMakZXsdufxA717Q2I3pQ2Z7E-ExtgsBnQjWU-sO5EIBbZsQrY4A57D_ORbeJ9qk_lFJz4F-1slaE508RbcjB8yv4skPYyk7kzbz2Q76Sl8q2iLoze8XAuDbyd2ifM7LFCxUDYKoguXENqKWxToYNAOxiyAZFzcElcA-QQXxxwrIlfpsI46nbo5Zc8vqUeQQr71dhWeD5VQILMV_IQhEFDVaTuf4CEkhP0ni7kVl5YXUkUSOHRhTVpuxO-WSc3jp_wuYWQrkIyHYEv2vjv_-b9jKgUJSg1HbcOeKV54lJGQOFIT1zYHBsFb3QQ7MmwiXjP_2pFQ4Q1q2Op6hjqMx36yFEtVUfwnaOCz-ew5UpDzsH2_NTAwZGI8z7tR2DUyxFAnFojbcNPmFe4-Hg8f2uaenrDYiGSJ1ytwyRsNmuDWu3vRckS1s0jT7XeeGLNKo3BmE1cCSb5eHuqBO2zD1ykqbQInojt44QpwxUTpeFptzV9mtSBOA2WH5NYUY4YuO6fU4G2ZgZMPP9cua7p3gG-GZjsjtY4jsUOpkAgTvgEKaKB52nDZULYIctOZUUeZKnSbAxHGWbkqaeJ7kCU-35AY5kTm8NZTqp6cgwcKxBSkP93LddraDyyjeo303WFO52jmNMXvTfw7lq1Zc1mQ475LnIi2duT-lSOCOK60WybsFQJOUVwT1eEXF7h_vEmT5bopUOrX8oCwxFUHhfJbZa0TMRJo6FDfRipD435smc7HpZpAAAHAAAAAAAAAAwBAAAAAAAADZAEGENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uFkFwcGxpY2F0aW9uGEN5YmVyQ29ubmVjdBxDb250ZW50LUF1dGhvchhmb3Z1ZXlwNHJtbWIOQ2hhaW5JZAQ1NgxTb3VyY2UIYXRlbRRDb250ZW50LUlkgAFkMmFmYzM0ZGQwZTMwNjI2MTVlOGE4ODMwNDRjZmQyZjNhNzNjYWNlYTcyNTA0Y2ViZGE3ZmNmYTJiMjBiNjIxHENvbnRlbnQtRGlnZXN0gAFkMmFmYzM0ZGQwZTMwNjI2MTVlOGE4ODMwNDRjZmQyZjNhNzNjYWNlYTcyNTA0Y2ViZGE3ZmNmYTJiMjBiNjIxAHsiY29udGVudCI6IntcIm9wXCI6XCJwb3N0XCIsXCJhZGRyZXNzXCI6XCIweGYxNzAxODdjOTg1MzA4ZGRlMzA3ZmM4N2MyZDM1NThmNmY2Y2UxNDBcIixcInRzXCI6MTY5MTQ2MDYyNDg2NyxcImNoYWluSWRcIjo1NixcImhhbmRsZVwiOlwiZm92dWV5cDRybW1iXCIsXCJ0aXRsZVwiOlwiMTExMTJcIixcImJvZHlcIjpcIjIyMjIyMjIyMjIyMjIyMjIyMlwifSIsImRpZ2VzdCI6ImQyYWZjMzRkZDBlMzA2MjYxNWU4YTg4MzA0NGNmZDJmM2E3M2NhY2VhNzI1MDRjZWJkYTdmY2ZhMmIyMGI2MjEiLCJzaWduYXR1cmUiOiIweDczMDZmYTE1Nzg0NjAxNzhkNjJkZDFmZDJjNGE1YTIyMDZmZDdmOTBkYTVlZDA4M2U2NGUyNzU4ZDllNDQ1OGEzM2ExZTBhNTQ2ZDVhYTM5Y2YxODg0ZGU1ZDI1OWRlNGJjZmUzMzc3NDRiYTYyNzgwNzVkOTlkOTA1MTcxMjliIiwic2lnbmluZ0tleSI6eyJwdWJsaWNLZXkiOiJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVoNTRBT29tamV2dml0QXlIb1BvVDAxa1o5enkvK0lNS3FMVE9wdFpJUHpLcm84SjhOd1dlalBFWUFrYkkrdEg4MEJNYkNGSmo5ZndOMUF5dkNkekp5QT09IiwiZm9ybWF0IjoiU3ViamVjdFB1YmxpY0tleUluZm8iLCJhbGdvcml0aG0iOiJFUzI1NiJ9LCJzaWduaW5nS2V5QXV0aCI6eyJhZGRyZXNzIjoiMHhmMTcwMTg3Yzk4NTMwOGRkZTMwN2ZjODdjMmQzNTU4ZjZmNmNlMTQwIiwic2lnbmluZ0tleVNpZ25hdHVyZSI6IjB4ZjYwNjlkYmU5MTUzNjQ2MzNhNjc1OTE3ZDdmYzRhZmFkNjZmMWYxMDc2YjRjZTk4NWE3ODQwNjNlYmNhMjAyYjFjNTYxNGUzMzMyMGJjYzFmZjA4OTQ2ZGIzMjAzMGI2ODAwOTU4YjgxMzY0YWFlM2FjZjY2YmVkNmNkZTYwZjkxYiIsInNpZ25pbmdLZXlNZXNzYWdlIjoiSSBhdXRob3JpemUgQXRlbVJldmlldyBmcm9tIHRoaXMgZGV2aWNlIHVzaW5nIHNpZ25pbmcga2V5OlxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaDU0QU9vbWpldnZpdEF5SG9Qb1QwMWtaOXp5LytJTUtxTFRPcHRaSVB6S3JvOEo4TndXZWpQRVlBa2JJK3RIODBCTWJDRkpqOWZ3TjFBeXZDZHpKeUE9PSJ9fQEAZOuIFNeBPIkEQwmUi4F-zHD11WpZ6skQqlK5FzKbhGBeWybzl59exXVhF46dcEo20Rt5Sq3L6ybSwODQGPo0R9p0AK7_rciV6wgk6nIhFQo-LkRZoCIvwvkcZNol1IoGYSdWsy54WnLyhdThY9dZtK2SQ5pHWZtgDBBVJF6m1L4HcGYTyFI69hWa3E4aHzWY7ZNHMTkU6LX2BhPXodCHE-L8IM1IG7m-XyCG9NOjzfx0y1q7amaoF8vMcRheqX7lUcK6rUftYk1QhcXjJO3YhQLzB11d6ByASjpohQ-35aZG6FH46hLOdREaHVvWQrCuzPSlux9HuqOJq9SXc7gT67j4bJsSKGiuq3X0hF5iOuky6HcQiUUFc6tpyR-gZy0mvt9hBqPD3aztzYSeNaY7RGkwmithwqF0Ey9-eMk-vG-dHuxQHf2zfiRtDzxQKQcUUBMgDMDZcvTliJmRrrT9GCsPE9t-qkFhlAww3dvjjJXCwrDTe7yzVasNVqpnTvVMOKtwOBkYjLkRoreqWxn_kwZebP6WzXwxiVFbIm-iXls--8ftnY2dgrYRSfr7aV6Mr3SybsiGtokQLUa9oDiqXZhVp71PWcevKwaImcKHiEW05xjNUeqBoPpoAQEuuFct2VynT2ZIsqVXSAkt2Mbc5efIKd6FxZqx4bzob6NxGKSc-BftbJWhOdPEW3IwfMr-LJD2MpO5M289kO-kpfKtoi6M3vFwLg28ndonzOyxQsVA2CqILlxDailsU6GDQDsYsgGRc3BJXAPkEF8ccKyJX6bCOOp26OWXPL6lHkEK-9XYVng-VUCCzFfyEIRBQ1Wk7n-AhJIT9J4u5FZeWF1JFEjh0YU1absTvlknN46f8LmFkK5CMh2BL9r47__m_YyoFCUoNR23DnileeJSRkDhSE9c2BwbBW90EOzJsIl4z_9qRUOENatjqeoY6jMd-shRLVVH8J2jgs_nsOVKQ87B9vzUwMGRiPM-7Udg1MsRQJxaI23DT5hXuPh4PH9rmnp6w2IhkidcrcMkbDZrg1rt70XJEtbNI0-13nhizSqNwZhNXAkm-Xh7qgTtsw9cpKm0CJ6I7eOEKcMVE6Xhabc1fZrUgTgNlh-TWFGOGLjun1OBtmYGTDz_XLmu6d4BvhmY7I7WOI7FDqZAIE74BCmigedpw2VC2CHLTmVFHmSp0mwMRxlm5Kmnie5AlPt-QGOZE5vDWU6qenIMHCsQUpD_dy3Xa2g8so3qN9N1hTudo5jTF7038O5atWXNZkOO-S5yItnbk_pUjgjiutFsm7BUCTlFcE9XhFxe4f7xJk-W6KVDq1_KAsMRVB4XyW2WtEzESaOhQ30YqQ-N-bJnOx6WaQAABwAAAAAAAAAMAQAAAAAAAA2QBBhDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbhZBcHBsaWNhdGlvbhhDeWJlckNvbm5lY3QcQ29udGVudC1BdXRob3IYaGxuam9vdXFiZ3loDkNoYWluSWQENTYMU291cmNlCGF0ZW0UQ29udGVudC1JZIABMDQ2NjFlMzYzYTJhNjdiNDU2NDcyNTEzZGVjNmIxYzg2ZmYzZDFjZmYyM2UyYTQ3YTYxNzg4ZGE1YzVmMzZkYxxDb250ZW50LURpZ2VzdIABMDQ2NjFlMzYzYTJhNjdiNDU2NDcyNTEzZGVjNmIxYzg2ZmYzZDFjZmYyM2UyYTQ3YTYxNzg4ZGE1YzVmMzZkYwB7ImNvbnRlbnQiOiJ7XCJvcFwiOlwicG9zdFwiLFwiYWRkcmVzc1wiOlwiMHg2YWY5NDViM2U0MjZlMmFhMjZjYmMzOTU2NjQ2ZTA4MDk5OTMzOWNlXCIsXCJ0c1wiOjE2OTE0NjA2MjQ4NDksXCJjaGFpbklkXCI6NTYsXCJoYW5kbGVcIjpcImhsbmpvb3VxYmd5aFwiLFwidGl0bGVcIjpcIjExMTEyXCIsXCJib2R5XCI6XCIyMjIyMjIyMjIyMjIyMjIyMjJcIn0iLCJkaWdlc3QiOiIwNDY2MWUzNjNhMmE2N2I0NTY0NzI1MTNkZWM2YjFjODZmZjNkMWNmZjIzZTJhNDdhNjE3ODhkYTVjNWYzNmRjIiwic2lnbmF0dXJlIjoiMHg3YWY2MjU4MzY3Yzc0MDFjOWE4NmI1MzU4OGU0ZDMwYTE2ZDY4ZjY1NWQzYzViY2ZjYjVlZjE4N2ViMGQ2YWVlYTExMThkMDhmYjg2OWM5YTk4MTY2NTliYWFkNjk5ZjI4NGM4NjI5OTAzM2I0OWQyMjNhNzdhYjUwMGRjYTlkNCIsInNpZ25pbmdLZXkiOnsicHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFNURwMHRQUVZwb1NERmJIelhlT29sTnR3MUMzbTFISHVPeCswMVZWNXFLbUFZNEdGZHNaZUNEY08ra3FkT242Q3dWNWQ1V2hrY1pUSVVTT0RBK011aXc9PSIsImZvcm1hdCI6IlN1YmplY3RQdWJsaWNLZXlJbmZvIiwiYWxnb3JpdGhtIjoiRVMyNTYifSwic2lnbmluZ0tleUF1dGgiOnsiYWRkcmVzcyI6IjB4NmFmOTQ1YjNlNDI2ZTJhYTI2Y2JjMzk1NjY0NmUwODA5OTkzMzljZSIsInNpZ25pbmdLZXlTaWduYXR1cmUiOiIweGEwZjkxY2I5NDE3ODU0Y2JhNDEzYTk2MjM3NWI0NTRmM2YxNjBjNmJjYTA2N2M3N2RkYmRkNDcyNTQwZDQ0ZWU0Zjc0YjRkZGNmYmY1ODY4ZWQyYjdlOWMxYzAwN2RhMDg5OGVjOTAyZDZhZTYyNjI0ODYyMTY4OWExMTViYzYzMWMiLCJzaWduaW5nS2V5TWVzc2FnZSI6IkkgYXV0aG9yaXplIEF0ZW1SZXZpZXcgZnJvbSB0aGlzIGRldmljZSB1c2luZyBzaWduaW5nIGtleTpcbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTVEcDB0UFFWcG9TREZiSHpYZU9vbE50dzFDM20xSEh1T3grMDFWVjVxS21BWTRHRmRzWmVDRGNPK2txZE9uNkN3VjVkNVdoa2NaVElVU09EQStNdWl3PT0ifX0"}
     
    - + diff --git a/gateways/ar-io-node/overview/index.html b/gateways/ar-io-node/overview/index.html index c0a896ee..416dd74c 100644 --- a/gateways/ar-io-node/overview/index.html +++ b/gateways/ar-io-node/overview/index.html @@ -20,11 +20,11 @@ - + - + diff --git a/gateways/ar-io-node/release-notes.html b/gateways/ar-io-node/release-notes.html index ffef8662..b51a1409 100644 --- a/gateways/ar-io-node/release-notes.html +++ b/gateways/ar-io-node/release-notes.html @@ -20,7 +20,7 @@ - + @@ -80,6 +80,6 @@
    • New default header cache (replaces old FS cache).
  • LMDB header cache implementation (PR 60 (opens new window)).
    • Intended for use in development only.
    • Enable by setting CHAIN_CACHE_TYPE=lmdb.
  • Filesystem header cache cleanup worker (PR 68 (opens new window)).
    • Enabled by default to cleanup old filesystem cache now that Redis is the new default.
  • Support for parallel ANS-104 unbundling (PR 65 (opens new window)).
  • Changed

    • Used pinned container images tags for releases.
    • Default to Redis header cache when running via docker-compose.
    • Default to LMDB header cache when running via yarn start.
  • Fixed

    • Correct GraphQL pagination for transactions with duplicate tags.
  • - + diff --git a/gateways/ar-io-node/windows-setup/index.html b/gateways/ar-io-node/windows-setup/index.html index a44718db..abe8171a 100644 --- a/gateways/ar-io-node/windows-setup/index.html +++ b/gateways/ar-io-node/windows-setup/index.html @@ -20,7 +20,7 @@ - + @@ -57,6 +57,6 @@
    • Use the cd command to change directories. For example, to navigate to the Documents directory:
      cd Documents
       
  • Run the following command:
    git clone -b main https://github.com/bobinstein/dockerized-nginx
     
  • Note: This NGINX container was designed to easily automate many of the more technical aspects of setting up NGNIX and obtaining an ssl certificate so your node can be accessed with https. However, wildcard domain certifications cannot be universally automated due to significant security concerns. Be sure to follow the instructions in this project for obtaining wildcard domain certificates in order for your node to function properly.

  • Follow the instructions provided in the repository for setting up NGINX Docker.

  • Congratulations! Your AR.IO node is now running and connected to the internet. Test it by entering https://<your-domain>/3lyxgbgEvqNSvJrTX2J7CfRychUD5KClFhhVLyTPNCQ in your browser.

    Note: If you encounter any issues during the installation process, please seek assistance from the AR.IO community (opens new window).

    - + diff --git a/gateways/bundler/index.html b/gateways/bundler/index.html index 4f387f1a..3235b02c 100644 --- a/gateways/bundler/index.html +++ b/gateways/bundler/index.html @@ -20,7 +20,7 @@ - + @@ -44,6 +44,6 @@

    The -d flag runs the command in "detached" mode, so it will run in the background without requiring the terminal to remain active.

    # Stopping

    To spin the bundler service down, specify the docker-compose file in a docker compose down command:

    docker compose --file docker-compose.bundler.yaml down
     

    # logs

    While the bundler service is running in detached mode, logs can be checked by specifying the docker-compose file in a docker compose logs command:

    docker compose --file docker-compose.bundler.yaml logs -f --tail=0
     
    • -f runs the command in "follow" mode, so the terminal will continue to watch and display new logs.
    • --tail= defines the number of logs to display that existed prior to running the command. 0 displays only new logs.
    - + diff --git a/gateways/delegated-staking/index.html b/gateways/delegated-staking/index.html index 9b9f6ec5..6aa2915a 100644 --- a/gateways/delegated-staking/index.html +++ b/gateways/delegated-staking/index.html @@ -20,11 +20,11 @@ - +

    # Delegated Staking Settings

    # Overview

    Gateway operators can choose to allow other people to stake tokens on their gateway. This is called “delegated staking”, and it increases the number of tokens staked for a given gateway. The additionally staked tokens result in a greater stakeWeight for the gateway - increasing it’s likelihood chosen as an observer and potentially receive additional rewards for a given epoch (assuming that the gateway’s observer is working properly). To incentivize this, you can set a portion of your gateway and observer rewards to be given to the people who stake on your gateway.

    -->
    - + diff --git a/gateways/index.html b/gateways/index.html index 1262f65c..3cb2b2f8 100644 --- a/gateways/index.html +++ b/gateways/index.html @@ -20,11 +20,11 @@ - +

    # Gateway Architecture

    # Overview

    A gateway’s primary role in the Arweave ecosystem is to act as a bridge between the Arweave network and the outside world. This means that a gateway's main task is to make it easier for users to interact with the Arweave network by simplifying the technical processes of writing, reading, and discovering data on the blockweave in a trust-minimized fashion.

    The core functions of a general Arweave gateway are broken down into the following areas.

    Writing data involves:

    • Proxying Layer 1 transaction headers to one or more healthy and active Arweave nodes (miners) to facilitate inclusion in the mempools of as many nodes as possible.

    • Proxying chunks for Layer 1 Arweave transactions to Arweave nodes to help facilitate storage and replication of the chunks on the blockweave.

    • Receiving and bundling so-called Layer 2 data items (e.g., ANS-104 spec) as Layer 1 transactions.

    Reading involves retrieving:

    • Transaction headers for a Layer 1 Arweave transaction.

    • Individual data chunks for a Layer 1 Arweave transaction.

    • Blocks from the blockweave.

    • Storage pricing rates for data from the Arweave node network.

    • Contiguous streams of chunks representing an entire Layer 1 transaction.

    • Layer 2 bundled data items (e.g., ANS-104).

    • Wallet information (e.g., token balance).

    Discovering data involves:

    • Facilitating efficient, structured queries for Layer 1 and Layer 2 transaction and wallet data by:

      • examining incoming streams of data (i.e., directly ingested transactions and data items, blocks emitted by the chain, etc.).

      • managing index data in a database or analogous data store.

    • Parsing and executing user queries.

    • Facilitating friendly-path routing via Arweave manifest indexing.

    # AR.IO Gateway Benefits

    AR.IO gateways provide many new benefits and capabilities beyond general Arweave gateways:

    • Providing the modularity and configurability necessary for operating extensible gateways that can be deployed at small or large scales to meet the needs of specific applications, use cases, communities, or business models.

    • Providing pluggable means for consuming telemetry data for internal and external monitoring and alerting.

    • Facilitating friendly-subdomain-name routing to Arweave transactions via a direct integration with the Arweave Name System (ArNS).

    • Facilitating configurable content moderation policies.

    • Providing connectivity to a decentralized network of other AR.IO gateways, enabling data sharing and other shared workloads.

    # Gateway Modularity

    A design principle of AR.IO gateways is that their core components should be interchangeable with compatible implementations.

    The core services in the gateway are written in Typescript, with flexible interfaces to the various subsystems and databases. This allows operators to customize their gateway to meet their specific requirements. Gateway services can be turned on or off depending on the operator's needs. For example, an operator might choose to have their gateway serve data, but not actively index Layer 2 bundled data.

    This flexibility also allows operators to utilize the technologies that are appropriate for the scale and environments in which they operate.

    For example, small scale operators might want to use low-overhead relational databases to power their indexing while larger scale operators might opt to use cloud-native, horizontally scalable databases. Analogous examples for storage and caching exist as well.

    Gateway Tech Stack Options
    Topology Chain Index Bundle Index Data Index Data Store
    Small SQLite SQLite SQLite Local File System
    Large PostgreSQL Cassandra Cassandra S3 Compatible

    # ARNS Indexing and Routing

    The Arweave Name System’s (ArNS) state is managed by the IO token’s smart contract. AR.IO gateways shall perform the following minimum functions relative to ArNS:

    • Actively track state changes in the contract.

    • Maintain up-to-date indexes for routing configurations based on the state of the IO contract as well as the states of the Arweave Name Token (ANT) contracts to which each name is affiliated.

    • Manage the expiration of stale records.

    • Facilitate ArNS routing based on the subdomains specified on incoming requests where appropriate.

    • Provide a custom HTTP response header for ArNS requests indicating the corresponding Arweave transaction ID.

    # Content Moderation

    The AR.IO Network will adopt Arweave’s voluntary content moderation model whereby every participant of the network has the autonomy to decide which content they want to (or can legally) store, serve, and see. Each gateway operating on the network has the right and ability to blocklist any content (or address) that is deemed in violation of its content policies or non-compliant with local regulations.

    - + diff --git a/gateways/testnet/index.html b/gateways/testnet/index.html index 7ea38ed4..b7d05dda 100644 --- a/gateways/testnet/index.html +++ b/gateways/testnet/index.html @@ -20,11 +20,11 @@ - +

    # Join the AR.IO Testnet

    # Prerequisites

    1. Must have a fully functional AR.IO gateway.

    2. Gateway must be associated with an Arweave Wallet.

    3. Arweave wallet must be funded with enough AR tokens to pay for transaction gas.

    # Submit an Application

    Joining the ar.io Testnet requires staking a minimum of 50,000 Test IO Tokens. You must have Test IO Tokens before you are able to join. Test IO Tokens are currently not being distributed.

    New applications for joining the Testnet are not currently being accepted. Be sure to join the ar.io Discord (opens new window) to stay up to date on Testnet status and possible future availability prior to the launch of the Mainnet. -->

    - + diff --git a/gateways/upgrade/index.html b/gateways/upgrade/index.html index f49d5530..907c2cd3 100644 --- a/gateways/upgrade/index.html +++ b/gateways/upgrade/index.html @@ -20,7 +20,7 @@ - + @@ -38,6 +38,6 @@
  • Check for New Environmental Variables

    Read the update release change logs and community announcements to see if the new version includes any new environmental variables that you should set before restarting your gateway.

  • Restart the Docker container

    Finally, start the Docker container again to implement the changes:

    Linux
    sudo docker-compose up -d
     
    Windows
    docker-compose up -d
     

    NOTE: Effective with Release #3, it is no longer required to include the --build flag when starting your gateway. Docker will automatically build using the image specified in the docker-commpose.yaml file.

  • That's it! Your AR.IO Gateway is now upgraded to the latest version. Ensure to test and verify that everything is functioning as expected. If you encounter any issues, reach out to the AR.IO community (opens new window) for assistance.

    - + diff --git a/glossary.html b/glossary.html index 49922b1b..fee3549c 100644 --- a/glossary.html +++ b/glossary.html @@ -20,11 +20,11 @@ - +

    # Glossary

    Many novel terms and acronyms are used by the Arweave ecosystem as well as some new ones introduced by AR.IO. The list below is intended to serve as a non-exhaustive reference of those terms:

    # aoComputer (AO):

    The aoComputer is the actor oriented machine that emerges from the network of nodes that adhere to its core data protocol, running on the Arweave network. It is a single, unified computing environment, hosted on a heterogenous set of nodes in a distributed network. AO is designed to offer an environment in which an arbitrary number of parallel processes can be resident, coordinating through an open message passing layer. This message passing standard connects the machine's independently operating processes together into a 'web' -- in the same way that websites operate on independent servers but are conjoined into a cohesive, unified experience via hyperlinks.

    # Arweave Name System (ArNS):

    A decentralized and censorship-resistant naming system enabled by AR.IO gateways which connects friendly names to permaweb applications, pages, and data.

    # Arweave Name Token (ANT), “Name Token”:

    An aoComputer based token, that is connected to each registered ArNS Name. Each ANT gives the owner the ability to update the subdomains and Arweave transaction IDs used by the registered name as well as transfer ownership and other functions.

    # Arweave Network Standards (ANS):

    Drafts and finalized standards for data formats, tag formats, data protocols, custom gateway features and anything that is built on top the Arweave Network. Specific standards are denoted by an associated number, e.g., ANS-###.

    # Base Layer Transaction:

    Refers to one of up to 1,000 transactions that make up a single Arweave block. A base layer transaction may contain bundled data items.

    # Bundle, bundling:

    An Arweave concept introduced in ANS-104 that allows for a way of writing multiple independent data transactions into one base layer transaction. Bundled transactions contain multiple independent transactions, called data items, wrapped into one larger transaction. This offers two major network benefits:

    • A scaling solution for increasing the throughput of uploads to the Arweave network,

    • Allows delegation of payment for an upload to a third party, while maintaining the identity and signature of the person who created the upload, without them needing to have a wallet with funds.

    # Bundled Data Item (BDI):

    A data item / transaction nested within an ANS-104 bundled transaction.

    # Bundler:

    A third-party service and gateway feature that bundles data files on a user’s behalf.

    # Chunk:

    A chunk is a unit of data that is stored on the Arweave network. It represents a piece of a larger file that has been split into smaller, manageable segments for efficient storage and retrieval.

    # Decentralized, decentralization, etc:

    A nonbinary, many axis scale enabling a system or platform to be: permissionless, trustless, verifiable, transparent, open-source, composable, resilient, and censorship resistant. Ultimately, something that is decentralized is not prone to single points of failure or influence.

    # Epoch:

    A specific duration (e.g., one block-week) during which network activities and evaluations are conducted. It serves as a key time frame for processes such as observation duties, performance assessments, and reward distributions within the network's protocols.

    # Gateway:

    A node operating on the Arweave network that provides services for reading from, writing to, and indexing the data stored on the permaweb. Sometimes referred to as “permaweb nodes”.

    # Gateway Address Registry (GAR):

    A decentralized directory maintained in the AR.IO smart contract. It serves as the authoritative list of all registered gateways on the AR.IO Network. The registry provides detailed metadata about each gateway to facilitate discovery, health monitoring, and data sharing among permaweb apps and users. The GAR is designed to be easily queryable, sortable, and filterable by end users and clients, allowing for tailored selections based on various criteria to meet specific use cases.

    # Indexing:

    The act of organizing transaction data tags into queryable databases.

    # Layer 2 Infrastructure:

    Layer 2 refers to the technology / infrastructure stack built “above” a base layer. In this use, the AR.IO Network would be considered Layer 2 infrastructure to the base Arweave protocol.

    # Manifest (aka Path Manifest, Arweave Manifest):

    Special “aggregate” files uploaded to Arweave that map user-definable sub-paths with other Arweave transaction IDs. This allows users to create logical groups of content, for example a directory of related files, or the files and assets that make up a web page or application. Instead of having to manually collate these assets, manifests group them together so that an entire website or app can be launched from a single manifest file. Gateways can interpret this structure, so that users can then reference individual transactions by their file name and/or path.

    # Mempool:

    Short for "memory pool," is a component of Arweave mining nodes that temporarily stores valid transactions that have been broadcasted to the network but have not yet been added to a block.

    # Miner (aka Arweave Node):

    A node operating on the Arweave network responsible for data storage and recall.

    # Native Address:

    The way public addresses are commonly (or by spec) represented in their native blockchain. Arweave keys are 43 character base64url representations of the public key, while Ethereum keys use a different hashing algorithm and start with 0x etc.

    # Normalized Address:

    43 character base64url representation of the sha256 hash of a public key. Public keys for other chains can be normalized by this representation.

    # Observer:

    A gateway selected to evaluate the performance of peer gateways in resolving ArNS names. Observers assess and report on the operational efficacy of other gateways.

    # Optimistic Indexing:

    Indexing transaction or data item headers before the associated L1 transaction has been accepted and confirmed in a chain block.

    # Owner:

    Generally, the public key of the signer.

    # Owner Address:

    The normalized address of the owner

    # Period:

    Refers to a predefined time span (e.g., a block-day) that serves as a cycle for network activities such as dynamic pricing. It is a fundamental unit of time for operational and protocol processes within the network.

    # Permaweb:

    The permaweb is the permanent and decentralized web of files and applications built on top of Arweave.

    # Protocol Balance:

    The primary sink and source of IO tokens circulating through the AR.IO Network. This balance is akin to a central vault or wallet programmatically encoded into the network’s smart contract from which ArNS revenue is accumulated and incentive rewards are distributed.

    # Protocol Rewards:

    IO Token incentive rewards distributed by the protocol to the network’s eligible users and gateway operators.

    # Public Key:

    The publicly known keys for a signer (wallet). Public keys are different byte lengths depending on the signer type (e.g. Arweave vs. Ethereum (ECDSA), vs Solana, etc.)

    # Seeding:

    Refers to the act of propagating new data throughout the network. Miner nodes seed Arweave base layer transaction data to other miners, while gateways ensure that the transactions they receive reach the Arweave nodes. Both gateways and Arweave nodes seed base layer transactions and data chunks.

    # Staking (of tokens):

    Refers to the process of locking IO tokens into a protocol-facilitated vault, temporarily removing them from circulation until unlocked. This action represents an opportunity cost for the gateway operator and serves as a motivator to prioritize the network's collective interests.

    # Transaction ID (txID):

    Every transaction and data file uploaded to Arweave is assigned a unique identifier code known as the Transaction ID. These txID’s can be referenced by users to easily locate and retrieve files.

    # Trust-minimization:

    Relates to enacting network security by minimizing the number of entities and the degree to which they must be trusted to achieve reliable network interactions. A network with trust-minimizing mechanisms means that it has reduced exposure to undesirable third-party actions and built-in incentives to reward good behavior while punishing bad behavior.

    # Vault:

    Token vaults are protocol level mechanisms used to contain staked tokens over time. Each vault contains a starting block height, ending block height (if applicable), along with a balance of tokens.

    - + diff --git a/guides/ants-on-bazar/index.html b/guides/ants-on-bazar/index.html index b6ee35c2..1e4ff1ef 100644 --- a/guides/ants-on-bazar/index.html +++ b/guides/ants-on-bazar/index.html @@ -20,13 +20,13 @@ - +

    # Trading ANTs on Bazar

    # Overview

    Arweave Name Tokens are Atomic Asset Spec (opens new window) compliant AO tokens that manage records and permission for ArNS names. Because the ANT spec is compliant with the Atomic Asset Spec, they are tradable on Bazar (opens new window), which is a decentralized market place for Atomic Assets on AO. There are a few simple steps that are required in order to make an ANT available on Bazar to be traded.

    # Bazar Profile

    Bazar relies on profiles (opens new window) for displaying user information and tradable assets. Profiles are AO processes that contain user specified information like a name, a nickname, and images associated with the profile. Profiles also track assets held by the profile in order to provide their information to bazar.

    # Create a Profile

    If you do not already have a profile associated with your wallet, you can easily create one on using the "Create your profile" button on bazar after connecting your wallet:

    You will be prompted to add, at a minimum, a name and handle (nickname) to associate with the profile. These values can be changed later.

    Click "Save" at the bottom to finish creation of your profile.

    Once your profile is created, you can get its ao process Id at any time by clicking on the user icon in Bazar, and then the "Copy profile address" button from the menu.

    # Transfer ANT to the Profile

    Bazar profiles only track assets that are held in the profile process, not in a user wallet. In order for an ANT to be displayed and transferred on Bazar, it must first be transferred into the Bazar profile. This can be done easily using arns.app (opens new window) in your manage page for a given name.



    Once an ANT is transferred into the profile process, it will automatically be detected and displayed by Bazar. It can be transferred or sold just like any other atomic asset on the marketplace, with no additional steps required.

    # Restore Controllers

    Optional

    This is an optional step that will enable updating an ANT's Target Id without transferring it back into your wallet. This step may be safely skipped without affecting the ANT's functionality or tradability on Bazar.

    Transferring an ANT to a new wallet or AO process resets all authorized controllers, or non-owner entities that are allowed to update some settings on the ArNS name. It does not reset the Target Id that the ArNS name is pointing to. If you want to be able to update the Target ID and undernames from your wallet using arns.app, you will need to set your wallet address as a controller for the ANT while it is in your profile. The easiest way to do this is using aos.

    If you have not used aos before, you can find installation instructions here (opens new window)

    Using aos, you can log directly into your profile process with the command:

    aos <profile-address> --wallet "/path/to/your/keyfile"
     

    Be sure to replace <profile-address> with the process Id for your profile process, and /path/to/your/keyfile with the path to the keyfile for the wallet you created the profile with.

    Once you are logged in with aos, you can send a message to the ANT in your profile to set your wallet as a controller:

    Send({ Target = "<Ant-Process-ID>", Action = "Add-Controller", Controller = "<Wallet-Address>" })
     

    Replace <Ant-Process-ID> with the process Id of the ANT you transferred into your profile, and <Wallet-Address> with your wallet address.

    - + diff --git a/guides/arns/managing.html b/guides/arns/managing.html index 4210eebf..4724d7d4 100644 --- a/guides/arns/managing.html +++ b/guides/arns/managing.html @@ -20,13 +20,13 @@ - +

    # Managing ArNS Assets

    # Overview

    From the Manage Assets page of arns.app, you can view details about your registered names, assign new Target IDs for your names to resolve to, or register new undernames for your ArNS names.

    Access the Manage Assets page by connecting your Arweave wallet, and clicking on the account button displaying your wallet address (the connect button if you are not connected), then selecting "Manage Assets" from the menu.

    The Manage Assets page features two important tabs. Names and ANTS.

    # Names

    The Names tab displays all of the ArNS names registered to the currently connected wallet. Each name has its own "details" button which allows you to view details about the name, extend the lease period, or increase the available undernames for that name.

    # ANTs

    The ANTs tab displays each ANT owned by the connected wallet (except for advanced use cases, each ArNS name will have its own ANT). You can view and create new undernames using the "Undernames" button, or access advanced management options by clicking on the "manage" icon (shaped like a gear).

    The Advanced manage page allows you to transfer ownership, add or remove controllers (other wallets who are able to manage an ANT) or set/modify a Target ID for a name to resolve to.

    - + diff --git a/guides/arns/overview.html b/guides/arns/overview.html index 868f0031..c220744d 100644 --- a/guides/arns/overview.html +++ b/guides/arns/overview.html @@ -20,11 +20,11 @@ - +

    # Arweave Name System (ArNS)

    # Overview

    The Arweave Name System (ArNS) is a decentralized, censorship-resistant naming system on Arweave. It allows data on Arweave to be assigned to friendly domain names. Learn more about ArNS here.

    This guide will walk you through the process of purchasing and managing an ArNS name using arns.app (opens new window), the official ArNS portal from AR.IO.

    - + diff --git a/guides/arns/registering.html b/guides/arns/registering.html index 3f1580d5..4cf12194 100644 --- a/guides/arns/registering.html +++ b/guides/arns/registering.html @@ -20,13 +20,13 @@ - +

    # Registering an ArNS name

    # Overview

    There are two options when registering an ArNS name. You can purchase the name outright, or lease it for a period of 1 to 5 years. Registrations are further broken down into instant buys, and dutch auctions. Auctions are required for purchases of certain names in a specified character length range. Find more information about when an auction is required, as well as the rules an ArNS name must follow to be valid here.

    # Connect Your Wallet

    In order to purchase ArNS names, you will need to have a connected Arweave wallet in order to sign and pay for the transaction. Connect your wallet by clicking the "Connect" button in the top right, and following the prompts.

    # Checking Availability

    The home page of arns.app (opens new window) features a search box for checking if a specific ArNS name is available for registration. Indicators below the box can help to make sure you are complying with the technical requirements for name validity as you type.

    Simply type out the name you would like to register and click on the search icon next to the text box. A check will be performed to let you know if your chosen name is available or already in use.

    NOTE: 1 to 4 character names are not available during the testnet.

    or

    If a name is unavailable, information about the name's registration period and current owner will be displayed. If it is available, a "Register" button will appear, allowing you to move to the next step in registration.

    # Configure Your Purchase

    After clicking "Register" on a valid and available name, you will be prompted to connect a wallet using ArConnect (opens new window) if you have not already done so. Support for other wallets will be added in the future.

    Once you are connected, you will be shown a page to configure your purchase. You will be able to select if you want to lease or buy the name, and the length of the lease. A notice will appear if your purchase requires an auction.

    You can also use this page to assign the name to an existing Arweave Name Token (ANT), or set an Arweave Transaction ID (Target ID) for the name to resolve to. You will be able to set or change the Target ID after your purchase from the asset management page.

    Towards the bottom of the page, you can also see the cost of your currently configured purchase in IO tokens, and the AR required to pay for gas for the transaction.

    # Confirm Your Purchase

    The final page before submitting your purchase shows a summary of your purchase. If everything looks correct, click on the "confirm" button to finalize the transaction. Remain on the page while the transaction processes.


    # Auctions

    No additional steps are necessary to initiate a purchase that requires an auction. However, the name will not immediately become yours. Instead, confirming your purchase will begin the auction.

    The IO cost displayed on the confirmation page will be frozen by the aoComputer contract, and used to finalize the purchase once the the auction drops to the floor price. You, or anyone else, may purchase the name at any time for the current auction price. You can click on the "View Auction" button from your confirmation page, or find your auction in the "Live Auctions" tab at the top of the screen to view the current auction price, and how it will change over time. If someone else purchases the name prior to the auction reaching the floor price, your frozen tokens will be released to you.

    - + diff --git a/guides/experimental/ao-ant/index.html b/guides/experimental/ao-ant/index.html index 90d76e64..fb3c0594 100644 --- a/guides/experimental/ao-ant/index.html +++ b/guides/experimental/ao-ant/index.html @@ -20,7 +20,7 @@ - + @@ -29,6 +29,6 @@

    From here, simply load the arns-resolver file into your process.

    .load ant.lua

    If things work successfully, your aos terminal will print "undefined".

    # Usage

    Simply loading the script into your process will set variables and handlers to make your process conform to the ant standard, but you will still need to send an initiate request to add your ANT into the ao registry.

    # Set Controller

    Only authorized people can make updates to your ArNS name. Because of this, you will need to add your process ID as a 'controller' under your ArNS name at arns.app (opens new window). This will give your process permissions needed to make these updates

    # Initiate Record Sync and Update

    When you purchase an ArNS name on arns.app, that name is not automatically synced to the ao-ArNS registry. Anyone can initiate a sync, which loads the data of an ArNS name from the aoComputer contract into the ao-ArNS registry:

    Send({ Target = "TyduW6spZTr3gkdIsdktduJhgtilaR_ex5JukK8gI9o", Tags = { Action = "Initiate-Record-Sync", Name = "<ArNS-name-to-sync>" }})
     

    Be sure to replace <ArNS-name-to-sync> with the correct ArNS name.

    Once your process is a controller, and you have loaded the ANT script, you can initiate an update to the ao-ArNS registry by running the following command:

    Send({ Target = ARNS_PROCESS_ID, Tags = { Action = "Initiate-Record-Update", Name = "<your-arns-name>", ProcessId = ao.id }})
     

    Make sure to change <your-arns-name to the ArNS name you are trying to update. When you load the arns.lua script, the variable ARNS_PROCESS_ID is set to TyduW6spZTr3gkdIsdktduJhgtilaR_ex5JukK8gI9o, which is the process id of the ao-ArNS registry.

    Once this is done, anyone will be able to resolve your ArNS name from inside ao and have easy access to your process Id.

    - + diff --git a/guides/experimental/ao-resolver/index.html b/guides/experimental/ao-resolver/index.html index 25a0a28c..c939a8e2 100644 --- a/guides/experimental/ao-resolver/index.html +++ b/guides/experimental/ao-resolver/index.html @@ -20,7 +20,7 @@ - + @@ -139,6 +139,6 @@

    does not have the fields "contract" or "process", so if you tried to get ARNS.data('ardrive') it would return nil (or undefined). Using

    ARNS.id('ardrive')
     

    instead will get the contractTxId value from the top level, and return that value. Just like with data, a process id is prioritized over a contract id.

    # Clear

    ARNS.clear will reset your NAMES table, emptying your locally saved cache of ARNS data.

    # Sync

    When someone purchases an ArNS name on arns.app, that name is not automatically synced to the ao-ArNS registry. Anyone can initiate a sync, which loads the data of an ArNS name from the smartweave contract into the ao-ArNS registry:

    Send({ Target = "TyduW6spZTr3gkdIsdktduJhgtilaR_ex5JukK8gI9o", Tags = { Action = "Initiate-Record-Sync", Name = "<ArNS-name-to-sync>" }})
     

    Be sure to replace <ArNS-name-to-sync> with the correct ArNS name.

    NOTE: Syncing data from the ArNS smartweave contract relies on the Orbit Oracle (opens new window). ao and Orbit are still in early development, and may not perform exactly as expected.

    - + diff --git a/guides/graphql/index.html b/guides/graphql/index.html index 798b0206..e6016750 100644 --- a/guides/graphql/index.html +++ b/guides/graphql/index.html @@ -20,7 +20,7 @@ - + @@ -120,6 +120,6 @@ console.error('Error:', error); });
    - + diff --git a/guides/perma-deploy/index.html b/guides/perma-deploy/index.html index f9432a72..f204d3dd 100644 --- a/guides/perma-deploy/index.html +++ b/guides/perma-deploy/index.html @@ -20,7 +20,7 @@ - + @@ -63,6 +63,6 @@ npm install npm run deploy

    The above tells github to perform these actions when you push new code to the branch main

    It then sets up a vps with nodejs v 20. When that is complete, it installs dependencies for your project using npm (You will need to add a step to install yarn if that is your preferred package manager), and runs your deploy script, which builds your static folder and then runs permaweb-deploy. It also loads your github secrets into environmental variables that can be used by your deploy script.

    # Deploying App

    With the above setup complete, the only thing you need to do to deploy a new version of a permasite app to Arweave is push the updated code to branch main on github. Everything else is fully automated.

    - + diff --git a/guides/sdk-release-notes.html b/guides/sdk-release-notes.html index 0f87b766..aafc2848 100644 --- a/guides/sdk-release-notes.html +++ b/guides/sdk-release-notes.html @@ -20,11 +20,11 @@ - +

    # ar.io SDK Changelog

    # Overview

    Welcome to the documentation page for the ar.io SDK release notes. Here, you will find detailed information about each version of the ar.io SDK, including the enhancements, bug fixes, and any other changes introduced in every release. This page serves as a comprehensive resource to keep you informed about the latest developments and updates in the ar.io SDK. For those interested in exploring the source code, each release's code is readily accessible at our GitHub repository: ar.io SDK change logs (opens new window). Stay updated with the continuous improvements and advancements in the ar.io SDK by referring to this page for all release-related information.

    # 2.2.0 (opens new window) (2024-08-30)

    # Bug Fixes

    # Features

    # 2.1.0 (opens new window) (2024-08-07)

    # Bug Fixes

    # Features

    # 2.0.2 (opens new window) (2024-07-12)

    # Bug Fixes

    # 2.0.1 (opens new window) (2024-07-11)

    # Bug Fixes

    # 2.0.0 (opens new window) (2024-07-11)

    # Bug Fixes

    # Features

    # BREAKING CHANGES

    • deps: removes all smartweave implementations using warp-sdk. The result is an only AO compatible ANT and IO network contracts. Some utilities are preserved due to their usefulness.
    • imports: modifies web named exports to provide esm and cjs exports instead of minified bundle. The web bundle was causing issues in bundled projects, and polyfills are no longer provided by default. Refer to the README (opens new window) for specifications on how to use the SDK for a web project.

    # 1.2.2 (opens new window) (2024-07-11)

    # Bug Fixes

    # 1.2.1 (opens new window) (2024-07-04)

    # Bug Fixes

    # 1.2.0 (opens new window) (2024-07-03)

    # Bug Fixes

    # Features

    # 1.1.1 (opens new window) (2024-06-06)

    # Bug Fixes

    # 1.1.0 (opens new window) (2024-06-03)

    # Bug Fixes

    # Features

    # 1.0.8 (opens new window) (2024-05-29)

    # Bug Fixes

    # 1.0.7 (opens new window) (2024-05-23)

    # Bug Fixes

    # 1.0.6 (opens new window) (2024-05-07)

    # Bug Fixes

    # 1.0.5 (opens new window) (2024-05-02)

    # Bug Fixes

    # 1.0.4 (opens new window) (2024-04-30)

    # Bug Fixes

    # 1.0.3 (opens new window) (2024-04-26)

    # Bug Fixes

    # 1.0.2 (opens new window) (2024-04-25)

    # Bug Fixes

    # 1.0.1 (opens new window) (2024-04-23)

    # Bug Fixes

    # 1.0.0 (2024-04-23)

    # Bug Fixes

    # Features

    - + diff --git a/images/bazar-create-profile1.png b/images/bazar-create-profile1.png index fb7967f0904dcf5f31577951d3ecc5b064c1d512..01a5f2d047c7afb87b760e6fcce70ba424243d64 100644 GIT binary patch literal 689922 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�oQW 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 z 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

    HTUXX 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

    qy|SKF*5;h(2R>!Di#!kfstou;%NS$BKNI`4 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

    79?<{MdgPTD!ITDg|;|$T?q*LVF9jj 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

    FlHN;%Sy|G}H^7BfYB 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 z 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

    S+(GH)xxHGf!lc~#6NhJj`xLSO= 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∓W_AWr)HBn6YiBv4( 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 diff --git a/index.html b/index.html index b6b4a9f4..bf686119 100644 --- a/index.html +++ b/index.html @@ -20,11 +20,11 @@ - + - + diff --git a/introduction/index.html b/introduction/index.html index e3d100e8..10e1d151 100644 --- a/introduction/index.html +++ b/introduction/index.html @@ -20,11 +20,11 @@ - +

    # Introduction

    # TL;DR

    The goal of AR.IO is to create a decentralized and incentivized gateway network aimed at attracting more gateways to the Arweave network therefore making the permaweb more accessible to all. At the core of AR.IO’s incentivization mechanism is the IO Token, a utility token used for joining the network, payments, and protocol incentives. The network features modular and composable gateway infrastructure in addition to the Arweave Name System (ArNS) – a system for assigning friendly domain names to permaweb data.

    # What is AR.IO

    AR.IO is a global network, protocol, and currency that enables the permaweb. It is the decentralized and incentivized gateway node network of the Arweave ecosystem. Comprised of operators, developers, and end users, this network leverages a utility token to proliferate access to the permaweb: the files, applications, web pages and data permanently stored on the Arweave decentralized storage network.

    The various nodes on the AR.IO Network, known as gateways, are the interface between users and the permaweb. Each gateway acts like a “Permaweb Service Provider” and supports multiple, value-added, services like reading, writing, querying, and indexing of Arweave data.

    The AR.IO token, referred to as IO or ɸ, is an aoComputer based token used for protocol incentives, gateway accountability, and payments for services like the Arweave Name System (ArNS). It will enable gateways on the AR.IO Network to operate under a low-trust model with the users of their service.

    # Why AR.IO ?

    Arweave (a Layer 1 blockchain network) offers scalable and permanent on-chain data storage in a sustainable manner. It does this by incentivizing miner nodes through a tokenomic endowment model which ensures data is globally stored and replicated for hundreds of years without the need for continual payment by its uploader.

    However, this Layer 1 protocol does not incorporate all the needs of permaweb applications like data indexing, querying, retrieval, and other vital services. Consequently, over the pasts few years, infrastructure services have been independently developed and deployed to meet the demands of the permaweb at scale. Users and apps have come to rely on these gateway utilities, but they are closed source, have complex codebases, and are expensive to operate.

    Arweave also does not offer any tokenomic incentives to offset the expenses associated with operating a gateway, which has led to the community’s reliance on a single centrally controlled gateway subsidized for the betterment of the network: arweave.net. While arweave.net currently caches and indexes the entire weave with a high quality of service, it is a single bottleneck for the whole ecosystem.

    AR.IO seeks to reduce the barriers of entry and attract more gateway operators to the permaweb with the goal of further enhancing its overall health, resiliency, and functionality through decentralized mechanisms that are as trustless as possible.

    The solution will be applied in two directions:

    1. By reducing gateway overhead costs with open source, efficient modular networked architecture.

    2. By creating an economic incentive layer with the IO Token.

    Our goal is to create a framework for a healthy and sustainable decentralized gateway network.

    - + diff --git a/labs/index.html b/labs/index.html index 3890b0ca..6459fd40 100644 --- a/labs/index.html +++ b/labs/index.html @@ -20,11 +20,11 @@ - +

    # AR.IO Labs

    # What is AR.IO Labs?

    AR.IO Labs serves as the for-profit arm of the AR.IO ecosystem, playing a crucial role in driving innovation, commercial development, and entrepreneurial initiatives. While the AR.IO Foundation focuses on the non-profit aspects and sustenance of the AR.IO Network, AR.IO Labs is geared towards harnessing the network's potential to create profitable ventures and cutting-edge products.

    Key focuses of AR.IO Labs include:

    • Innovation and research

    • Commercial development

    • Incubation of startups

    • Collaboration with external entities

    • Token and asset management

    • Revenue generation for ecosystem sustainability

    • Adoption and marketing

    • Resilience and growth

    As the for-profit arm of the AR.IO ecosystem, AR.IO Labs works in tandem with the AR.IO Foundation to create a sustainable and flourishing decentralized network that thrives both commercially and altruistically, fostering a balanced and impactful presence within the blockchain and decentralized technology landscape.

    - + diff --git a/manifests/index.html b/manifests/index.html index 0355744c..cdcf24a0 100644 --- a/manifests/index.html +++ b/manifests/index.html @@ -20,7 +20,7 @@ - + @@ -105,6 +105,6 @@ } }

    The paths attribute is an object that defines the url paths that a manifest can resolve to. If a user navigates to manifest/index.html the resolver will look for index.html as a key in the paths object and return the corresponding id. (cG7Hdi_iTQPoEYgQJFqJ8NMpN4KoZ-vH_j7pG4iP7NI)

    - + diff --git a/sdk/index.html b/sdk/index.html index f16c8e7a..f80da905 100644 --- a/sdk/index.html +++ b/sdk/index.html @@ -20,7 +20,7 @@ - + @@ -653,6 +653,6 @@ hasMore = page.hasMore; }

    # Developers

    # Requirements

    • node >= v18.0.0
    • npm or yarn
    • docker (recommended for testing)

    # Setup & Build

    • nvm use - use the correct node version
    • yarn install - installs dependencies
    • yarn build - builds web/node/bundled outputs

    # Testing

    • yarn test:integration - runs integration tests against a local arns-service (opens new window)
    • yarn example:web - opens up the example web page
    • yarn example:cjs - runs example CJS node script
    • yarn example:esm - runs example ESM node script

    # Linting & Formatting

    • yarn lint:check - checks for linting errors
    • yarn lint:fix - fixes linting errors
    • yarn format:check - checks for formatting errors
    • yarn format:fix - fixes formatting errors

    # Architecture

    • Code to interfaces.
    • Prefer type safety over runtime safety.
    • Prefer composition over inheritance.
    • Prefer integration tests over unit tests.
    - + diff --git a/token/index.html b/token/index.html index 7290a95f..e310d342 100644 --- a/token/index.html +++ b/token/index.html @@ -20,11 +20,11 @@ - +

    # The IO Token

    NOTE: The IO Token and its associated functions are still in development and have not yet been released.

    # Overview

    IO is the multifunction aoComputer based token that powers The AR.IO Network and its suite of permaweb applications. The IO Token (ɸ) has many uses, including:

    • Protocol incentives,

    • Staking by gateways,

    • Payments for services like the Arweave Name System (ArNS),

    • Gateway delegated staking

    The token acts as a permissionless and censorship resistant medium of common value for the network.

    - + diff --git a/troubleshooting-observer/index.html b/troubleshooting-observer/index.html index ddb1a736..bf63581c 100644 --- a/troubleshooting-observer/index.html +++ b/troubleshooting-observer/index.html @@ -20,7 +20,7 @@ - + @@ -30,6 +30,6 @@ dd2e0b64b0b4 redis:7 "docker-entrypoint.s…" 10 days ago Up 2 days 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp ar-io-node_redis_1 ed98aba1c4f6 ghcr.io/ar-io/ar-io-observer:6449bcb6dda778fef68a94bd29343190524439db "/nodejs/bin/node ./…" 10 days ago Up 2 days (healthy) 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp ar-io-node_observer_1

    If the line for observer does not say "up", then your observer is not running. You should restart your gateway, and then watch your observer logs to get a better idea of why your observer stopped:

    sudo docker-compose down

    sudo docker-compose up -d

    sudo docker-compose logs -f observer

    # Observer wallet has no AR

    #

    Your Observer Wallet does not have any AR tokens.

    Your observer wallet needs to be able to submit reports to the Arweave blockchain. To do this, it needs to have a small amount of AR tokens in order to pay for the submission. ar.io recommends depositing 1 AR token into your observer wallet to ensure that you remain funded throughout the entire testnet.

    # Observer wallet ... does not match the 'observerWallet' set on the gateway ...

    #

    The observer wallet set locally on your gateway does not match the observer wallet for your gateway in the ar.io network.

    Check to make sure that you have OBSERVER_WALLET set in your .env file, and that the keyfile for your observer wallet is properly provided in the wallets directory in your gateway.

    You will need to restart your gateway if you make any changes to the .env file or your observer wallet keyfile.

    Then check to make sure that the value for observerWallet on your gateway in the testnet contract (opens new window) matches that.

    This video (opens new window) shows exactly what should be done to correct it if it does not.

    # Uncertain - confirm your OBSERVER_WALLET is set in the .env file and corresponding wallet is located in wallets/< address >.json...

    #

    The cause for the error could not be reliably determined.

    "Uncertain" is the default value returned when evaluating a failed observer. It means that none of the above error messages perfectly matched the problems with your gateway.

    You should first ensure that your observer wallet is set correctly locally (opens new window), and then check your observer logs for any additional error messages.

    sudo docker-compose logs -f --tail=50 observer

    - + diff --git a/troubleshooting/index.html b/troubleshooting/index.html index 52bea655..95321bf9 100644 --- a/troubleshooting/index.html +++ b/troubleshooting/index.html @@ -20,7 +20,7 @@ - + @@ -41,6 +41,6 @@

    Certbot SSL certificates expire after 90 days, and you will need to rerun this command to renew every time. If you provide an email address, you will receive an email letting you know when it is time to renew.


    # I am having Trouble Getting my Gateway Set up


    #

    I set my gateway up, but when I go to my domain I get a 404/Nginx error

    If you navigate to your domain and see a 404 error from Nginx (the reverse proxy server used in the setup guide) it means that your domain is correctly pointed at the machine running your gateway, but you have not properly configured your Nginx settings (or your gateway is not running).

    The Set up Networking section of the setup guide has detailed instructions on configuring your Nginx server. If all else fails, try restarting Nginx, that usually clears any issues with the server clinging to old configurations.

    sudo service nginx restart
     

    #

    When I visit my domain I see a 502 error from Nginx

    A 502 error from Nginx means that Nginx is working correctly, but it is receiving an error from your gateway when it tries to forward traffic.

    #

    I am having trouble generating my SSL certificates

    When using the manual certbot command provided in the setup guide:

    sudo certbot certonly --manual --preferred-challenges dns --email <your-email-address> -d <your-domain>.com -d '*.<your-domain>.com'
     

    You need to be sure that you are waiting after creating your TXT records for them to completely propagate. You can check propagation using a tool like dnschecker.org (opens new window).

    If you continue to have issues, you can check the official certbot instructions guide (opens new window).


    If you do not see your issue listed here, or if you were not able to solve your problem with the above information, feel free to reach out in the ar.io discord.

    # Quick Lookup

    Below is a quick summary of what you should check when troubleshooting your gateway. Find more detailed information in the sections above.

    Issue What to Check
    My release number is wrong Pull the latest github updates and make sure you are on the main branch
    Gateway appears offline on Viewblock or ar://gateways Probably fine, but verify that your gateway is still running.
    '/ar-io/observer/reports/current' just says "report pending" Normal behavior, wait for the report to complete.
    Observer error "Cannot read properties of undefined" Normal behavior, Observer is checking for data not implemented yet.
    Observing my gateway shows failures Check AR_IO_WALLET and ARNS_ROOT_HOST settings.
    Updated .env settings not reflected on gateway Rebuild your gateway after editing .env file.
    Out of disk space error Check for inode exhaustion and delete files if necessary.
    Can't load ArNS names Check ARNS_ROOT_HOST setting in .env file, and DNS records.
    "Your connection is not private" error Generate or renew SSL certificates.
    404/Nginx error when accessing domain Check Nginx settings and restart Nginx if necessary.
    502 error from Nginx Check for errors in your gateway.
    Trouble generating SSL certificates Ensure TXT records have propagated and follow certbot instructions.
    - + diff --git a/wayfinder/index.html b/wayfinder/index.html index 25b15e76..5fa98827 100644 --- a/wayfinder/index.html +++ b/wayfinder/index.html @@ -20,13 +20,13 @@ - +

    # Wayfinder Protocol

    # Overview

    The Wayfinder protocol is a URI scheme (opens new window) designed to translate requests for Arweave content into https:// requests. Essentially, Wayfinder allows for transforming traditional Arweave URLs like https://arweave.net/long-txid into more concise and user-friendly forms such as ar://txid or ar://arns-name. When combined with the AR.IO WayFinder browser extension (opens new window), the request can be directed to any number of functional AR.IO Gateways to serve the content.

    An early technical breakdown of Wayfinder, formerly "ARCSS", created by Arweave community member DMac, can be found here (opens new window).

    # Browser Integration

    The Wayfinder Protocol is currently facilitated via the WayFinder App or internal application integration. The intention is to lead popular web browsers like Chrome and Brave towards a direct integration of the Wayfinder Protocol, similar to recent integrations of the ipfs:// protocol. Such integration would remove the need for a client-side extension and boost developers' confidence in embedding Wayfinder Protocol URLs in their websites.

    # Internal Application Integration

    Certain websites or apps may want to resolve Arweave Transaction ID's (TxId) internally. In these scenarios, they can process the Wayfinder Protocol internally without depending on browser support or the WayFinder App. A prime example is opensea.io (opens new window). Opensea, an NFT marketplace, frequently imports NFT metadata from external sources. If metadata employs the Wayfinder Protocol, Opensea internally resolves these, presenting content without redirecting users through an https:// link.

    There are two main approaches to resolving Wayfinder Protocol URLs:

    1. Convert Wayfinder into a request directed at a predefined Arweave gateway.
    2. Retrieve a list of active AR.IO Gateways from the GAR by reading the contract state, or other available resources, and then fetch content from a gateway on the list.

    Each strategy has its benefits and challenges, necessitating careful evaluation based on specific use cases.

    Using the Wayfinder Protocol offers several advantages over hardcoded links to a specific gateway:

    1. Flexibility: Wayfinder links can be routed through any available AR.IO Gateway, ensuring content remains accessible even if a specific gateway is down or congested.
    2. Decentralization: By not being tied to a single gateway, the Wayfinder Protocol embodies the decentralized spirit of the web, reducing potential censorship points.
    3. Ease of Maintenance: Developers and content creators don't need to modify links if a gateway changes its URL or becomes unavailable. The WayFinder extension handles routing to an active gateway.
    4. Consistency: Users always receive the same content, regardless of the gateway used, ensuring a consistent user experience.

    # Use Cases

    # Decentralized Web Hosting with Flexible Access

    With Wayfinder, not only can websites be hosted on the Arweave network, but their accessibility is also enhanced. By using the Wayfinder Protocol, web developers can ensure that if a specific AR.IO Gateway is down, the content can still be accessed through another gateway, offering a more reliable and resilient user experience.

    # Digital Archives and Preservation with Enhanced Sharing

    Digitally archiving public domain works, especially in light of events like "banned books week" (opens new window), becomes more efficient with Wayfinder. Historical institutions or enthusiasts can easily share specific Wayfinder links to documents or media. Unlike hardcoded links which might break if a specific gateway goes offline, Wayfinder ensures that the content remains consistently accessible.

    # Media Sharing Platforms with Consistent Content Delivery

    For platforms hosting user-generated content, the Wayfinder Protocol provides not just decentralized hosting but also a guarantee of content delivery. Even if a content piece becomes viral and one gateway gets congested, Wayfinder ensures that users can still access the content through another gateway, providing a seamless experience.

    # Decentralized Applications (DApps) with Reliable Front-End Accessibility

    DApps, while benefiting from Arweave's permanent hosting, can further ensure their front-end remains consistently accessible to users by using Wayfinder. If a DApp's front-end is accessed frequently, causing strain on one gateway, Wayfinder can help ensure the load is distributed, and the DApp remains online and functional.

    # How it Works

    # Transaction ID

    To access content tied to an Arweave Transaction ID (TxId), simply append the TxId to ar://:

    ar://qI19W6spw-kzOGl4qUMNp2gwFH2EBfDXOFsjkcNyK9A
     

    Inputting this into a WayFinder-equipped browser will route your request through the right AR.IO Gateway, translating it as per your Routing Method settings.

    # ArNS

    Fetching content via an Arweave Name System (ArNS) name is straightforward. Attach the ArNS name to ar://:

    ar://good-morning
     

    The Wayfinder protocol, along with the WayFinder App, discerns between TxIds and ArNS names. Once the suitable https:// request is formulated, the chosen gateway translates the ArNS name based on the ArNS aoComputer contract.

    # Wayfinder App

    The AR.IO WayFinder App (opens new window) is a browser extension designed to facilitate the resolving of ar:// urls.

    # v0.0.10

    As of v0.0.10, Wayfinder supports the resolution of TXT records to Arweave content on top level domains. This innovative feature leverages DNS TXT records to associate Arweave transaction IDs with human-readable domain names, facilitating intuitive and memorable access to permaweb content. By simply entering an ar:// URL with a domain name, the Wayfinder App resolves the corresponding Arweave transaction ID through DNS TXT records, redirecting users directly to the content hosted on the Arweave network.

    Setup: Owners of a domain can set a TXT record for that domain following the format ARTX <Arweave TXID>.

    Wayfinder Redirection: With a TXT record set properly, whenever a user (who has Wayfinder installed) enters an ar:// URL containing a domain name (e.g., ar://example.com), the Wayfinder App performs a DNS lookup for that TXT record in order to redirect to the Arweave content. The lookup is completed through a secure DNS-over-HTTPS query to ensure privacy and integrity.

    Dynamic Content Resolution: After retrieving the TXT record, the Wayfinder App extracts that Arweave transaction ID and dynamically redirects the user to the content on the permaweb. This process is transparent to the user, providing a seamless experience as if accessing a traditional website.

    # Key Features

    • Gasless: TXT records can be set without any onchain transactions that would require gas fees.
    • Easy Integration: Domain owners can easily link their permaweb content to their domains, making it accessible through a simple ar:// URL.
    • Dyncamic Content Access: Content links can be updated in real-time through DNS TXT records, without requiring any changes to the ar:// URL itself.
    • Enhanced User Experience: Offers users a familiar and easy-to-remember way to access permaweb content, leveraging standard web domain names.
    • Security and Privacy: Secure DNS-over-HTTPS queries for DNS lookups protect user privacy and enhances security.

    # Use Cases

    • Branded Content Access: Companies and individuals can brand their permaweb content, making it accessible through their domain, enhancing brand visibility and user trust.
    • Dynamic Content Updates: Domain owners can easily update what Permaweb content their AR:// URL resolves to, which is ideal for frequently updated resources like documents, blogs, and application interfaces.
    • Educational and Informational Resources: Educational institutions and information providers can make their resources permanently available on the permaweb, accessible through simple, memorable URLs.

    This feature marks a significant advancement in making decentralized content more accessible and user-friendly, bridging the gap between traditional internet usability and the permaweb’s permanence and censorship-resistant nature.

    - +