diff --git a/stash/README.md b/stash/README.md
index c50adf34..a978afb7 100644
--- a/stash/README.md
+++ b/stash/README.md
@@ -1,8 +1,84 @@
-# stash service
+# Stash
-## 1. Prerequisites
+Stash is a service that serves some configurations and also caches some blockchain node information.
-1. Install and configure SOPS to access secrets
+## API
+
+
+### Hosts
+| Environment | URL |
+|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------|
+| [ROLLUP-DEV](https://mangata-stash-rollup-dev-dot-direct-pixel-353917.oa.r.appspot.com) | `https://mangata-stash-rollup-dev-dot-direct-pixel-353917.oa.r.appspot.com` |
+| [ROLLUP-TESTNET](https://mangata-stash-rollup-testnet-dot-direct-pixel-353917.oa.r.appspot.com) | `https://mangata-stash-rollup-testnet-dot-direct-pixel-353917.oa.r.appspot.com` |
+
+### API documentation
+To access the public API, refer to the ```[HOST]/doc``` endpoint, where you'll find comprehensive documentation for our services.
+This resource provides detailed information about our available API functionalities and how to interact with them.
+
+
+### Postman collections
+The `api/` can be imported into Postman to use the API cals.
+Setup the `$host` env to rollup-dev & rollup-testnet, or replace it with actual URL in the API address bar.
+Collection contains scripts to visualize the response data in a graph.
+Script is defined in the `Tests` tab of the request section, and graph is in the `Body -> Visualize` tab in the response section.
+
+Each API has a limit of 50K entries to return.
+
+## Local quick start
+
+1. Rename `.env.local` to `.env` and add missing envs (if any)
+2. Install all the dependencies `yarn`
+3. Start local Redis `docker run --name stash-redis-stack -p 6379:6379 -d redis/redis-stack-server`
+4. Make a copy of `.env.local` and name it `.env`. This file will be ignored from git and you can set your own values.
+5. Run the app in debug mode with watch option `yarn start-local`
+
+## Documentation
+
+### Used tech
+
+- `Node.js` & `Typescript`
+- `Express` - Node.js web framework.
+
+### Tests
+
+Tests have their own runtime docker container. Currently, most of the use cases are covered using integration tests in `integration.test.ts`
+
+We use a combination of `supertests` & `testcontainers` libraries to achieve smooth and unified integration tests running either on local or CI environment.
+
+## Storage
+Google Memorystore (Redis with RDB)
+
+## XCM Metadata Network Service
+Data in this service are managed by
+
+### Modification of XCM values
+
+1. Setup `gcloud` CLI tool (make sure you setup correct project ID - `gcloud config set project direct-pixel-353917` )
+2. Install Redis client that suits you
+3. Port forward into our cloud instance `gcloud compute ssh port-forward-vm --zone=europe-west6-a -- -N -L 6379:10.96.14.131:6379` (dev Redis)
+4. You can test your connection with `redis-cli ping`
+5. You should be able to connect to the Redis instance of your choice thru localhost setup: `127.0.0.1` and NO password
+6. You can now modify the values of XCM network configurations.
+
+## Configurations
+
+### Port forwards instance
+
+`port-forward-vm europe-west6-a f1-micro 10.172.0.2 34.65.196.67`
+
+### Port forward command
+
+`gcloud compute ssh port-forward-vm --zone=europe-west6-a -- -N -L 6379:REPLACE_WITH_REDIS_INERNAL_IP:6379`
+
+### ROLLUP-DEV
+
+`10.15.245.67`
+
+### ROLLUP-TESTNET
+
+`10.37.94.163`
+
+### Access secrets via SOPS
```bash
# 1. Install sops from here https://github.com/getsops/sops
diff --git a/stash/api/Tracing collection.postman_collection.json b/stash/api/Tracing collection.postman_collection.json
new file mode 100644
index 00000000..1ae8c8bd
--- /dev/null
+++ b/stash/api/Tracing collection.postman_collection.json
@@ -0,0 +1,140 @@
+{
+ "info": {
+ "_postman_id": "d5a365ed-8d28-4b31-ae8e-03607c61bfb3",
+ "name": "Tracing collection",
+ "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
+ "_exporter_id": "36395820",
+ "_collection_link": "https://gasp77.postman.co/workspace/GASP-Workspace~0284ceb5-a521-4b91-b1b5-aeb16ce16070/collection/36395820-d5a365ed-8d28-4b31-ae8e-03607c61bfb3?action=share&source=collection_link&creator=36395820"
+ },
+ "item": [
+ {
+ "name": "Start tracing",
+ "event": [
+ {
+ "listen": "test",
+ "script": {
+ "exec": [
+ "var jsonData = pm.response.json();",
+ "pm.environment.set(\"entityId\", jsonData.transaction.entityId);",
+ "pm.environment.set(\"address\", jsonData.transaction.address);",
+ "pm.environment.set(\"txHash\", jsonData.transaction.txHash);"
+ ],
+ "type": "text/javascript",
+ "packages": {}
+ }
+ }
+ ],
+ "request": {
+ "method": "POST",
+ "header": [],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"txHash\": \"0x101\",\n \"address\": \"0x102\",\n \"type\": \"deposit\", //deposit or withdrawal\n \"chain\": \"Arbitrum\", //send Ethereum or Arbitrum\n \"amount\": \"400000000000000000\",\n \"asset_chainId\": \"0x106\",\n \"asset_address\": \"0x107\"\n\n}",
+ "options": {
+ "raw": {
+ "language": "json"
+ }
+ }
+ },
+ "url": {
+ "raw": "localhost:8080/tracing/tx/start",
+ "host": [
+ "localhost"
+ ],
+ "port": "8080",
+ "path": [
+ "tracing",
+ "tx",
+ "start"
+ ]
+ },
+ "description": "Tracing collection"
+ },
+ "response": []
+ },
+ {
+ "name": "Get status by hash or entityId",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "localhost:8080/tracing/tx/{{entityId}}",
+ "host": [
+ "localhost"
+ ],
+ "port": "8080",
+ "path": [
+ "tracing",
+ "tx",
+ "{{entityId}}"
+ ]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "Get all for address",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "localhost:8080/tracing/tx/listByAddress/{{address}}",
+ "host": [
+ "localhost"
+ ],
+ "port": "8080",
+ "path": [
+ "tracing",
+ "tx",
+ "listByAddress",
+ "{{address}}"
+ ]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "Get transactions by address and status",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "localhost:8080/tracing/tx/listByAddress/{{address}}/{{status}}",
+ "host": [
+ "localhost"
+ ],
+ "port": "8080",
+ "path": [
+ "tracing",
+ "tx",
+ "listByAddress",
+ "{{address}}",
+ "{{status}}"
+ ]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "Get transaction by entityId",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "localhost:8080/tracing/tx/findByEntityId/{{entityId}}",
+ "host": [
+ "localhost"
+ ],
+ "port": "8080",
+ "path": [
+ "tracing",
+ "tx",
+ "findByEntityId",
+ "{{entityId}}"
+ ]
+ }
+ },
+ "response": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/stash/api/Tracing environment.postman_environment.json b/stash/api/Tracing environment.postman_environment.json
new file mode 100644
index 00000000..e4ed3a62
--- /dev/null
+++ b/stash/api/Tracing environment.postman_environment.json
@@ -0,0 +1,33 @@
+{
+ "id": "72cf64a3-457b-4759-a7de-6da057518569",
+ "name": "Tracing environment",
+ "values": [
+ {
+ "key": "entityId",
+ "value": "",
+ "type": "default",
+ "enabled": true
+ },
+ {
+ "key": "txHash",
+ "value": "",
+ "type": "default",
+ "enabled": true
+ },
+ {
+ "key": "address",
+ "value": "",
+ "type": "default",
+ "enabled": true
+ },
+ {
+ "key": "status",
+ "value": "L1_INITIATED",
+ "type": "default",
+ "enabled": true
+ }
+ ],
+ "_postman_variable_scope": "environment",
+ "_postman_exported_at": "2024-09-09T12:32:49.761Z",
+ "_postman_exported_using": "Postman/11.11.1"
+}
\ No newline at end of file
diff --git a/stash/api/stash.postman_collection.json b/stash/api/stash.postman_collection.json
new file mode 100644
index 00000000..77638dbe
--- /dev/null
+++ b/stash/api/stash.postman_collection.json
@@ -0,0 +1,567 @@
+{
+ "info": {
+ "_postman_id": "ff1c3460-44ac-4685-91cd-ceabeeb75e8d",
+ "name": "stash",
+ "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
+ "_exporter_id": "3658946"
+ },
+ "item": [
+ {
+ "name": "price history",
+ "event": [
+ {
+ "listen": "test",
+ "script": {
+ "exec": [
+ "const res = pm.response.json();",
+ "const vizData = {",
+ " labels: _.map(res.prices, (p) => p[0]),",
+ " data: _.map(res.prices, (p) => p[1]),",
+ "};",
+ "",
+ "var template = `",
+ "",
+ "",
+ "",
+ " ",
+ "",
+ "`;",
+ "",
+ "pm.visualizer.set(template, vizData);"
+ ],
+ "type": "text/javascript"
+ }
+ }
+ ],
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{host}}/price-history/MGX?interval=day&days=300",
+ "host": [
+ "{{host}}"
+ ],
+ "path": [
+ "price-history",
+ "MGX"
+ ],
+ "query": [
+ {
+ "key": "interval",
+ "value": "day"
+ },
+ {
+ "key": "days",
+ "value": "300"
+ }
+ ]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "volume history",
+ "event": [
+ {
+ "listen": "test",
+ "script": {
+ "exec": [
+ "const res = pm.response.json();",
+ "const vizData = {",
+ " labels: _.map(res.volumes, (p) => p[0]),",
+ " data: _.map(res.volumes, (p) => p[1]),",
+ "};",
+ "",
+ "var template = `",
+ "",
+ "",
+ "",
+ " ",
+ "",
+ "`;",
+ "",
+ "pm.visualizer.set(template, vizData);"
+ ],
+ "type": "text/javascript"
+ }
+ }
+ ],
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{host}}/volume-history/MGX?interval=day&days=100",
+ "host": [
+ "{{host}}"
+ ],
+ "path": [
+ "volume-history",
+ "MGX"
+ ],
+ "query": [
+ {
+ "key": "interval",
+ "value": "day"
+ },
+ {
+ "key": "days",
+ "value": "100"
+ }
+ ]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "volume history pool",
+ "event": [
+ {
+ "listen": "test",
+ "script": {
+ "exec": [
+ "const res = pm.response.json();",
+ "const vizData = {",
+ " labels: _.map(res.volumes, (p) => p[0]),",
+ " data: _.map(res.volumes, (p) => p[1]),",
+ "};",
+ "",
+ "var template = `",
+ "",
+ "",
+ "",
+ " ",
+ "",
+ "`;",
+ "",
+ "pm.visualizer.set(template, vizData);"
+ ],
+ "type": "text/javascript"
+ }
+ }
+ ],
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{host}}/volume-history/pools/ALL?days=100&interval=day",
+ "host": [
+ "{{host}}"
+ ],
+ "path": [
+ "volume-history",
+ "pools",
+ "ALL"
+ ],
+ "query": [
+ {
+ "key": "days",
+ "value": "100"
+ },
+ {
+ "key": "interval",
+ "value": "day"
+ }
+ ]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "TVL history",
+ "event": [
+ {
+ "listen": "test",
+ "script": {
+ "exec": [
+ "const res = pm.response.json();",
+ "const vizData = {",
+ " labels: _.map(res.volumes, (p) => p[0]),",
+ " data: _.map(res.volumes, (p) => p[1]),",
+ "};",
+ "",
+ "var template = `",
+ "",
+ "",
+ "",
+ " ",
+ "",
+ "`;",
+ "",
+ "pm.visualizer.set(template, vizData);"
+ ],
+ "type": "text/javascript"
+ }
+ }
+ ],
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{host}}/tvl-history/MGX?interval=day&days=1000",
+ "host": [
+ "{{host}}"
+ ],
+ "path": [
+ "tvl-history",
+ "MGX"
+ ],
+ "query": [
+ {
+ "key": "interval",
+ "value": "day"
+ },
+ {
+ "key": "days",
+ "value": "1000"
+ }
+ ]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "TVL history pool",
+ "event": [
+ {
+ "listen": "test",
+ "script": {
+ "exec": [
+ "const res = pm.response.json();",
+ "const vizData = {",
+ " labels: _.map(res.volumes, (p) => p[0]),",
+ " data: _.map(res.volumes, (p) => p[1]),",
+ "};",
+ "",
+ "var template = `",
+ "",
+ "",
+ "",
+ " ",
+ "",
+ "`;",
+ "",
+ "pm.visualizer.set(template, vizData);"
+ ],
+ "type": "text/javascript"
+ }
+ }
+ ],
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{host}}/tvl-history/pools/ALL?interval=15m&days=10",
+ "host": [
+ "{{host}}"
+ ],
+ "path": [
+ "tvl-history",
+ "pools",
+ "ALL"
+ ],
+ "query": [
+ {
+ "key": "interval",
+ "value": "15m"
+ },
+ {
+ "key": "days",
+ "value": "10"
+ }
+ ]
+ }
+ },
+ "response": []
+ }
+ ]
+}
diff --git a/stash/app-rollup-dev.yaml b/stash/app-rollup-dev.yaml
index 55bf0f74..9f140bcc 100644
--- a/stash/app-rollup-dev.yaml
+++ b/stash/app-rollup-dev.yaml
@@ -22,6 +22,9 @@ env_variables:
ORIGIN_ACCOUNT_PRIVATE_KEY: $ORIGIN_ACCOUNT_PRIVATE_KEY
HOLESKY_ADDRESS: $HOLESKY_ADDRESS
GASPV2_TOKEN_ADDRESS: $GASPV2_TOKEN_ADDRESS
+ CONTRACT_ADDRESS: $CONTRACT_ADDRESS
+ ETH_CHAIN_URL: $ETH_CHAIN_URL
+ ARBITRUM_SEPOLIA_CHAIN_URL: $ARBITRUM_SEPOLIA_CHAIN_URL
manual_scaling:
instances: 1
diff --git a/stash/app-rollup-testnet.yaml b/stash/app-rollup-testnet.yaml
index 740052c3..46225374 100644
--- a/stash/app-rollup-testnet.yaml
+++ b/stash/app-rollup-testnet.yaml
@@ -22,6 +22,9 @@ env_variables:
ORIGIN_ACCOUNT_PRIVATE_KEY: $ORIGIN_ACCOUNT_PRIVATE_KEY
HOLESKY_ADDRESS: $HOLESKY_ADDRESS
GASPV2_TOKEN_ADDRESS: $GASPV2_TOKEN_ADDRESS
+ CONTRACT_ADDRESS: $CONTRACT_ADDRESS
+ ETH_CHAIN_URL: $ETH_CHAIN_URL
+ ARBITRUM_SEPOLIA_CHAIN_URL: $ARBITRUM_SEPOLIA_CHAIN_URL
manual_scaling:
instances: 1
diff --git a/stash/package.json b/stash/package.json
index d1b0b0d6..b463fdda 100644
--- a/stash/package.json
+++ b/stash/package.json
@@ -52,15 +52,17 @@
"decimal.js-light": "^2.5.1",
"dotenv": "16.0.3",
"errorhandler": "1.5.1",
- "express": "4.18.1",
+ "express": "^4.19.2",
"express-validator": "6.14.2",
- "gasp-sdk": "0.0.2-eth-rollup-develop.14",
- "gasp-types": "0.0.2-eth-rollup-develop.14",
+ "gasp-sdk": "0.0.2-eth-rollup-develop.29",
+ "gasp-types": "0.0.2-eth-rollup-develop.29",
"ioredis": "^5.3.0",
"joi": "^17.10.1",
"lodash": "^4.17.21",
"moment": "^2.29.4",
"node-fetch": "^3.2.10",
+ "redis": "^4.7.0",
+ "redis-om": "^0.4.6",
"redlock": "^5.0.0-beta.2",
"rimraf": "^3.0.2",
"swagger-ui-express": "^5.0.0",
@@ -98,7 +100,7 @@
"eslint-plugin-sort-imports-es6-autofix": "^0.6.0",
"husky": "^8.0.3",
"lint-staged": "^13.2.0",
- "nodemon": "^3.0.1",
+ "nodemon": "^3.1.4",
"prettier": "^2.8.6",
"pretty-quick": "^3.1.3",
"sass": "1.55.0",
diff --git a/stash/rollup-dev.enc.env b/stash/rollup-dev.enc.env
index f76e8675..fadf5a55 100644
--- a/stash/rollup-dev.enc.env
+++ b/stash/rollup-dev.enc.env
@@ -5,10 +5,13 @@ CAPTCHA_SECRET=ENC[AES256_GCM,data:B+Vj6ITZZzMm8u1j+NukPg8rsGOAJ05h9CkYQa8RBkVCP
ORIGIN_ACCOUNT_PRIVATE_KEY=ENC[AES256_GCM,data:oXD0jvg8K5AcD56AWIDNHxhIya8rGYpunIzb4erhNBj1uspkDFVtgdiyNY51ggRLfSMHllMxurgUxl0Qhb/jtg==,iv:7dMjx4TKPkA+BdxLayMsfxUhdfKiQFHANItySjkuXb8=,tag:BWhPmumBLsouSjJiQP9Y5Q==,type:str]
HOLESKY_ADDRESS=ENC[AES256_GCM,data:JLmhFCAsZvHd5cRtqKnfMaNM6rkp4nzXTNDZbX5UX3OElhGpVsHPGSey1oBBjSz0lyUsNUE+tmoPZQ==,iv:09aSzckYJnGSQdbVtcue7fwYlBw0KK+nxD1jaQAH8+U=,tag:LH8sN0NaRVdmhB0Xg6+q2w==,type:str]
GASPV2_TOKEN_ADDRESS=ENC[AES256_GCM,data:q5kEPYA363MimGSJ7HmNL7UIrB13PV6oyRWOxCeVxXts/U0W4oS5wQ==,iv:qcbC/W9GwiGePldYf5Q3xjn2zfi66KlvbzD+ZOVTPbY=,tag:pVqKWN3T+K0KtkFtkY/z6g==,type:str]
+CONTRACT_ADDRESS=ENC[AES256_GCM,data:6elHnXnEtxT0duQpEjSwSkR/aKOlHh5C16nyPyWBDP8iyCFO0fhjMA==,iv:aE5/iOxhdvNEwLOyvBhOaQ1drjbHEtw+pcq6hyOzNzI=,tag:+UanbBWUYtFGcrAhGXzRgQ==,type:str]
+ETH_CHAIN_URL=ENC[AES256_GCM,data:UUqnXHiy85irgllbaahnjEpgad1hpxMzNDwypMngZwMonAaVPrk=,iv:fu+UqdqFKxxPCeVfe0X+6APpxApgz5Bk96T7TNOq248=,tag:C0b9/ROqxxXXwktEIZUS5w==,type:str]
+ARBITRUM_SEPOLIA_CHAIN_URL=ENC[AES256_GCM,data:RIBtFzUdIDp6XWSIG/QmR0YsjngXFp8bcePdpicY9Jfo6TJvPnI=,iv:E5BmtNKCDs0ARdpldTzvYxNSFWpTndmAT+miFsH+aog=,tag:SYRgmoaLbpV18aRo9k7kOw==,type:str]
sops_gcp_kms__list_0__map_created_at=2024-07-05T14:20:15Z
sops_gcp_kms__list_0__map_enc=CiQAN1RhzZJiBv/qkgDxpi43NbC2GZ7BUYjrbSKp4VznjXXhV1kSSQB0MkpZpK7u6z/sNv8eV8lrdWWntphDGitq41eshZB0H5udxoaOYbRts4Wdm5hIW1OjW75BWu56jxuq7jjzf97S6c7ZYm20bBY=
sops_gcp_kms__list_0__map_resource_id=projects/direct-pixel-353917/locations/global/keyRings/sops/cryptoKeys/sops-key
-sops_lastmodified=2024-08-06T07:28:01Z
-sops_mac=ENC[AES256_GCM,data:ZHmMqKkn3TBihGVQQ0kDbQHTtoc2/RIejhWxYFShAUMj65+0DH2N5HFotOu8X+n48pymUrVURJXIjxd63oda6q23jg/TXYezpP1/q1j64ZEwSG18prfzC0+sUIsMegMm0FIVd3sznAfb91Iwa4Z9le/10XMr8Pqva1sYxMMuVpQ=,iv:rDSXnTm7COaN3nojpEwMzqHIequxxpQwq7it3f5mVLM=,tag:3XfEKhKqTnDaf9hOj87EiA==,type:str]
+sops_lastmodified=2024-09-09T11:17:41Z
+sops_mac=ENC[AES256_GCM,data:Z4deXOYvRhTMdA/nPh2Ir6Iqe4pzh6ZWGBtVIZBJs1cV/YsTrApf6YKo0EHq/Rj6pBCWsjWV4B1ai6eqnQSmAkri5kfa1FsRTO5+8d/dHuKZOmqAa3GrPXvYsHa14Xt5f+GHTb/qkZo79MZjm4SZCATYoyq+4wP9G2yFxg2lbzQ=,iv:S03xBMa7Ih3GJQJ7PJizFMRjmFT8Njeuui0nuJ1mc+M=,tag:tft5GaxROwDmN0sj+EaKTQ==,type:str]
sops_unencrypted_suffix=_unencrypted
sops_version=3.9.0
diff --git a/stash/rollup-testnet.enc.env b/stash/rollup-testnet.enc.env
index 42b79cd4..efef65a7 100644
--- a/stash/rollup-testnet.enc.env
+++ b/stash/rollup-testnet.enc.env
@@ -5,10 +5,13 @@ CAPTCHA_SECRET=ENC[AES256_GCM,data:NYnPFRBUS4znmx7Iuf7X2M/HY4pk4PPyA7R69A+EFiYns
ORIGIN_ACCOUNT_PRIVATE_KEY=ENC[AES256_GCM,data:YfWC3Cqdtto7Y2Pp6UzEXeHT/Hadpd2Au3/kz2UbGM+/rPTxwS/FtqLPrUwUyRbOv4eZWiv8BU6elD8aOvh57w==,iv:9J+AIrIb9Qtg0PHXYG1bVRH6Uqew20td2LNW//FgCqU=,tag:65yCo8EMY/4jf8+DxgLGiQ==,type:str]
HOLESKY_ADDRESS=ENC[AES256_GCM,data:0/q45lldez+Fom8UeTQlAo+wecqM09iO8G6vgezO5bGuIq/sn6WGadtm+fdSNpwrv9QxxI4NHNVMpQ==,iv:08icndbG+dFD6DYLW/MCIZiqK/6lYRcRDj91dyEHa+k=,tag:sRqHeMrxW2QufCcAHjG/iA==,type:str]
GASPV2_TOKEN_ADDRESS=ENC[AES256_GCM,data:pWE0WgZZpDYAv4vHTXuqNqdvu6GL7Jx7LrOjNW5MjjXZfKPmoW1URA==,iv:13yydCFWcyMbEjQdb0OMOlBSy9Krwf1a4KNbcpHDZHY=,tag:53exLQ7BDmu13WKlnDQ5fw==,type:str]
+CONTRACT_ADDRESS=ENC[AES256_GCM,data:hKZFZIeqp4d2HfOX57OxI16e3OQ8cIJoVhoMICMG4/g5JVekJQ7xYw==,iv:b8SU2O3J8Si1UMMFwruBz306f2w6D8veRcJCF7So5iQ=,tag:Ay7CQqIEgiIDj6YTcohKcA==,type:str]
+ETH_CHAIN_URL=ENC[AES256_GCM,data:GRSjJF3r+P91+9i3U9X4KQirBlj+7NV4xwTapg8gEt15fGXF/5a2dEr5sJvPlCVQkyNyQrnR+c+i,iv:ZKF4NHhGwSaYmI6kIFMjDZoW0//Xkr3e5Ll29/Pp5A8=,tag:zSTB6wRqz9/2RU7wQfqU1g==,type:str]
+ARBITRUM_SEPOLIA_CHAIN_URL=ENC[AES256_GCM,data:w+3qyxJLmYOmHeC3LzHA4y/AzNkuVsb3lvQsEFzHS84mSofYBnuNCD3rodI2G9Smoe/6SesWdCHaFNrLiSqho4dC,iv:94nx9MsMTFOItSjtjXry8MF3dX3azb24rcglSuAocPY=,tag:o/RtaY6dWeSeeW+X9c+NWQ==,type:str]
sops_gcp_kms__list_0__map_created_at=2024-07-05T14:25:15Z
sops_gcp_kms__list_0__map_enc=CiQAN1RhzRMcd7TxmT4c7viDfbI+LTmgVMCbll4/Bv3FSUIb9esSSQB0MkpZud6l8ROr4ZLdmraAl2FWLB0AGasYSoD6l2VJlVxQyD0FnEVjltIajssRkt4soCY1N6rqjekrRNpiRCBm0XMKYis/mo4=
sops_gcp_kms__list_0__map_resource_id=projects/direct-pixel-353917/locations/global/keyRings/sops/cryptoKeys/sops-key
-sops_lastmodified=2024-08-06T07:28:22Z
-sops_mac=ENC[AES256_GCM,data:gEinO9EFfTk+VcxB6dqnsPNm9OnsH39+KEk6l0hLMv0PsmdaI0cNzzEODx6rUQ82iAO4qJXIarhJVwDy+kjE8Q/Z1xY+Uvl3jScWJGTkbUCPWR5qpTI3WxvZeiURu3BsMWlsp3BTLg+4sIj9Tdyk2sDxHTH7qXnrpkviNUQPTv0=,iv:JMn8xRIfC98ir+kEnS0WcT6IckhLDO/ifVpGrMrNVFw=,tag:J6h8tDzEXr8Trb3lY2uw/w==,type:str]
+sops_lastmodified=2024-09-09T11:19:14Z
+sops_mac=ENC[AES256_GCM,data:iWcuE6VEDAdS5DSfDznNcH2rZfEvJB8v0inLc2ABvZDyG2TOA8tTFJo+/ZKXJZ4K2NfBir3FBt1LCysdy5Yum+4F20ovmMrmfJiW6ZJsXknQo3Z9hwukvL9FLbjwU14w+anZ+S16MXPoiUe7tLilGfSIBq9XY/QthGnakm1QPpw=,iv:pe0p9WxU442HbUWRHnRixLB1cgWURHdNaEKySjl+pTw=,tag:WhxVz2/DafAEaufMHwQXyw==,type:str]
sops_unencrypted_suffix=_unencrypted
sops_version=3.9.0
diff --git a/stash/src/Rolldown.json b/stash/src/Rolldown.json
new file mode 100644
index 00000000..d2da6711
--- /dev/null
+++ b/stash/src/Rolldown.json
@@ -0,0 +1 @@
+{"abi":[{"type":"function","name":"ETH_TOKEN_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"calculate_root","inputs":[{"name":"leave_hash","type":"bytes32","internalType":"bytes32"},{"name":"leave_idx","type":"uint32","internalType":"uint32"},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"},{"name":"leaves_count","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"calculate_root_impl","inputs":[{"name":"level","type":"uint32","internalType":"uint32"},{"name":"pos","type":"uint32","internalType":"uint32"},{"name":"hash","type":"bytes32","internalType":"bytes32"},{"name":"proofs","type":"bytes32[]","internalType":"bytes32[]"},{"name":"proof_idx","type":"uint32","internalType":"uint32"},{"name":"max_index","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"cancelResolutions","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"requestId","type":"tuple","internalType":"struct IRolldownPrimitives.RequestId","components":[{"name":"origin","type":"uint8","internalType":"enum IRolldownPrimitives.Origin"},{"name":"id","type":"uint256","internalType":"uint256"}]},{"name":"l2RequestId","type":"uint256","internalType":"uint256"},{"name":"cancelJustified","type":"bool","internalType":"bool"},{"name":"timeStamp","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"chain","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"enum IRolldownPrimitives.ChainId"}],"stateMutability":"view"},{"type":"function","name":"close_cancel","inputs":[{"name":"cancel","type":"tuple","internalType":"struct IRolldownPrimitives.Cancel","components":[{"name":"requestId","type":"tuple","internalType":"struct IRolldownPrimitives.RequestId","components":[{"name":"origin","type":"uint8","internalType":"enum IRolldownPrimitives.Origin"},{"name":"id","type":"uint256","internalType":"uint256"}]},{"name":"range","type":"tuple","internalType":"struct IRolldownPrimitives.Range","components":[{"name":"start","type":"uint256","internalType":"uint256"},{"name":"end","type":"uint256","internalType":"uint256"}]},{"name":"hash","type":"bytes32","internalType":"bytes32"}]},{"name":"merkle_root","type":"bytes32","internalType":"bytes32"},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"close_withdrawal","inputs":[{"name":"withdrawal","type":"tuple","internalType":"struct IRolldownPrimitives.Withdrawal","components":[{"name":"requestId","type":"tuple","internalType":"struct IRolldownPrimitives.RequestId","components":[{"name":"origin","type":"uint8","internalType":"enum IRolldownPrimitives.Origin"},{"name":"id","type":"uint256","internalType":"uint256"}]},{"name":"recipient","type":"address","internalType":"address"},{"name":"tokenAddress","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]},{"name":"merkle_root","type":"bytes32","internalType":"bytes32"},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"counter","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"deposit","inputs":[{"name":"tokenAddress","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deposit_erc20","inputs":[{"name":"tokenAddress","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deposit_native","inputs":[],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"find_l2_batch","inputs":[{"name":"requestId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct IRolldownPrimitives.Range","components":[{"name":"start","type":"uint256","internalType":"uint256"},{"name":"end","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getPendingRequests","inputs":[{"name":"start","type":"uint256","internalType":"uint256"},{"name":"end","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct IRolldownPrimitives.L1Update","components":[{"name":"chain","type":"uint8","internalType":"enum IRolldownPrimitives.ChainId"},{"name":"pendingDeposits","type":"tuple[]","internalType":"struct IRolldownPrimitives.Deposit[]","components":[{"name":"requestId","type":"tuple","internalType":"struct IRolldownPrimitives.RequestId","components":[{"name":"origin","type":"uint8","internalType":"enum IRolldownPrimitives.Origin"},{"name":"id","type":"uint256","internalType":"uint256"}]},{"name":"depositRecipient","type":"address","internalType":"address"},{"name":"tokenAddress","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"timeStamp","type":"uint256","internalType":"uint256"}]},{"name":"pendingCancelResolutions","type":"tuple[]","internalType":"struct IRolldownPrimitives.CancelResolution[]","components":[{"name":"requestId","type":"tuple","internalType":"struct IRolldownPrimitives.RequestId","components":[{"name":"origin","type":"uint8","internalType":"enum IRolldownPrimitives.Origin"},{"name":"id","type":"uint256","internalType":"uint256"}]},{"name":"l2RequestId","type":"uint256","internalType":"uint256"},{"name":"cancelJustified","type":"bool","internalType":"bool"},{"name":"timeStamp","type":"uint256","internalType":"uint256"}]}]}],"stateMutability":"view"},{"type":"function","name":"getUpdateForL2","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct IRolldownPrimitives.L1Update","components":[{"name":"chain","type":"uint8","internalType":"enum IRolldownPrimitives.ChainId"},{"name":"pendingDeposits","type":"tuple[]","internalType":"struct IRolldownPrimitives.Deposit[]","components":[{"name":"requestId","type":"tuple","internalType":"struct IRolldownPrimitives.RequestId","components":[{"name":"origin","type":"uint8","internalType":"enum IRolldownPrimitives.Origin"},{"name":"id","type":"uint256","internalType":"uint256"}]},{"name":"depositRecipient","type":"address","internalType":"address"},{"name":"tokenAddress","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"timeStamp","type":"uint256","internalType":"uint256"}]},{"name":"pendingCancelResolutions","type":"tuple[]","internalType":"struct IRolldownPrimitives.CancelResolution[]","components":[{"name":"requestId","type":"tuple","internalType":"struct IRolldownPrimitives.RequestId","components":[{"name":"origin","type":"uint8","internalType":"enum IRolldownPrimitives.Origin"},{"name":"id","type":"uint256","internalType":"uint256"}]},{"name":"l2RequestId","type":"uint256","internalType":"uint256"},{"name":"cancelJustified","type":"bool","internalType":"bool"},{"name":"timeStamp","type":"uint256","internalType":"uint256"}]}]}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_pauserRegistry","type":"address","internalType":"contract IPauserRegistry"},{"name":"initialOwner","type":"address","internalType":"address"},{"name":"chainId","type":"uint8","internalType":"enum IRolldownPrimitives.ChainId"},{"name":"updater","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"lastProcessedUpdate_origin_l1","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"lastProcessedUpdate_origin_l2","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"merkleRootRange","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"start","type":"uint256","internalType":"uint256"},{"name":"end","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pause","inputs":[{"name":"newPausedStatus","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"pauseAll","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"paused","inputs":[{"name":"index","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"pauserRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IPauserRegistry"}],"stateMutability":"view"},{"type":"function","name":"processedL2Requests","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPauserRegistry","inputs":[{"name":"newPauserRegistry","type":"address","internalType":"contract IPauserRegistry"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setUpdater","inputs":[{"name":"updater","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unpause","inputs":[{"name":"newPausedStatus","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"update_l1_from_l2","inputs":[{"name":"merkle_root","type":"bytes32","internalType":"bytes32"},{"name":"range","type":"tuple","internalType":"struct IRolldownPrimitives.Range","components":[{"name":"start","type":"uint256","internalType":"uint256"},{"name":"end","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updaterAccount","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"DepositAcceptedIntoQueue","inputs":[{"name":"requestId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"depositRecipient","type":"address","indexed":false,"internalType":"address"},{"name":"tokenAddress","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DisputeResolutionAcceptedIntoQueue","inputs":[{"name":"requestId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"cancelJustified","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"ERC20TokensWithdrawn","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"token_address","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"NativeTokensWithdrawn","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"NewUpdaterSet","inputs":[{"name":"updater","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"newPausedStatus","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PauserRegistrySet","inputs":[{"name":"pauserRegistry","type":"address","indexed":false,"internalType":"contract IPauserRegistry"},{"name":"newPauserRegistry","type":"address","indexed":false,"internalType":"contract IPauserRegistry"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"newPausedStatus","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"WithdrawalClosed","inputs":[{"name":"requestId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"withdrawalHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false}],"bytecode":{"object":"0x608060405234801561001057600080fd5b50600160d2556132a9806100256000396000f3fe6080604052600436106101e35760003560e01c80638da5cb5b11610102578063d16544f011610095578063f2fde38b11610064578063f2fde38b146105a4578063f9ecd01e146105c4578063fabc1cbc146105ff578063ffea632b1461061f57600080fd5b8063d16544f01461052e578063dfb0b12b1461054e578063ef0ba5d01461056e578063f26ee9d01461058e57600080fd5b8063b1538706116100d1578063b1538706146104ba578063c763e5a1146104cf578063c87c2224146104f6578063ca9b21ae146104fe57600080fd5b80638da5cb5b1461042c5780639d54f4191461044a578063a555980b1461046a578063af26c6951461049a57600080fd5b80635ac86ab71161017a57806371c544611161014957806371c54461146103a457806379e041f2146103c95780637fd4f845146103f6578063886f11951461040c57600080fd5b80635ac86ab71461031a5780635c975abb1461035a57806361bc221a14610379578063715018a61461038f57600080fd5b80631878d1f1116101b65780631878d1f11461026a57806347e7ef241461029c5780634f48eedf146102bc578063595c6a671461030557600080fd5b806301ef6966146101e857806308f42d401461020a57806310d67a2f1461022a578063136439dd1461024a575b600080fd5b3480156101f457600080fd5b506102086102033660046129dc565b61063f565b005b34801561021657600080fd5b50610208610225366004612a37565b61084c565b34801561023657600080fd5b50610208610245366004612a84565b610a15565b34801561025657600080fd5b50610208610265366004612aa1565b610ac8565b34801561027657600080fd5b5061027f600181565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102a857600080fd5b506102086102b7366004612aba565b610c07565b3480156102c857600080fd5b506102f06102d7366004612aa1565b609d602052600090815260409020805460019091015482565b60408051928352602083019190915201610293565b34801561031157600080fd5b50610208610c35565b34801561032657600080fd5b5061034a610335366004612ae6565b606654600160ff9092169190911b9081161490565b6040519015158152602001610293565b34801561036657600080fd5b506066545b604051908152602001610293565b34801561038557600080fd5b5061036b60975481565b34801561039b57600080fd5b50610208610cfc565b3480156103b057600080fd5b50609a5461027f9061010090046001600160a01b031681565b3480156103d557600080fd5b506103e96103e4366004612b09565b610d10565b6040516102939190612bdf565b34801561040257600080fd5b5061036b60985481565b34801561041857600080fd5b5060655461027f906001600160a01b031681565b34801561043857600080fd5b506033546001600160a01b031661027f565b34801561045657600080fd5b50610208610465366004612a84565b6110bd565b34801561047657600080fd5b5061034a610485366004612aa1565b609e6020526000908152604090205460ff1681565b3480156104a657600080fd5b5061036b6104b5366004612cb2565b6111bb565b3480156104c657600080fd5b506103e961120c565b3480156104db57600080fd5b50609a546104e99060ff1681565b6040516102939190612d21565b610208611257565b34801561050a57600080fd5b5061051e610519366004612aa1565b61141e565b6040516102939493929190612d34565b34801561053a57600080fd5b50610208610549366004612aba565b611490565b34801561055a57600080fd5b506102086105693660046129dc565b6116ba565b34801561057a57600080fd5b5061036b610589366004612d5d565b61188e565b34801561059a57600080fd5b5061036b60995481565b3480156105b057600080fd5b506102086105bf366004612a84565b6119ca565b3480156105d057600080fd5b506105e46105df366004612aa1565b611a40565b60408051825181526020928301519281019290925201610293565b34801561060b57600080fd5b5061020861061a366004612aa1565b611bb4565b34801561062b57600080fd5b5061020861063a366004612dfa565b611d10565b606654156106685760405162461bcd60e51b815260040161065f90612e56565b60405180910390fd5b600260d254141561068b5760405162461bcd60e51b815260040161065f90612e8d565b600260d2556000838152609d60209081526040918290208251808401909352805480845260019091015491830191909152158015906106cd5750602081015115155b61070f5760405162461bcd60e51b8152602060048201526013602482015272155b9adb9bdddb881b595c9adb19481c9bdbdd606a1b604482015260640161065f565b6000856040516020016107229190612ee5565b60408051601f198184030181529181528151602092830120888301356000908152609e90935291205490915060ff16156107925760405162461bcd60e51b8152602060048201526011602482015270105b1c9958591e481c1c9bd8d95cdcd959607a1b604482015260640161065f565b815160208301516000916107a591612f2d565b6107b0906001612f44565b83519091506000906107c79060208a013590612f2d565b9050866107d784838989876111bb565b146108145760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b604482015260640161065f565b61081d88611e89565b505050506020938401356000908152609e90945250506040909120805460ff1916600190811790915560d25550565b6066541561086c5760405162461bcd60e51b815260040161065f90612e56565b609a5461010090046001600160a01b031633146108bb5760405162461bcd60e51b815260206004820152600d60248201526c2737ba103a34329037bbb732b960991b604482015260640161065f565b6099548160200135116109105760405162461bcd60e51b815260206004820152601960248201527f557064617465206272696e6773206e6f206e6577206461746100000000000000604482015260640161065f565b60995461091f60018335612f2d565b111561096d5760405162461bcd60e51b815260206004820152601760248201527f50726576696f757320757064617465206d697373696e67000000000000000000604482015260640161065f565b8035602082013510156109b25760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642072616e676560981b604482015260640161065f565b609f8054600181019091557f0bc14066c33013fe88f66e314e4cf150b0b2d4d6451a1a51dbbd1c27cd11de28018290556000828152609d602052604090208190610a09828281358155602082013560018201555050565b50506020013560995550565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8c9190612f5c565b6001600160a01b0316336001600160a01b031614610abc5760405162461bcd60e51b815260040161065f90612f79565b610ac581611fdb565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b349190612fc3565b610b505760405162461bcd60e51b815260040161065f90612fe5565b60665481811614610bc95760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161065f565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60665415610c275760405162461bcd60e51b815260040161065f90612e56565b610c318282611490565b5050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca19190612fc3565b610cbd5760405162461bcd60e51b815260040161065f90612fe5565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610d046120d2565b610d0e600061212c565b565b610d356040805160608101909152806000815260200160608152602001606081525090565b610d5a6040805160608101909152806000815260200160608152602001606081525090565b609a54819060ff166001811115610d7357610d73612b2b565b90816001811115610d8657610d86612b2b565b905250600080855b858111610df5576000818152609c602052604090206001015415610dbe5782610db68161302d565b935050610de3565b6000818152609b602052604090206001015415610de35781610ddf8161302d565b9250505b80610ded8161302d565b915050610d8e565b508167ffffffffffffffff811115610e0f57610e0f613048565b604051908082528060200260200182016040528015610e7557816020015b6040805160e081018252600060a0820181815260c08301829052825260208083018290529282018190526060820181905260808201528252600019909201910181610e2d5790505b5060208401528067ffffffffffffffff811115610e9457610e94613048565b604051908082528060200260200182016040528015610ef357816020015b6040805160c08101825260006080820181815260a083018290528252602080830182905292820181905260608201528252600019909201910181610eb25790505b506040840152506000905080855b8581116110b2576000818152609c602052604090206001015415610fe0576000818152609c602052604090819020815160e081019092528054829060a08201908390829060ff166001811115610f5957610f59612b2b565b6001811115610f6a57610f6a612b2b565b81526001919091015460209182015290825260028301546001600160a01b039081168383015260038401541660408301526004830154606083015260059092015460809091015285015184610fbe8161302d565b955081518110610fd057610fd061305e565b60200260200101819052506110a0565b6000818152609b60205260409020600201541561109b576000818152609b602052604090819020815160c081019092528054829060808201908390829060ff16600181111561103157611031612b2b565b600181111561104257611042612b2b565b815260019190910154602091820152908252600283015490820152600382015460ff161515604080830191909152600490920154606090910152850151836110898161302d565b945081518110610fd057610fd061305e565b6110b2565b806110aa8161302d565b915050610f01565b509195945050505050565b606654156110dd5760405162461bcd60e51b815260040161065f90612e56565b609a5461010090046001600160a01b0316331461115b5760405162461bcd60e51b815260206004820152603660248201527f4f6e6c792061637469766520757064617465722063616e206d6f7665207269676044820152751a1d1cc81d1bc818481b995dc818481858d8dbdd5b9d60521b606482015260840161065f565b609a8054610100600160a81b0319166101006001600160a01b038481168202929092179283905560405192041681527f1b0f2f500df596b42b73e80dbec6a1fb570f01978a586723f988a5fc54d773a1906020015b60405180910390a150565b600080825b63ffffffff8116156111eb576111d760028261308a565b90506111e46001836130ad565b91506111c0565b61120082888a8989600061058960018c6130d5565b98975050505050505050565b6112316040805160608101909152806000815260200160608152602001606081525090565b61125260985460016112439190612f44565b60016097546103e49190612f2d565b905090565b606654156112775760405162461bcd60e51b815260040161065f90612e56565b600034116112c75760405162461bcd60e51b815260206004820181905260248201527f6d73672076616c7565206d757374206265206772656174657220746861742030604482015260640161065f565b6040805160e081019091523390349042906000908060a0810180848152602001609760008154809291906112fa9061302d565b90915550905281526001600160a01b0386166020808301919091526001604080840182905260608401889052608090930186905283518201516000908152609c9092529190208251805182549495508594929391928492839160ff191690838181111561136957611369612b2b565b0217905550602091820151600191820155838201516002840180546001600160a01b03199081166001600160a01b039384161790915560408087015160038701805490931690841617909155606080870151600487015560809687015160059096019590955586518401518151908152918a1693820193909352918201529081018590527fe28491c2da97a9923c92f6590a040dfc143fe636e8545356cdab0a796e1acefa910160405180910390a150505050565b609b6020526000908152604090819020815180830190925280549091908290829060ff16600181111561145357611453612b2b565b600181111561146457611464612b2b565b815260019190910154602090910152600282015460038301546004909301549192909160ff9091169084565b606654156114b05760405162461bcd60e51b815260040161065f90612e56565b600260d25414156114d35760405162461bcd60e51b815260040161065f90612e8d565b600260d2556001600160a01b0382166115265760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b604482015260640161065f565b600081116115465760405162461bcd60e51b815260040161065f906130fa565b338261155d6001600160a01b03821683308661217e565b6040805160e0810190915242906000908060a08101808481526020016097600081548092919061158c9061302d565b90915550905281526001600160a01b0380871660208084019190915290891660408084019190915260608301899052608090920185905282518101516000908152609c909152208151805182549394508493839190829060ff1916600183818111156115fa576115fa612b2b565b021790555060209182015160019190910155828101516002830180546001600160a01b03199081166001600160a01b03938416179091556040808601516003860180549093169084161790915560608086015160048601556080958601516005909501949094558551830151815190815289831693810193909352908a16908201529081018790527fe28491c2da97a9923c92f6590a040dfc143fe636e8545356cdab0a796e1acefa910160405180910390a15050600160d25550505050565b606654156116da5760405162461bcd60e51b815260040161065f90612e56565b600260d25414156116fd5760405162461bcd60e51b815260040161065f90612e8d565b600260d2556000838152609d602090815260409182902082518084019093528054808452600190910154918301919091521580159061173f5750602081015115155b6117815760405162461bcd60e51b8152602060048201526013602482015272155b9adb9bdddb881b595c9adb19481c9bdbdd606a1b604482015260640161065f565b600085604051602001611794919061312f565b60408051601f198184030181529181528151602092830120888301356000908152609e90935291205490915060ff16156118045760405162461bcd60e51b8152602060048201526011602482015270105b1c9958591e481c1c9bd8d95cdcd959607a1b604482015260640161065f565b8151602083015160009161181791612f2d565b611822906001612f44565b83519091506000906118389060208a0135612f2d565b90508661184884838989876111bb565b146118855760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b604482015260640161065f565b61081d886121ef565b600061189b600288613181565b63ffffffff16611920578163ffffffff168763ffffffff1614156118be5761197e565b858585856118cb816131a4565b965063ffffffff168181106118e2576118e261305e565b90506020020135604051602001611903929190918252602082015260400190565b60405160208183030381529060405280519060200120955061197e565b84848461192c816131a4565b955063ffffffff168181106119435761194361305e565b9050602002013586604051602001611965929190918252602082015260400190565b6040516020818303038152906040528051906020012095505b8763ffffffff16600114156119945750846119bf565b6119bc6119a260018a6130d5565b6119ad60028a61308a565b8888888861058960028a61308a565b90505b979650505050505050565b6119d26120d2565b6001600160a01b038116611a375760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161065f565b610ac58161212c565b6040805180820190915260008082526020820152609954821115611a9b5760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a59081c995c5d595cdd081a5960721b604482015260640161065f565b609f54611abb575050604080518082019091526000808252602082015290565b609f54600090611acd90600190612f2d565b90505b609d6000609f8381548110611ae757611ae761305e565b90600052602060002001548152602001908152602001600020600001548310158015611b465750609d6000609f8381548110611b2557611b2561305e565b90600052602060002001548152602001908152602001600020600101548311155b15611ba257609d6000609f8381548110611b6257611b6261305e565b9060005260206000200154815260200190815260200160002060405180604001604052908160008201548152602001600182015481525050915050919050565b80611bac816131c8565b915050611ad0565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2b9190612f5c565b6001600160a01b0316336001600160a01b031614611c5b5760405162461bcd60e51b815260040161065f90612f79565b606654198119606654191614611cd95760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161065f565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610bfc565b600054610100900460ff1615808015611d305750600054600160ff909116105b80611d4a5750303b158015611d4a575060005460ff166001145b611dad5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161065f565b6000805460ff191660011790558015611dd0576000805461ff0019166101001790555b611ddb856000612288565b611de48461212c565b6000609881905560016097819055609991909155609a8054859260ff19909116908381811115611e1657611e16612b2b565b0217905550609a8054610100600160a81b0319166101006001600160a01b038516021790558015611e82576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b5050505050565b6000611e9d60408301356060840135610d10565b9050600081604051602001611eb29190612bdf565b60408051601f19818403018152828252805160209091012060c083019091529150429060009080608081018084815260200160976000815480929190611ef79061302d565b9091555090528152602087810135818301526080880135861415604080840191909152606090920185905282518101516000908152609b909152208151805182549394508493839190829060ff191660018381811115611f5957611f59612b2b565b021790555060209182015160019091015582810151600283015560408084015160038401805491151560ff199092169190911790556060909301516004909201919091558201518282015191517fd16f202ac5905ff5d1851f4805ffe56d1212db32fa989881d0044b9cf0f7277692611e799282521515602082015260400190565b6001600160a01b0381166120695760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161065f565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314610d0e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161065f565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526121e99085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261236e565b50505050565b60016122016080830160608401612a84565b6001600160a01b0316141561221e5761221981612445565b612227565b6122278161252d565b7f935f26d94be31907080aa78b3e6e2ac6d48a072af096c20268388621bbc11789816000016020013582604051602001612261919061312f565b60408051601f198184030181528282528051602091820120938352820192909252016111b0565b6065546001600160a01b03161580156122a957506001600160a01b03821615155b61232b5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161065f565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610c3182611fdb565b60006123c3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166126bc9092919063ffffffff16565b80519091501561244057808060200190518101906123e19190612fc3565b6124405760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161065f565b505050565b60808101353031101561249a5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f7567682066756e647320696e20636f6e747261637400000000604482015260640161065f565b60008160800135116124be5760405162461bcd60e51b815260040161065f906130fa565b6124db6124d16060830160408401612a84565b82608001356126d5565b7fe0495355c1e04c512584521854d222d239a4b782b39ac8a7e835a34f5ec7c1e161250c6060830160408401612a84565b604080516001600160a01b03909216825260808401356020830152016111b0565b600061253f6080830160608401612a84565b6040516370a0823160e01b81523060048201529091506080830135906001600160a01b038316906370a0823190602401602060405180830381865afa15801561258c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b091906131df565b10156125fe5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f7567682066756e647320696e20636f6e747261637400000000604482015260640161065f565b60008260800135116126225760405162461bcd60e51b815260040161065f906130fa565b61264a6126356060840160408501612a84565b6001600160a01b0383169060808501356127ee565b7ee763f7778b8ceef7270c89b7d1df1008b0e482da39c43831417733af96fb0d61267a6060840160408501612a84565b61268a6080850160608601612a84565b604080516001600160a01b03938416815292909116602083015260808501359082015260600160405180910390a15050565b60606126cb848460008561281e565b90505b9392505050565b804710156127255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161065f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612772576040519150601f19603f3d011682016040523d82523d6000602084013e612777565b606091505b50509050806124405760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161065f565b6040516001600160a01b03831660248201526044810182905261244090849063a9059cbb60e01b906064016121b2565b60608247101561287f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161065f565b6001600160a01b0385163b6128d65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161065f565b600080866001600160a01b031685876040516128f29190613224565b60006040518083038185875af1925050503d806000811461292f576040519150601f19603f3d011682016040523d82523d6000602084013e612934565b606091505b50915091506119bf8282866060831561294e5750816126ce565b82511561295e5782518084602001fd5b8160405162461bcd60e51b815260040161065f9190613240565b600060a0828403121561298a57600080fd5b50919050565b60008083601f8401126129a257600080fd5b50813567ffffffffffffffff8111156129ba57600080fd5b6020830191508360208260051b85010111156129d557600080fd5b9250929050565b60008060008060e085870312156129f257600080fd5b6129fc8686612978565b935060a0850135925060c085013567ffffffffffffffff811115612a1f57600080fd5b612a2b87828801612990565b95989497509550505050565b6000808284036060811215612a4b57600080fd5b833592506040601f1982011215612a6157600080fd5b506020830190509250929050565b6001600160a01b0381168114610ac557600080fd5b600060208284031215612a9657600080fd5b81356126ce81612a6f565b600060208284031215612ab357600080fd5b5035919050565b60008060408385031215612acd57600080fd5b8235612ad881612a6f565b946020939093013593505050565b600060208284031215612af857600080fd5b813560ff811681146126ce57600080fd5b60008060408385031215612b1c57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b60028110610ac557634e487b7160e01b600052602160045260246000fd5b8051612b6a81612b41565b8252602090810151910152565b600081518084526020808501945080840160005b83811015612bd4578151612ba0888251612b5f565b8084015160408981019190915281015115156060808a01919091520151608088015260a09096019590820190600101612b8b565b509495945050505050565b6000602080835260808084018551612bf681612b41565b85840152858301516060604080880182905282519384905260a093928601928489019060005b81811015612c6e578551612c31848251612b5f565b808a01516001600160a01b03908116858701528582015116868501528581015189850152880151878401529488019460c090920191600101612c1c565b505089820151898203601f1901848b01529650612c8b8188612b77565b9a9950505050505050505050565b803563ffffffff81168114612cad57600080fd5b919050565b600080600080600060808688031215612cca57600080fd5b85359450612cda60208701612c99565b9350604086013567ffffffffffffffff811115612cf657600080fd5b612d0288828901612990565b9094509250612d15905060608701612c99565b90509295509295909350565b60208101612d2e83612b41565b91905290565b60a08101612d428287612b5f565b60408201949094529115156060830152608090910152919050565b600080600080600080600060c0888a031215612d7857600080fd5b612d8188612c99565b9650612d8f60208901612c99565b955060408801359450606088013567ffffffffffffffff811115612db257600080fd5b612dbe8a828b01612990565b9095509350612dd1905060808901612c99565b9150612ddf60a08901612c99565b905092959891949750929550565b60028110610ac557600080fd5b60008060008060808587031215612e1057600080fd5b8435612e1b81612a6f565b93506020850135612e2b81612a6f565b92506040850135612e3b81612ded565b91506060850135612e4b81612a6f565b939692955090935050565b6020808252601c908201527f5061757361626c653a20636f6e74726163742069732070617573656400000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b8035612ecf81612ded565b612ed881612b41565b8252602090810135910152565b60a08101612ef38284612ec4565b60408301356040830152606083013560608301526080830135608083015292915050565b634e487b7160e01b600052601160045260246000fd5b600082821015612f3f57612f3f612f17565b500390565b60008219821115612f5757612f57612f17565b500190565b600060208284031215612f6e57600080fd5b81516126ce81612a6f565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215612fd557600080fd5b815180151581146126ce57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b600060001982141561304157613041612f17565b5060010190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600063ffffffff808416806130a1576130a1613074565b92169190910492915050565b600063ffffffff8083168185168083038211156130cc576130cc612f17565b01949350505050565b600063ffffffff838116908316818110156130f2576130f2612f17565b039392505050565b6020808252818101527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f604082015260600190565b60a0810161313d8284612ec4565b604083013561314b81612a6f565b6001600160a01b03908116604084015260608401359061316a82612a6f565b166060830152608092830135929091019190915290565b600063ffffffff8084168061319857613198613074565b92169190910692915050565b600063ffffffff808316818114156131be576131be612f17565b6001019392505050565b6000816131d7576131d7612f17565b506000190190565b6000602082840312156131f157600080fd5b5051919050565b60005b838110156132135781810151838201526020016131fb565b838111156121e95750506000910152565b600082516132368184602087016131f8565b9190910192915050565b602081526000825180602084015261325f8160408501602087016131f8565b601f01601f1916919091016040019291505056fea2646970667358221220710f213ee09bce253ec1f0230f68c4530d2e6fbaa056d33eb600dd60b71fdb8b64736f6c634300080c0033","sourceMap":"621:10651:130:-:0;;;;;;;;;;;;-1:-1:-1;1701:1:17;1806:7;:22;621:10651:130;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101e35760003560e01c80638da5cb5b11610102578063d16544f011610095578063f2fde38b11610064578063f2fde38b146105a4578063f9ecd01e146105c4578063fabc1cbc146105ff578063ffea632b1461061f57600080fd5b8063d16544f01461052e578063dfb0b12b1461054e578063ef0ba5d01461056e578063f26ee9d01461058e57600080fd5b8063b1538706116100d1578063b1538706146104ba578063c763e5a1146104cf578063c87c2224146104f6578063ca9b21ae146104fe57600080fd5b80638da5cb5b1461042c5780639d54f4191461044a578063a555980b1461046a578063af26c6951461049a57600080fd5b80635ac86ab71161017a57806371c544611161014957806371c54461146103a457806379e041f2146103c95780637fd4f845146103f6578063886f11951461040c57600080fd5b80635ac86ab71461031a5780635c975abb1461035a57806361bc221a14610379578063715018a61461038f57600080fd5b80631878d1f1116101b65780631878d1f11461026a57806347e7ef241461029c5780634f48eedf146102bc578063595c6a671461030557600080fd5b806301ef6966146101e857806308f42d401461020a57806310d67a2f1461022a578063136439dd1461024a575b600080fd5b3480156101f457600080fd5b506102086102033660046129dc565b61063f565b005b34801561021657600080fd5b50610208610225366004612a37565b61084c565b34801561023657600080fd5b50610208610245366004612a84565b610a15565b34801561025657600080fd5b50610208610265366004612aa1565b610ac8565b34801561027657600080fd5b5061027f600181565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102a857600080fd5b506102086102b7366004612aba565b610c07565b3480156102c857600080fd5b506102f06102d7366004612aa1565b609d602052600090815260409020805460019091015482565b60408051928352602083019190915201610293565b34801561031157600080fd5b50610208610c35565b34801561032657600080fd5b5061034a610335366004612ae6565b606654600160ff9092169190911b9081161490565b6040519015158152602001610293565b34801561036657600080fd5b506066545b604051908152602001610293565b34801561038557600080fd5b5061036b60975481565b34801561039b57600080fd5b50610208610cfc565b3480156103b057600080fd5b50609a5461027f9061010090046001600160a01b031681565b3480156103d557600080fd5b506103e96103e4366004612b09565b610d10565b6040516102939190612bdf565b34801561040257600080fd5b5061036b60985481565b34801561041857600080fd5b5060655461027f906001600160a01b031681565b34801561043857600080fd5b506033546001600160a01b031661027f565b34801561045657600080fd5b50610208610465366004612a84565b6110bd565b34801561047657600080fd5b5061034a610485366004612aa1565b609e6020526000908152604090205460ff1681565b3480156104a657600080fd5b5061036b6104b5366004612cb2565b6111bb565b3480156104c657600080fd5b506103e961120c565b3480156104db57600080fd5b50609a546104e99060ff1681565b6040516102939190612d21565b610208611257565b34801561050a57600080fd5b5061051e610519366004612aa1565b61141e565b6040516102939493929190612d34565b34801561053a57600080fd5b50610208610549366004612aba565b611490565b34801561055a57600080fd5b506102086105693660046129dc565b6116ba565b34801561057a57600080fd5b5061036b610589366004612d5d565b61188e565b34801561059a57600080fd5b5061036b60995481565b3480156105b057600080fd5b506102086105bf366004612a84565b6119ca565b3480156105d057600080fd5b506105e46105df366004612aa1565b611a40565b60408051825181526020928301519281019290925201610293565b34801561060b57600080fd5b5061020861061a366004612aa1565b611bb4565b34801561062b57600080fd5b5061020861063a366004612dfa565b611d10565b606654156106685760405162461bcd60e51b815260040161065f90612e56565b60405180910390fd5b600260d254141561068b5760405162461bcd60e51b815260040161065f90612e8d565b600260d2556000838152609d60209081526040918290208251808401909352805480845260019091015491830191909152158015906106cd5750602081015115155b61070f5760405162461bcd60e51b8152602060048201526013602482015272155b9adb9bdddb881b595c9adb19481c9bdbdd606a1b604482015260640161065f565b6000856040516020016107229190612ee5565b60408051601f198184030181529181528151602092830120888301356000908152609e90935291205490915060ff16156107925760405162461bcd60e51b8152602060048201526011602482015270105b1c9958591e481c1c9bd8d95cdcd959607a1b604482015260640161065f565b815160208301516000916107a591612f2d565b6107b0906001612f44565b83519091506000906107c79060208a013590612f2d565b9050866107d784838989876111bb565b146108145760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b604482015260640161065f565b61081d88611e89565b505050506020938401356000908152609e90945250506040909120805460ff1916600190811790915560d25550565b6066541561086c5760405162461bcd60e51b815260040161065f90612e56565b609a5461010090046001600160a01b031633146108bb5760405162461bcd60e51b815260206004820152600d60248201526c2737ba103a34329037bbb732b960991b604482015260640161065f565b6099548160200135116109105760405162461bcd60e51b815260206004820152601960248201527f557064617465206272696e6773206e6f206e6577206461746100000000000000604482015260640161065f565b60995461091f60018335612f2d565b111561096d5760405162461bcd60e51b815260206004820152601760248201527f50726576696f757320757064617465206d697373696e67000000000000000000604482015260640161065f565b8035602082013510156109b25760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642072616e676560981b604482015260640161065f565b609f8054600181019091557f0bc14066c33013fe88f66e314e4cf150b0b2d4d6451a1a51dbbd1c27cd11de28018290556000828152609d602052604090208190610a09828281358155602082013560018201555050565b50506020013560995550565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8c9190612f5c565b6001600160a01b0316336001600160a01b031614610abc5760405162461bcd60e51b815260040161065f90612f79565b610ac581611fdb565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b349190612fc3565b610b505760405162461bcd60e51b815260040161065f90612fe5565b60665481811614610bc95760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161065f565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60665415610c275760405162461bcd60e51b815260040161065f90612e56565b610c318282611490565b5050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca19190612fc3565b610cbd5760405162461bcd60e51b815260040161065f90612fe5565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610d046120d2565b610d0e600061212c565b565b610d356040805160608101909152806000815260200160608152602001606081525090565b610d5a6040805160608101909152806000815260200160608152602001606081525090565b609a54819060ff166001811115610d7357610d73612b2b565b90816001811115610d8657610d86612b2b565b905250600080855b858111610df5576000818152609c602052604090206001015415610dbe5782610db68161302d565b935050610de3565b6000818152609b602052604090206001015415610de35781610ddf8161302d565b9250505b80610ded8161302d565b915050610d8e565b508167ffffffffffffffff811115610e0f57610e0f613048565b604051908082528060200260200182016040528015610e7557816020015b6040805160e081018252600060a0820181815260c08301829052825260208083018290529282018190526060820181905260808201528252600019909201910181610e2d5790505b5060208401528067ffffffffffffffff811115610e9457610e94613048565b604051908082528060200260200182016040528015610ef357816020015b6040805160c08101825260006080820181815260a083018290528252602080830182905292820181905260608201528252600019909201910181610eb25790505b506040840152506000905080855b8581116110b2576000818152609c602052604090206001015415610fe0576000818152609c602052604090819020815160e081019092528054829060a08201908390829060ff166001811115610f5957610f59612b2b565b6001811115610f6a57610f6a612b2b565b81526001919091015460209182015290825260028301546001600160a01b039081168383015260038401541660408301526004830154606083015260059092015460809091015285015184610fbe8161302d565b955081518110610fd057610fd061305e565b60200260200101819052506110a0565b6000818152609b60205260409020600201541561109b576000818152609b602052604090819020815160c081019092528054829060808201908390829060ff16600181111561103157611031612b2b565b600181111561104257611042612b2b565b815260019190910154602091820152908252600283015490820152600382015460ff161515604080830191909152600490920154606090910152850151836110898161302d565b945081518110610fd057610fd061305e565b6110b2565b806110aa8161302d565b915050610f01565b509195945050505050565b606654156110dd5760405162461bcd60e51b815260040161065f90612e56565b609a5461010090046001600160a01b0316331461115b5760405162461bcd60e51b815260206004820152603660248201527f4f6e6c792061637469766520757064617465722063616e206d6f7665207269676044820152751a1d1cc81d1bc818481b995dc818481858d8dbdd5b9d60521b606482015260840161065f565b609a8054610100600160a81b0319166101006001600160a01b038481168202929092179283905560405192041681527f1b0f2f500df596b42b73e80dbec6a1fb570f01978a586723f988a5fc54d773a1906020015b60405180910390a150565b600080825b63ffffffff8116156111eb576111d760028261308a565b90506111e46001836130ad565b91506111c0565b61120082888a8989600061058960018c6130d5565b98975050505050505050565b6112316040805160608101909152806000815260200160608152602001606081525090565b61125260985460016112439190612f44565b60016097546103e49190612f2d565b905090565b606654156112775760405162461bcd60e51b815260040161065f90612e56565b600034116112c75760405162461bcd60e51b815260206004820181905260248201527f6d73672076616c7565206d757374206265206772656174657220746861742030604482015260640161065f565b6040805160e081019091523390349042906000908060a0810180848152602001609760008154809291906112fa9061302d565b90915550905281526001600160a01b0386166020808301919091526001604080840182905260608401889052608090930186905283518201516000908152609c9092529190208251805182549495508594929391928492839160ff191690838181111561136957611369612b2b565b0217905550602091820151600191820155838201516002840180546001600160a01b03199081166001600160a01b039384161790915560408087015160038701805490931690841617909155606080870151600487015560809687015160059096019590955586518401518151908152918a1693820193909352918201529081018590527fe28491c2da97a9923c92f6590a040dfc143fe636e8545356cdab0a796e1acefa910160405180910390a150505050565b609b6020526000908152604090819020815180830190925280549091908290829060ff16600181111561145357611453612b2b565b600181111561146457611464612b2b565b815260019190910154602090910152600282015460038301546004909301549192909160ff9091169084565b606654156114b05760405162461bcd60e51b815260040161065f90612e56565b600260d25414156114d35760405162461bcd60e51b815260040161065f90612e8d565b600260d2556001600160a01b0382166115265760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b604482015260640161065f565b600081116115465760405162461bcd60e51b815260040161065f906130fa565b338261155d6001600160a01b03821683308661217e565b6040805160e0810190915242906000908060a08101808481526020016097600081548092919061158c9061302d565b90915550905281526001600160a01b0380871660208084019190915290891660408084019190915260608301899052608090920185905282518101516000908152609c909152208151805182549394508493839190829060ff1916600183818111156115fa576115fa612b2b565b021790555060209182015160019190910155828101516002830180546001600160a01b03199081166001600160a01b03938416179091556040808601516003860180549093169084161790915560608086015160048601556080958601516005909501949094558551830151815190815289831693810193909352908a16908201529081018790527fe28491c2da97a9923c92f6590a040dfc143fe636e8545356cdab0a796e1acefa910160405180910390a15050600160d25550505050565b606654156116da5760405162461bcd60e51b815260040161065f90612e56565b600260d25414156116fd5760405162461bcd60e51b815260040161065f90612e8d565b600260d2556000838152609d602090815260409182902082518084019093528054808452600190910154918301919091521580159061173f5750602081015115155b6117815760405162461bcd60e51b8152602060048201526013602482015272155b9adb9bdddb881b595c9adb19481c9bdbdd606a1b604482015260640161065f565b600085604051602001611794919061312f565b60408051601f198184030181529181528151602092830120888301356000908152609e90935291205490915060ff16156118045760405162461bcd60e51b8152602060048201526011602482015270105b1c9958591e481c1c9bd8d95cdcd959607a1b604482015260640161065f565b8151602083015160009161181791612f2d565b611822906001612f44565b83519091506000906118389060208a0135612f2d565b90508661184884838989876111bb565b146118855760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b604482015260640161065f565b61081d886121ef565b600061189b600288613181565b63ffffffff16611920578163ffffffff168763ffffffff1614156118be5761197e565b858585856118cb816131a4565b965063ffffffff168181106118e2576118e261305e565b90506020020135604051602001611903929190918252602082015260400190565b60405160208183030381529060405280519060200120955061197e565b84848461192c816131a4565b955063ffffffff168181106119435761194361305e565b9050602002013586604051602001611965929190918252602082015260400190565b6040516020818303038152906040528051906020012095505b8763ffffffff16600114156119945750846119bf565b6119bc6119a260018a6130d5565b6119ad60028a61308a565b8888888861058960028a61308a565b90505b979650505050505050565b6119d26120d2565b6001600160a01b038116611a375760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161065f565b610ac58161212c565b6040805180820190915260008082526020820152609954821115611a9b5760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a59081c995c5d595cdd081a5960721b604482015260640161065f565b609f54611abb575050604080518082019091526000808252602082015290565b609f54600090611acd90600190612f2d565b90505b609d6000609f8381548110611ae757611ae761305e565b90600052602060002001548152602001908152602001600020600001548310158015611b465750609d6000609f8381548110611b2557611b2561305e565b90600052602060002001548152602001908152602001600020600101548311155b15611ba257609d6000609f8381548110611b6257611b6261305e565b9060005260206000200154815260200190815260200160002060405180604001604052908160008201548152602001600182015481525050915050919050565b80611bac816131c8565b915050611ad0565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2b9190612f5c565b6001600160a01b0316336001600160a01b031614611c5b5760405162461bcd60e51b815260040161065f90612f79565b606654198119606654191614611cd95760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161065f565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610bfc565b600054610100900460ff1615808015611d305750600054600160ff909116105b80611d4a5750303b158015611d4a575060005460ff166001145b611dad5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161065f565b6000805460ff191660011790558015611dd0576000805461ff0019166101001790555b611ddb856000612288565b611de48461212c565b6000609881905560016097819055609991909155609a8054859260ff19909116908381811115611e1657611e16612b2b565b0217905550609a8054610100600160a81b0319166101006001600160a01b038516021790558015611e82576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b5050505050565b6000611e9d60408301356060840135610d10565b9050600081604051602001611eb29190612bdf565b60408051601f19818403018152828252805160209091012060c083019091529150429060009080608081018084815260200160976000815480929190611ef79061302d565b9091555090528152602087810135818301526080880135861415604080840191909152606090920185905282518101516000908152609b909152208151805182549394508493839190829060ff191660018381811115611f5957611f59612b2b565b021790555060209182015160019091015582810151600283015560408084015160038401805491151560ff199092169190911790556060909301516004909201919091558201518282015191517fd16f202ac5905ff5d1851f4805ffe56d1212db32fa989881d0044b9cf0f7277692611e799282521515602082015260400190565b6001600160a01b0381166120695760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161065f565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314610d0e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161065f565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526121e99085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261236e565b50505050565b60016122016080830160608401612a84565b6001600160a01b0316141561221e5761221981612445565b612227565b6122278161252d565b7f935f26d94be31907080aa78b3e6e2ac6d48a072af096c20268388621bbc11789816000016020013582604051602001612261919061312f565b60408051601f198184030181528282528051602091820120938352820192909252016111b0565b6065546001600160a01b03161580156122a957506001600160a01b03821615155b61232b5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161065f565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610c3182611fdb565b60006123c3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166126bc9092919063ffffffff16565b80519091501561244057808060200190518101906123e19190612fc3565b6124405760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161065f565b505050565b60808101353031101561249a5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f7567682066756e647320696e20636f6e747261637400000000604482015260640161065f565b60008160800135116124be5760405162461bcd60e51b815260040161065f906130fa565b6124db6124d16060830160408401612a84565b82608001356126d5565b7fe0495355c1e04c512584521854d222d239a4b782b39ac8a7e835a34f5ec7c1e161250c6060830160408401612a84565b604080516001600160a01b03909216825260808401356020830152016111b0565b600061253f6080830160608401612a84565b6040516370a0823160e01b81523060048201529091506080830135906001600160a01b038316906370a0823190602401602060405180830381865afa15801561258c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b091906131df565b10156125fe5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f7567682066756e647320696e20636f6e747261637400000000604482015260640161065f565b60008260800135116126225760405162461bcd60e51b815260040161065f906130fa565b61264a6126356060840160408501612a84565b6001600160a01b0383169060808501356127ee565b7ee763f7778b8ceef7270c89b7d1df1008b0e482da39c43831417733af96fb0d61267a6060840160408501612a84565b61268a6080850160608601612a84565b604080516001600160a01b03938416815292909116602083015260808501359082015260600160405180910390a15050565b60606126cb848460008561281e565b90505b9392505050565b804710156127255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161065f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612772576040519150601f19603f3d011682016040523d82523d6000602084013e612777565b606091505b50509050806124405760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161065f565b6040516001600160a01b03831660248201526044810182905261244090849063a9059cbb60e01b906064016121b2565b60608247101561287f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161065f565b6001600160a01b0385163b6128d65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161065f565b600080866001600160a01b031685876040516128f29190613224565b60006040518083038185875af1925050503d806000811461292f576040519150601f19603f3d011682016040523d82523d6000602084013e612934565b606091505b50915091506119bf8282866060831561294e5750816126ce565b82511561295e5782518084602001fd5b8160405162461bcd60e51b815260040161065f9190613240565b600060a0828403121561298a57600080fd5b50919050565b60008083601f8401126129a257600080fd5b50813567ffffffffffffffff8111156129ba57600080fd5b6020830191508360208260051b85010111156129d557600080fd5b9250929050565b60008060008060e085870312156129f257600080fd5b6129fc8686612978565b935060a0850135925060c085013567ffffffffffffffff811115612a1f57600080fd5b612a2b87828801612990565b95989497509550505050565b6000808284036060811215612a4b57600080fd5b833592506040601f1982011215612a6157600080fd5b506020830190509250929050565b6001600160a01b0381168114610ac557600080fd5b600060208284031215612a9657600080fd5b81356126ce81612a6f565b600060208284031215612ab357600080fd5b5035919050565b60008060408385031215612acd57600080fd5b8235612ad881612a6f565b946020939093013593505050565b600060208284031215612af857600080fd5b813560ff811681146126ce57600080fd5b60008060408385031215612b1c57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b60028110610ac557634e487b7160e01b600052602160045260246000fd5b8051612b6a81612b41565b8252602090810151910152565b600081518084526020808501945080840160005b83811015612bd4578151612ba0888251612b5f565b8084015160408981019190915281015115156060808a01919091520151608088015260a09096019590820190600101612b8b565b509495945050505050565b6000602080835260808084018551612bf681612b41565b85840152858301516060604080880182905282519384905260a093928601928489019060005b81811015612c6e578551612c31848251612b5f565b808a01516001600160a01b03908116858701528582015116868501528581015189850152880151878401529488019460c090920191600101612c1c565b505089820151898203601f1901848b01529650612c8b8188612b77565b9a9950505050505050505050565b803563ffffffff81168114612cad57600080fd5b919050565b600080600080600060808688031215612cca57600080fd5b85359450612cda60208701612c99565b9350604086013567ffffffffffffffff811115612cf657600080fd5b612d0288828901612990565b9094509250612d15905060608701612c99565b90509295509295909350565b60208101612d2e83612b41565b91905290565b60a08101612d428287612b5f565b60408201949094529115156060830152608090910152919050565b600080600080600080600060c0888a031215612d7857600080fd5b612d8188612c99565b9650612d8f60208901612c99565b955060408801359450606088013567ffffffffffffffff811115612db257600080fd5b612dbe8a828b01612990565b9095509350612dd1905060808901612c99565b9150612ddf60a08901612c99565b905092959891949750929550565b60028110610ac557600080fd5b60008060008060808587031215612e1057600080fd5b8435612e1b81612a6f565b93506020850135612e2b81612a6f565b92506040850135612e3b81612ded565b91506060850135612e4b81612a6f565b939692955090935050565b6020808252601c908201527f5061757361626c653a20636f6e74726163742069732070617573656400000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b8035612ecf81612ded565b612ed881612b41565b8252602090810135910152565b60a08101612ef38284612ec4565b60408301356040830152606083013560608301526080830135608083015292915050565b634e487b7160e01b600052601160045260246000fd5b600082821015612f3f57612f3f612f17565b500390565b60008219821115612f5757612f57612f17565b500190565b600060208284031215612f6e57600080fd5b81516126ce81612a6f565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215612fd557600080fd5b815180151581146126ce57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b600060001982141561304157613041612f17565b5060010190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600063ffffffff808416806130a1576130a1613074565b92169190910492915050565b600063ffffffff8083168185168083038211156130cc576130cc612f17565b01949350505050565b600063ffffffff838116908316818110156130f2576130f2612f17565b039392505050565b6020808252818101527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f604082015260600190565b60a0810161313d8284612ec4565b604083013561314b81612a6f565b6001600160a01b03908116604084015260608401359061316a82612a6f565b166060830152608092830135929091019190915290565b600063ffffffff8084168061319857613198613074565b92169190910692915050565b600063ffffffff808316818114156131be576131be612f17565b6001019392505050565b6000816131d7576131d7612f17565b506000190190565b6000602082840312156131f157600080fd5b5051919050565b60005b838110156132135781810151838201526020016131fb565b838111156121e95750506000910152565b600082516132368184602087016131f8565b9190910192915050565b602081526000825180602084015261325f8160408501602087016131f8565b601f01601f1916919091016040019291505056fea2646970667358221220710f213ee09bce253ec1f0230f68c4530d2e6fbaa056d33eb600dd60b71fdb8b64736f6c634300080c0033","sourceMap":"621:10651:130:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6305:762;;;;;;;;;;-1:-1:-1;6305:762:130;;;;;:::i;:::-;;:::i;:::-;;7257:578;;;;;;;;;;-1:-1:-1;7257:578:130;;;;;:::i;:::-;;:::i;5826:138:58:-;;;;;;;;;;-1:-1:-1;5826:138:58;;;;;:::i;:::-;;:::i;3832:392::-;;;;;;;;;;-1:-1:-1;3832:392:58;;;;;:::i;:::-;;:::i;779:94:130:-;;;;;;;;;;;;831:42;779:94;;;;;-1:-1:-1;;;;;2319:32:138;;;2301:51;;2289:2;2274:18;779:94:130;;;;;;;;3422:128;;;;;;;;;;-1:-1:-1;3422:128:130;;;;;:::i;:::-;;:::i;1075:48:131:-;;;;;;;;;;-1:-1:-1;1075:48:131;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3059:25:138;;;3115:2;3100:18;;3093:34;;;;3032:18;1075:48:131;2885:248:138;4299:136:58;;;;;;;;;;;;;:::i;5606:149::-;;;;;;;;;;-1:-1:-1;5606:149:58;;;;;:::i;:::-;5724:7;;5695:1;:10;;;;;;;;5724:14;;;5723:24;;5606:149;;;;3577:14:138;;3570:22;3552:41;;3540:2;3525:18;5606:149:58;3412:187:138;5418:87:58;;;;;;;;;;-1:-1:-1;5491:7:58;;5418:87;;;3750:25:138;;;3738:2;3723:18;5418:87:58;3604:177:138;174:22:131;;;;;;;;;;;;;;;;2071:101:0;;;;;;;;;;;;;:::i;592:29:131:-;;;;;;;;;;-1:-1:-1;592:29:131;;;;;;;-1:-1:-1;;;;;592:29:131;;;9998:1272:130;;;;;;;;;;-1:-1:-1;9998:1272:130;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;299:44:131:-;;;;;;;;;;;;;;;;1825:37:58;;;;;;;;;;-1:-1:-1;1825:37:58;;;;-1:-1:-1;;;;;1825:37:58;;;1441:85:0;;;;;;;;;;-1:-1:-1;1513:6:0;;-1:-1:-1;;;;;1513:6:0;1441:85;;2341:244:130;;;;;;;;;;-1:-1:-1;2341:244:130;;;;;:::i;:::-;;:::i;1132:51:131:-;;;;;;;;;;-1:-1:-1;1132:51:131;;;;;:::i;:::-;;;;;;;;;;;;;;;;927:373:130;;;;;;;;;;-1:-1:-1;927:373:130;;;;;:::i;:::-;;:::i;4562:166::-;;;;;;;;;;;;;:::i;539:20:131:-;;;;;;;;;;-1:-1:-1;539:20:131;;;;;;;;;;;;;;;:::i;2591:825:130:-;;;:::i;727:61:131:-;;;;;;;;;;-1:-1:-1;727:61:131;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;3556:1000:130:-;;;;;;;;;;-1:-1:-1;3556:1000:130;;;;;:::i;:::-;;:::i;4952:806::-;;;;;;;;;;-1:-1:-1;4952:806:130;;;;;:::i;:::-;;:::i;1306:603::-;;;;;;;;;;-1:-1:-1;1306:603:130;;;;;:::i;:::-;;:::i;462:44:131:-;;;;;;;;;;;;;;;;2321:198:0;;;;;;;;;;-1:-1:-1;2321:198:0;;;;;:::i;:::-;;:::i;5764:535:130:-;;;;;;;;;;-1:-1:-1;5764:535:130;;;;;:::i;:::-;;:::i;:::-;;;;10804:13:138;;10786:32;;10874:4;10862:17;;;10856:24;10834:20;;;10827:54;;;;10759:18;5764:535:130;10592:295:138;4911:437:58;;;;;;;;;;-1:-1:-1;4911:437:58;;;;;:::i;:::-;;:::i;1915:420:130:-;;;;;;;;;;-1:-1:-1;1915:420:130;;;;;:::i;:::-;;:::i;6305:762::-;2528:7:58;;:12;2520:53;;;;-1:-1:-1;;;2520:53:58;;;;;;;:::i;:::-;;;;;;;;;1744:1:17::1;2325:7;;:19;;2317:63;;;;-1:-1:-1::0;;;2317:63:17::1;;;;;;;:::i;:::-;1744:1;2455:7;:18:::0;6442:14:130::2;6459:28:::0;;;:15:::2;:28;::::0;;;;;;;;6442:45;;;;::::2;::::0;;;;;;;;::::2;::::0;;::::2;::::0;;;::::2;::::0;;;;6505:12;;::::2;::::0;:26:::2;;-1:-1:-1::0;6521:5:130::2;::::0;::::2;::::0;:10;::::2;6505:26;6497:58;;;::::0;-1:-1:-1;;;6497:58:130;;12691:2:138;6497:58:130::2;::::0;::::2;12673:21:138::0;12730:2;12710:18;;;12703:30;-1:-1:-1;;;12749:18:138;;;12742:49;12808:18;;6497:58:130::2;12489:343:138::0;6497:58:130::2;6567:19;6610:6;6599:18;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;6599:18:130;;::::2;::::0;;;;;;6589:29;;6599:18:::2;6589:29:::0;;::::2;::::0;6656:19;;::::2;;6636:40;::::0;;;:19:::2;:40:::0;;;;;;6589:29;;-1:-1:-1;6636:40:130::2;;:49;6628:79;;;::::0;-1:-1:-1;;;6628:79:130;;13813:2:138;6628:79:130::2;::::0;::::2;13795:21:138::0;13852:2;13832:18;;;13825:30;-1:-1:-1;;;13871:18:138;;;13864:47;13928:18;;6628:79:130::2;13611:341:138::0;6628:79:130::2;6754:7:::0;;6746:5:::2;::::0;::::2;::::0;6717:19:::2;::::0;6746:15:::2;::::0;::::2;:::i;:::-;:19;::::0;6764:1:::2;6746:19;:::i;:::-;6796:7:::0;;6717:49;;-1:-1:-1;6776:10:130::2;::::0;6796:29:::2;::::0;6806:19:::2;::::0;::::2;;::::0;6796:29:::2;:::i;:::-;6776:50;;6912:11;6855:53;6870:11;6883:3;6888:5;;6895:12;6855:14;:53::i;:::-;:68;6836:124;;;::::0;-1:-1:-1;;;6836:124:130;;14554:2:138;6836:124:130::2;::::0;::::2;14536:21:138::0;14593:2;14573:18;;;14566:30;-1:-1:-1;;;14612:18:138;;;14605:43;14665:18;;6836:124:130::2;14352:337:138::0;6836:124:130::2;6970:33;6996:6;6970:25;:33::i;:::-;-1:-1:-1::0;;;;7033:19:130::2;::::0;;::::2;;7013:40;::::0;;;:19:::2;:40:::0;;;-1:-1:-1;;7013:40:130;;;;:47;;-1:-1:-1;;7013:47:130::2;7056:4;7013:47:::0;;::::2;::::0;;;2628:7:17::1;:22:::0;-1:-1:-1;6305:762:130:o;7257:578::-;2528:7:58;;:12;2520:53;;;;-1:-1:-1;;;2520:53:58;;;;;;;:::i;:::-;7423:14:130::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;7423:14:130::1;7409:10;:28;7401:54;;;::::0;-1:-1:-1;;;7401:54:130;;14896:2:138;7401:54:130::1;::::0;::::1;14878:21:138::0;14935:2;14915:18;;;14908:30;-1:-1:-1;;;14954:18:138;;;14947:43;15007:18;;7401:54:130::1;14694:337:138::0;7401:54:130::1;7485:29;;7473:5;:9;;;:41;7465:79;;;::::0;-1:-1:-1;;;7465:79:130;;15238:2:138;7465:79:130::1;::::0;::::1;15220:21:138::0;15277:2;15257:18;;;15250:30;15316:27;15296:18;;;15289:55;15361:18;;7465:79:130::1;15036:349:138::0;7465:79:130::1;7581:29;::::0;7562:15:::1;7576:1;7562:11:::0;::::1;:15;:::i;:::-;:48;;7554:84;;;::::0;-1:-1:-1;;;7554:84:130;;15592:2:138;7554:84:130::1;::::0;::::1;15574:21:138::0;15631:2;15611:18;;;15604:30;15670:25;15650:18;;;15643:53;15713:18;;7554:84:130::1;15390:347:138::0;7554:84:130::1;7669:11:::0;::::1;7656:9;::::0;::::1;;:24;;7648:50;;;::::0;-1:-1:-1;;;7648:50:130;;15944:2:138;7648:50:130::1;::::0;::::1;15926:21:138::0;15983:2;15963:18;;;15956:30;-1:-1:-1;;;16002:18:138;;;15995:43;16055:18;;7648:50:130::1;15742:337:138::0;7648:50:130::1;7708:5;:23:::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;-1:-1:-1;7741:28:130;;;:15:::1;7708:23;7741:28:::0;;;;7772:5;;7741:36:::1;7772:5:::0;7741:28;16245:5:138;16232:19;16226:4;16219:33;16306:2;16299:5;16295:14;16282:28;16278:1;16272:4;16268:12;16261:50;;;16084:233;7741:36:130::1;-1:-1:-1::0;;7819:9:130::1;;;7787:29;:41:::0;-1:-1:-1;7257:578:130:o;5826:138:58:-;2285:14;;;;;;;;;-1:-1:-1;;;;;2285:14:58;-1:-1:-1;;;;;2285:23:58;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2271:39:58;:10;-1:-1:-1;;;;;2271:39:58;;2263:94;;;;-1:-1:-1;;;2263:94:58;;;;;;;:::i;:::-;5920:37:::1;5939:17;5920:18;:37::i;:::-;5826:138:::0;:::o;3832:392::-;2125:14;;:35;;-1:-1:-1;;;2125:35:58;;2149:10;2125:35;;;2301:51:138;-1:-1:-1;;;;;2125:14:58;;;;:23;;2274:18:138;;2125:35:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2117:88;;;;-1:-1:-1;;;2117:88:58;;;;;;;:::i;:::-;4064:7:::1;::::0;4034:25;;::::1;4033:38;4025:107;;;::::0;-1:-1:-1;;;4025:107:58;;17899:2:138;4025:107:58::1;::::0;::::1;17881:21:138::0;17938:2;17918:18;;;17911:30;17977:34;17957:18;;;17950:62;18048:26;18028:18;;;18021:54;18092:19;;4025:107:58::1;17697:420:138::0;4025:107:58::1;4142:7;:25:::0;;;4182:35:::1;::::0;3750:25:138;;;4189:10:58::1;::::0;4182:35:::1;::::0;3738:2:138;3723:18;4182:35:58::1;;;;;;;;3832:392:::0;:::o;3422:128:130:-;2528:7:58;;:12;2520:53;;;;-1:-1:-1;;;2520:53:58;;;;;;;:::i;:::-;3508:35:130::1;3522:12;3536:6;3508:13;:35::i;:::-;3422:128:::0;;:::o;4299:136:58:-;2125:14;;:35;;-1:-1:-1;;;2125:35:58;;2149:10;2125:35;;;2301:51:138;-1:-1:-1;;;;;2125:14:58;;;;:23;;2274:18:138;;2125:35:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2117:88;;;;-1:-1:-1;;;2117:88:58;;;;;;;:::i;:::-;-1:-1:-1;;4349:7:58::1;:27:::0;;;4391:37:::1;::::0;3750:25:138;;;4398:10:58::1;::::0;4391:37:::1;::::0;3738:2:138;3723:18;4391:37:58::1;;;;;;;4299:136::o:0;2071:101:0:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;9998:1272:130:-;10097:15;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;10097:15:130;10124:22;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;10124:22:130;10172:5;;10157:6;;10172:5;;;10157:20;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;10187:23:130;;10286:5;10261:287;10306:3;10293:9;:16;10261:287;;10342:19;;;;:8;:19;;;;;:32;;;:37;10338:200;;10399:17;;;;:::i;:::-;;;;10338:200;;;10441:28;;;;:17;:28;;;;;:41;;;:46;10437:101;;10507:16;;;;:::i;:::-;;;;10437:101;10311:11;;;;:::i;:::-;;;;10261:287;;;;10597:15;10583:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10583:30:130;;-1:-1:-1;;10583:30:130;;;;;;;;;;;-1:-1:-1;10558:22:130;;;:55;10680:14;10657:38;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10657:38:130;;-1:-1:-1;;10657:38:130;;;;;;;;;;;-1:-1:-1;10623:31:130;;;:72;-1:-1:-1;10724:1:130;;-1:-1:-1;10724:1:130;10789:5;10764:476;10809:3;10796:9;:16;10764:476;;10880:1;10845:19;;;:8;:19;;;;;:32;;;:36;10841:389;;10945:19;;;;:8;:19;;;;;;;10901:63;;;;;;;;;;;;;;;;10945:19;;10901:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10901:63:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;10924:17;;;;:::i;:::-;;;10901:41;;;;;;;;:::i;:::-;;;;;;:63;;;;10841:389;;;11032:1;10989:28;;;:17;:28;;;;;:40;;;:44;10985:245;;11143:28;;;;:17;:28;;;;;;;11053:118;;;;;;;;;;;;;;;;11143:28;;11053:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;11106:16;;;;:::i;:::-;;;11053:87;;;;;;;;:::i;10985:245::-;11210:5;;10985:245;10814:11;;;;:::i;:::-;;;;10764:476;;;-1:-1:-1;11257:6:130;;9998:1272;-1:-1:-1;;;;;9998:1272:130:o;2341:244::-;2528:7:58;;:12;2520:53;;;;-1:-1:-1;;;2520:53:58;;;;;;;:::i;:::-;2431:14:130::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;2431:14:130::1;2417:10;:28;2409:95;;;::::0;-1:-1:-1;;;2409:95:130;;18728:2:138;2409:95:130::1;::::0;::::1;18710:21:138::0;18767:2;18747:18;;;18740:30;18806:34;18786:18;;;18779:62;-1:-1:-1;;;18857:18:138;;;18850:52;18919:19;;2409:95:130::1;18526:418:138::0;2409:95:130::1;2512:14;:24:::0;;-1:-1:-1;;;;;;2512:24:130::1;;-1:-1:-1::0;;;;;2512:24:130;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;2549:29:::1;::::0;2563:14;::::1;;2301:51:138::0;;2549:29:130::1;::::0;2289:2:138;2274:18;2549:29:130::1;;;;;;;;2341:244:::0;:::o;927:373::-;1057:7;;1112:12;1132:69;1139:7;;;;1132:69;;1164:7;1170:1;1164:3;:7;:::i;:::-;1158:13;-1:-1:-1;1181:11:130;1191:1;1181:11;;:::i;:::-;;;1132:69;;;1215:78;1235:6;1243:9;1254:10;1266:5;;1273:1;1276:16;1291:1;1276:12;:16;:::i;1215:78::-;1208:85;927:373;-1:-1:-1;;;;;;;;927:373:130:o;4562:166::-;4609:15;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;4609:15:130;4655:66;4674:29;;4706:1;4674:33;;;;:::i;:::-;4719:1;4709:7;;:11;;;;:::i;4655:66::-;4636:85;;4562:166;:::o;2591:825::-;2528:7:58;;:12;2520:53;;;;-1:-1:-1;;;2520:53:58;;;;;;;:::i;:::-;2678:1:130::1;2666:9;:13;2658:58;;;::::0;-1:-1:-1;;;2658:58:130;;19938:2:138;2658:58:130::1;::::0;::::1;19920:21:138::0;;;19957:18;;;19950:30;20016:34;19996:18;;;19989:62;20068:18;;2658:58:130::1;19736:356:138::0;2658:58:130::1;2884:244;::::0;;2917:45;;;;;;2753:10:::1;::::0;2787:9:::1;::::0;2827:15:::1;::::0;2726:24:::1;::::0;2884:244;::::1;::::0;::::1;::::0;2726:24;2917:45:::1;;;;2951:7;;:9;;;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;2917:45:130;;2884:244;;-1:-1:-1;;;;;2884:244:130;::::1;;::::0;;::::1;::::0;;;;831:42:::1;2884:244:::0;;;;;;;;;;;;;;;;;;;;3193:24;;:27;::::1;::::0;-1:-1:-1;3184:37:130;;;:8:::1;:37:::0;;;;;;:54;;;;;;2852:276;;-1:-1:-1;2852:276:130;;3184:37;;:54;;:37;;;;-1:-1:-1;;3184:54:130::1;::::0;;;;::::1;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;3184:54:130::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;3184:54:130;;::::1;-1:-1:-1::0;;;;;3184:54:130;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;3291:24;;:27;::::1;::::0;3253:156;;20328:25:138;;;20427:15;;;20407:18;;;20400:43;;;;20459:18;;;20452:43;20511:18;;;20504:34;;;3253:156:130::1;::::0;20300:19:138;3253:156:130::1;;;;;;;2648:768;;;;2591:825::o:0;727:61:131:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3556:1000:130:-;2528:7:58;;:12;2520:53;;;;-1:-1:-1;;;2520:53:58;;;;;;;:::i;:::-;1744:1:17::1;2325:7;;:19;;2317:63;;;;-1:-1:-1::0;;;2317:63:17::1;;;;;;;:::i;:::-;1744:1;2455:7;:18:::0;-1:-1:-1;;;;;3669:26:130;::::2;3661:60;;;::::0;-1:-1:-1;;;3661:60:130;;20751:2:138;3661:60:130::2;::::0;::::2;20733:21:138::0;20790:2;20770:18;;;20763:30;-1:-1:-1;;;20809:18:138;;;20802:51;20870:18;;3661:60:130::2;20549:345:138::0;3661:60:130::2;3748:1;3739:6;:10;3731:55;;;;-1:-1:-1::0;;;3731:55:130::2;;;;;;;:::i;:::-;3823:10;3866:12:::0;3889:57:::2;-1:-1:-1::0;;;;;3889:22:130;::::2;3823:10:::0;3932:4:::2;3939:6:::0;3889:22:::2;:57::i;:::-;4034:239;::::0;;4067:45;;;;;;3977:15:::2;::::0;3957:17:::2;::::0;4034:239;::::2;::::0;::::2;::::0;3957:17;4067:45:::2;;;;4101:7;;:9;;;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;4067:45:130;;4034:239;;-1:-1:-1;;;;;4034:239:130;;::::2;;::::0;;::::2;::::0;;;;;;::::2;::::0;;;;;;;;;;;;;;;;;;;;;4338:24;;:27;::::2;::::0;-1:-1:-1;4329:37:130;;;:8:::2;:37:::0;;;;:54;;;;;;4002:271;;-1:-1:-1;4002:271:130;;4329:37;;:54;:37;;-1:-1:-1;;4329:54:130::2;::::0;;;;::::2;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;4329:54:130::2;::::0;;::::2;::::0;::::2;::::0;;;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;;-1:-1:-1;;;;;;4329:54:130;;::::2;-1:-1:-1::0;;;;;4329:54:130;;::::2;;::::0;;;::::2;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;::::2;;::::0;;;::::2;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;;;;4436:24;;:27;::::2;::::0;4398:151;;20328:25:138;;;20427:15;;;20407:18;;;20400:43;;;;20479:15;;;20459:18;;;20452:43;20511:18;;;20504:34;;;4398:151:130::2;::::0;20300:19:138;4398:151:130::2;;;;;;;-1:-1:-1::0;;1701:1:17::1;2628:7;:22:::0;-1:-1:-1;;;;3556:1000:130:o;4952:806::-;2528:7:58;;:12;2520:53;;;;-1:-1:-1;;;2520:53:58;;;;;;;:::i;:::-;1744:1:17::1;2325:7;;:19;;2317:63;;;;-1:-1:-1::0;;;2317:63:17::1;;;;;;;:::i;:::-;1744:1;2455:7;:18:::0;5101:14:130::2;5118:28:::0;;;:15:::2;:28;::::0;;;;;;;;5101:45;;;;::::2;::::0;;;;;;;;::::2;::::0;;::::2;::::0;;;::::2;::::0;;;;5164:12;;::::2;::::0;:26:::2;;-1:-1:-1::0;5180:5:130::2;::::0;::::2;::::0;:10;::::2;5164:26;5156:58;;;::::0;-1:-1:-1;;;5156:58:130;;12691:2:138;5156:58:130::2;::::0;::::2;12673:21:138::0;12730:2;12710:18;;;12703:30;-1:-1:-1;;;12749:18:138;;;12742:49;12808:18;;5156:58:130::2;12489:343:138::0;5156:58:130::2;5226:23;5273:10;5262:22;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;5262:22:130;;::::2;::::0;;;;;;5252:33;;5262:22:::2;5252:33:::0;;::::2;::::0;5323:23;;::::2;;5303:44;::::0;;;:19:::2;:44:::0;;;;;;5252:33;;-1:-1:-1;5303:44:130::2;;:53;5295:83;;;::::0;-1:-1:-1;;;5295:83:130;;13813:2:138;5295:83:130::2;::::0;::::2;13795:21:138::0;13852:2;13832:18;;;13825:30;-1:-1:-1;;;13871:18:138;;;13864:47;13928:18;;5295:83:130::2;13611:341:138::0;5295:83:130::2;5426:7:::0;;5418:5:::2;::::0;::::2;::::0;5389:19:::2;::::0;5418:15:::2;::::0;::::2;:::i;:::-;:19;::::0;5436:1:::2;5418:19;:::i;:::-;5494:7:::0;;5389:49;;-1:-1:-1;5448:10:130::2;::::0;5468:33:::2;::::0;:23:::2;::::0;::::2;;:33;:::i;:::-;5448:54;;5592:11;5531:57;5546:15;5563:3;5568:5;;5575:12;5531:14;:57::i;:::-;:72;5512:128;;;::::0;-1:-1:-1;;;5512:128:130;;14554:2:138;5512:128:130::2;::::0;::::2;14536:21:138::0;14593:2;14573:18;;;14566:30;-1:-1:-1;;;14612:18:138;;;14605:43;14665:18;;5512:128:130::2;14352:337:138::0;5512:128:130::2;5650:40;5679:10;5650:28;:40::i;1306:603::-:0;1459:7;1480;1486:1;1480:3;:7;:::i;:::-;:12;;1476:270;;1515:9;1508:16;;:3;:16;;;1504:148;;;1476:270;;1504:148;1614:4;1620:6;;1627:11;;;;:::i;:::-;;;1620:19;;;;;;;;;:::i;:::-;;;;;;;1597:43;;;;;;;;22524:19:138;;;22568:2;22559:12;;22552:28;22605:2;22596:12;;22367:247;1597:43:130;;;;;;;;;;;;;1587:54;;;;;;1580:61;;1476:270;;;1710:6;;1717:11;;;;:::i;:::-;;;1710:19;;;;;;;;;:::i;:::-;;;;;;;1731:4;1693:43;;;;;;;;22524:19:138;;;22568:2;22559:12;;22552:28;22605:2;22596:12;;22367:247;1693:43:130;;;;;;;;;;;;;1683:54;;;;;;1676:61;;1476:270;1758:5;:10;;1767:1;1758:10;1754:149;;;-1:-1:-1;1787:4:130;1780:11;;1754:149;1821:73;1841:7;1847:1;1841:5;:7;:::i;:::-;1850:5;1854:1;1850:3;:5;:::i;:::-;1857:4;1863:6;;1871:9;1882:11;1892:1;1882:9;:11;:::i;1821:73::-;1814:80;;1754:149;1306:603;;;;;;;;;:::o;2321:198:0:-;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:0;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:0;;22821:2:138;2401:73:0::1;::::0;::::1;22803:21:138::0;22860:2;22840:18;;;22833:30;22899:34;22879:18;;;22872:62;-1:-1:-1;;;22950:18:138;;;22943:36;22996:19;;2401:73:0::1;22619:402:138::0;2401:73:0::1;2484:28;2503:8;2484:18;:28::i;5764:535:130:-:0;-1:-1:-1;;;;;;;;;;;;;;;;;5872:29:130;;5859:9;:42;;5851:73;;;;-1:-1:-1;;;5851:73:130;;23228:2:138;5851:73:130;;;23210:21:138;23267:2;23247:18;;;23240:30;-1:-1:-1;;;23286:18:138;;;23279:48;23344:18;;5851:73:130;23026:342:138;5851:73:130;5938:5;:12;5934:80;;-1:-1:-1;;5978:25:130;;;;;;;;;-1:-1:-1;5978:25:130;;;;;;;;5764:535::o;5934:80::-;6041:5;:12;6029:9;;6041:16;;6056:1;;6041:16;:::i;:::-;6029:28;;6024:226;6102:15;:25;6118:5;6124:1;6118:8;;;;;;;;:::i;:::-;;;;;;;;;6102:25;;;;;;;;;;;:31;;;6089:9;:44;;:90;;;;;6150:15;:25;6166:5;6172:1;6166:8;;;;;;;;:::i;:::-;;;;;;;;;6150:25;;;;;;;;;;;:29;;;6137:9;:42;;6089:90;6084:156;;;6202:15;:25;6218:5;6224:1;6218:8;;;;;;;;:::i;:::-;;;;;;;;;6202:25;;;;;;;;;;;6195:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5764:535;;;:::o;6084:156::-;6067:3;;;;:::i;:::-;;;;6024:226;;4911:437:58;2285:14;;;;;;;;;-1:-1:-1;;;;;2285:14:58;-1:-1:-1;;;;;2285:23:58;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2271:39:58;:10;-1:-1:-1;;;;;2271:39:58;;2263:94;;;;-1:-1:-1;;;2263:94:58;;;;;;;:::i;:::-;5164:7:::1;;5163:8;5141:15;5140:16;5128:7;;5127:8;5126:31;5125:47;5104:150;;;::::0;-1:-1:-1;;;5104:150:58;;23716:2:138;5104:150:58::1;::::0;::::1;23698:21:138::0;23755:2;23735:18;;;23728:30;23794:34;23774:18;;;23767:62;23865:26;23845:18;;;23838:54;23909:19;;5104:150:58::1;23514:420:138::0;5104:150:58::1;5264:7;:25:::0;;;5304:37:::1;::::0;3750:25:138;;;5313:10:58::1;::::0;5304:37:::1;::::0;3738:2:138;3723:18;5304:37:58::1;3604:177:138::0;1915:420:130;3111:19:1;3134:13;;;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:1;;3212:1;3197:12;;;;:16;3179:34;3178:108;;;-1:-1:-1;3258:4:1;1476:19:3;:23;;;3219:66:1;;-1:-1:-1;3268:12:1;;;;;:17;3219:66;3157:201;;;;-1:-1:-1;;;3157:201:1;;24141:2:138;3157:201:1;;;24123:21:138;24180:2;24160:18;;;24153:30;24219:34;24199:18;;;24192:62;-1:-1:-1;;;24270:18:138;;;24263:44;24324:19;;3157:201:1;23939:410:138;3157:201:1;3368:12;:16;;-1:-1:-1;;3368:16:1;3383:1;3368:16;;;3394:65;;;;3428:13;:20;;-1:-1:-1;;3428:20:1;;;;;3394:65;2073:47:130::1;2091:15;2000:1:58;2073:17:130;:47::i;:::-;2130:32;2149:12;2130:18;:32::i;:::-;2204:1;2172:29;:33:::0;;;2225:1:::1;2215:7;:11:::0;;;2236:29:::1;:33:::0;;;;2279:5:::1;:15:::0;;2287:7;;-1:-1:-1;;2279:15:130;;::::1;::::0;2287:7;2279:15;;::::1;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;2304:14:130::1;:24:::0;;-1:-1:-1;;;;;;2304:24:130::1;;-1:-1:-1::0;;;;;2304:24:130;::::1;;;::::0;;3479:99:1;;;;3529:5;3513:21;;-1:-1:-1;;3513:21:1;;;3553:14;;-1:-1:-1;24506:36:138;;3553:14:1;;24494:2:138;24479:18;3553:14:1;;;;;;;;3479:99;3101:483;1915:420:130;;;;:::o;7841:793::-;7918:23;7944:90;7976:12;;;:18;8008:16;;;;7944:18;:90::i;:::-;7918:116;;8044:20;8088:7;8077:19;;;;;;;;:::i;:::-;;;;-1:-1:-1;;8077:19:130;;;;;;;;;8067:30;;8077:19;8067:30;;;;8232:45;;;;;;8067:30;-1:-1:-1;8127:15:130;;8107:17;;8077:19;8190:236;;;;8107:17;8232:45;;;;8266:7;;:9;;;;;;;;;:::i;:::-;;;;-1:-1:-1;8232:45:130;;8190:236;;;8304:19;;;;8190:236;;;;8370:11;;;;8354:27;;;8190:236;;;;;;;;;;;;;;;8455:20;;:23;;;8304:16;8437:42;;;:17;:42;;;;:55;;;;;;8153:273;;-1:-1:-1;8153:273:130;;8437:42;;:55;:42;;-1:-1:-1;;8437:55:130;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;8437:55:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8437:55:130;;;;;;;;;;;;;;;;;;;;;;8555:22;;;8591:26;;;;8507:120;;;;;;24721:25:138;;24789:14;24782:22;24777:2;24762:18;;24755:50;24709:2;24694:18;;24553:258;6024:360:58;-1:-1:-1;;;;;6127:40:58;;6106:160;;;;-1:-1:-1;;;6106:160:58;;25018:2:138;6106:160:58;;;25000:21:138;25057:2;25037:18;;;25030:30;25096:34;25076:18;;;25069:62;25167:34;25147:18;;;25140:62;-1:-1:-1;;;25218:19:138;;;25211:40;25268:19;;6106:160:58;24816:477:138;6106:160:58;6299:14;;6281:52;;;-1:-1:-1;;;;;6299:14:58;;;25558:34:138;;25628:15;;;25623:2;25608:18;;25601:43;6281:52:58;;25493:18:138;6281:52:58;;;;;;;6343:14;:34;;-1:-1:-1;;;;;;6343:34:58;-1:-1:-1;;;;;6343:34:58;;;;;;;;;;6024:360::o;1599:130:0:-;1513:6;;-1:-1:-1;;;;;1513:6:0;929:10:4;1662:23:0;1654:68;;;;-1:-1:-1;;;1654:68:0;;25857:2:138;1654:68:0;;;25839:21:138;;;25876:18;;;25869:30;25935:34;25915:18;;;25908:62;25987:18;;1654:68:0;25655:356:138;2673:187:0;2765:6;;;-1:-1:-1;;;;;2781:17:0;;;-1:-1:-1;;;;;;2781:17:0;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;974:241:24:-;1139:68;;-1:-1:-1;;;;;26274:15:138;;;1139:68:24;;;26256:34:138;26326:15;;26306:18;;;26299:43;26358:18;;;26351:34;;;1112:96:24;;1132:5;;-1:-1:-1;;;1162:27:24;26191:18:138;;1139:68:24;;;;-1:-1:-1;;1139:68:24;;;;;;;;;;;;;;-1:-1:-1;;;;;1139:68:24;-1:-1:-1;;;;;;1139:68:24;;;;;;;;;;1112:19;:96::i;:::-;974:241;;;;:::o;8640:401:130:-;831:42;8733:23;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8733:44:130;;8729:183;;;8792:34;8815:10;8792:22;:34::i;:::-;8729:183;;;8865:36;8890:10;8865:24;:36::i;:::-;8927:106;8955:10;:20;;:23;;;9011:10;9000:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;9000:22:130;;;;;;;;;8990:33;;9000:22;8990:33;;;;3059:25:138;;;3100:18;;3093:34;;;;3032:18;8927:106:130;2885:248:138;2943:441:58;3077:14;;-1:-1:-1;;;;;3077:14:58;3069:37;:79;;;;-1:-1:-1;;;;;;3110:38:58;;;;3069:79;3048:197;;;;-1:-1:-1;;;3048:197:58;;26851:2:138;3048:197:58;;;26833:21:138;26890:2;26870:18;;;26863:30;26929:34;26909:18;;;26902:62;27000:34;26980:18;;;26973:62;-1:-1:-1;;;27051:19:138;;;27044:38;27099:19;;3048:197:58;26649:475:138;3048:197:58;3255:7;:26;;;3296:36;;3750:25:138;;;3303:10:58;;3296:36;;3738:2:138;3723:18;3296:36:58;;;;;;;3342:35;3361:15;3342:18;:35::i;3747:706:24:-;4166:23;4192:69;4220:4;4192:69;;;;;;;;;;;;;;;;;4200:5;-1:-1:-1;;;;;4192:27:24;;;:69;;;;;:::i;:::-;4275:17;;4166:95;;-1:-1:-1;4275:21:24;4271:176;;4370:10;4359:30;;;;;;;;;;;;:::i;:::-;4351:85;;;;-1:-1:-1;;;4351:85:24;;27331:2:138;4351:85:24;;;27313:21:138;27370:2;27350:18;;;27343:30;27409:34;27389:18;;;27382:62;-1:-1:-1;;;27460:18:138;;;27453:40;27510:19;;4351:85:24;27129:406:138;4351:85:24;3817:636;3747:706;;:::o;9047:412:130:-;9172:17;;;;9154:4;9138:30;:51;;9130:92;;;;-1:-1:-1;;;9130:92:130;;27742:2:138;9130:92:130;;;27724:21:138;27781:2;27761:18;;;27754:30;27820;27800:18;;;27793:58;27868:18;;9130:92:130;27540:352:138;9130:92:130;9260:1;9240:10;:17;;;:21;9232:66;;;;-1:-1:-1;;;9232:66:130;;;;;;;:::i;:::-;9308:67;9334:20;;;;;;;;:::i;:::-;9357:10;:17;;;9308;:67::i;:::-;9390:62;9412:20;;;;;;;;:::i;:::-;9390:62;;;-1:-1:-1;;;;;28089:32:138;;;28071:51;;9434:17:130;;;;28153:2:138;28138:18;;28131:34;28044:18;9390:62:130;27897:274:138;9465:527:130;9550:12;9572:23;;;;;;;;:::i;:::-;9614:30;;-1:-1:-1;;;9614:30:130;;9638:4;9614:30;;;2301:51:138;9550:46:130;;-1:-1:-1;9648:17:130;;;;;-1:-1:-1;;;;;9614:15:130;;;;;2274:18:138;;9614:30:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;9606:92;;;;-1:-1:-1;;;9606:92:130;;27742:2:138;9606:92:130;;;27724:21:138;27781:2;27761:18;;;27754:30;27820;27800:18;;;27793:58;27868:18;;9606:92:130;27540:352:138;9606:92:130;9736:1;9716:10;:17;;;:21;9708:66;;;;-1:-1:-1;;;9708:66:130;;;;;;;:::i;:::-;9785:59;9804:20;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9785:18:130;;;9826:17;;;;9785:18;:59::i;:::-;9859:126;9891:20;;;;;;;;:::i;:::-;9923:23;;;;;;;;:::i;:::-;9859:126;;;-1:-1:-1;;;;;26274:15:138;;;26256:34;;26326:15;;;;26321:2;26306:18;;26299:43;9958:17:130;;;;26358:18:138;;;26351:34;26206:2;26191:18;9859:126:130;;;;;;;9540:452;9465:527;:::o;3861:223:25:-;3994:12;4025:52;4047:6;4055:4;4061:1;4064:12;4025:21;:52::i;:::-;4018:59;;3861:223;;;;;;:::o;2412:312::-;2526:6;2501:21;:31;;2493:73;;;;-1:-1:-1;;;2493:73:25;;28567:2:138;2493:73:25;;;28549:21:138;28606:2;28586:18;;;28579:30;28645:31;28625:18;;;28618:59;28694:18;;2493:73:25;28365:353:138;2493:73:25;2578:12;2596:9;-1:-1:-1;;;;;2596:14:25;2618:6;2596:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:52;;;2647:7;2639:78;;;;-1:-1:-1;;;2639:78:25;;29135:2:138;2639:78:25;;;29117:21:138;29174:2;29154:18;;;29147:30;29213:34;29193:18;;;29186:62;29284:28;29264:18;;;29257:56;29330:19;;2639:78:25;28933:422:138;763:205:24;902:58;;-1:-1:-1;;;;;28089:32:138;;902:58:24;;;28071:51:138;28138:18;;;28131:34;;;875:86:24;;895:5;;-1:-1:-1;;;925:23:24;28044:18:138;;902:58:24;27897:274:138;4948:499:25;5113:12;5170:5;5145:21;:30;;5137:81;;;;-1:-1:-1;;;5137:81:25;;29562:2:138;5137:81:25;;;29544:21:138;29601:2;29581:18;;;29574:30;29640:34;29620:18;;;29613:62;-1:-1:-1;;;29691:18:138;;;29684:36;29737:19;;5137:81:25;29360:402:138;5137:81:25;-1:-1:-1;;;;;1476:19:3;;;5228:60:25;;;;-1:-1:-1;;;5228:60:25;;29969:2:138;5228:60:25;;;29951:21:138;30008:2;29988:18;;;29981:30;30047:31;30027:18;;;30020:59;30096:18;;5228:60:25;29767:353:138;5228:60:25;5300:12;5314:23;5341:6;-1:-1:-1;;;;;5341:11:25;5360:5;5367:4;5341:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5299:73;;;;5389:51;5406:7;5415:10;5427:12;7707;7735:7;7731:566;;;-1:-1:-1;7765:10:25;7758:17;;7731:566;7876:17;;:21;7872:415;;8120:10;8114:17;8180:15;8167:10;8163:2;8159:19;8152:44;7872:415;8259:12;8252:20;;-1:-1:-1;;;8252:20:25;;;;;;;;:::i;14:155:138:-;73:5;118:3;109:6;104:3;100:16;96:26;93:46;;;135:1;132;125:12;93:46;-1:-1:-1;157:6:138;14:155;-1:-1:-1;14:155:138:o;174:367::-;237:8;247:6;301:3;294:4;286:6;282:17;278:27;268:55;;319:1;316;309:12;268:55;-1:-1:-1;342:20:138;;385:18;374:30;;371:50;;;417:1;414;407:12;371:50;454:4;446:6;442:17;430:29;;514:3;507:4;497:6;494:1;490:14;482:6;478:27;474:38;471:47;468:67;;;531:1;528;521:12;468:67;174:367;;;;;:::o;546:633::-;677:6;685;693;701;754:3;742:9;733:7;729:23;725:33;722:53;;;771:1;768;761:12;722:53;794;839:7;828:9;794:53;:::i;:::-;784:63;;894:3;883:9;879:19;866:33;856:43;;950:3;939:9;935:19;922:33;978:18;970:6;967:30;964:50;;;1010:1;1007;1000:12;964:50;1049:70;1111:7;1102:6;1091:9;1087:22;1049:70;:::i;:::-;546:633;;;;-1:-1:-1;1138:8:138;-1:-1:-1;;;;546:633:138:o;1184:335::-;1278:6;1286;1330:9;1321:7;1317:23;1360:2;1356;1352:11;1349:31;;;1376:1;1373;1366:12;1349:31;1399:23;;;-1:-1:-1;1456:2:138;-1:-1:-1;;1438:16:138;;1434:25;1431:45;;;1472:1;1469;1462:12;1431:45;;1510:2;1499:9;1495:18;1485:28;;1184:335;;;;;:::o;1524:148::-;-1:-1:-1;;;;;1616:31:138;;1606:42;;1596:70;;1662:1;1659;1652:12;1677:288;1760:6;1813:2;1801:9;1792:7;1788:23;1784:32;1781:52;;;1829:1;1826;1819:12;1781:52;1868:9;1855:23;1887:48;1929:5;1887:48;:::i;1970:180::-;2029:6;2082:2;2070:9;2061:7;2057:23;2053:32;2050:52;;;2098:1;2095;2088:12;2050:52;-1:-1:-1;2121:23:138;;1970:180;-1:-1:-1;1970:180:138:o;2363:332::-;2431:6;2439;2492:2;2480:9;2471:7;2467:23;2463:32;2460:52;;;2508:1;2505;2498:12;2460:52;2547:9;2534:23;2566:48;2608:5;2566:48;:::i;:::-;2633:5;2685:2;2670:18;;;;2657:32;;-1:-1:-1;;;2363:332:138:o;3138:269::-;3195:6;3248:2;3236:9;3227:7;3223:23;3219:32;3216:52;;;3264:1;3261;3254:12;3216:52;3303:9;3290:23;3353:4;3346:5;3342:16;3335:5;3332:27;3322:55;;3373:1;3370;3363:12;3786:248;3854:6;3862;3915:2;3903:9;3894:7;3890:23;3886:32;3883:52;;;3931:1;3928;3921:12;3883:52;-1:-1:-1;;3954:23:138;;;4024:2;4009:18;;;3996:32;;-1:-1:-1;3786:248:138:o;4039:127::-;4100:10;4095:3;4091:20;4088:1;4081:31;4131:4;4128:1;4121:15;4155:4;4152:1;4145:15;4171:209;4251:1;4244:5;4241:12;4231:143;;4296:10;4291:3;4287:20;4284:1;4277:31;4331:4;4328:1;4321:15;4359:4;4356:1;4349:15;4385:213;4464:5;4458:12;4479:33;4509:2;4479:33;:::i;:::-;4521:15;;4585:4;4574:16;;;4568:23;4552:14;;4545:47;4385:213::o;4603:807::-;4672:3;4710:5;4704:12;4737:6;4732:3;4725:19;4763:4;4792:2;4787:3;4783:12;4776:19;;4829:2;4822:5;4818:14;4850:1;4860:525;4874:6;4871:1;4868:13;4860:525;;;4939:6;4933:13;4959:43;4998:3;4993:2;4987:9;4959:43;:::i;:::-;5031:11;;;5025:18;5066:4;5090:12;;;5083:24;;;;5146:11;;5140:18;5226:20;5219:28;5181:4;5205:12;;;5198:50;;;;5290:11;5284:18;5277:4;5268:14;;5261:42;5332:4;5323:14;;;;5360:15;;;;4896:1;4889:9;4860:525;;;-1:-1:-1;5401:3:138;;4603:807;-1:-1:-1;;;;;4603:807:138:o;5415:1500::-;5561:4;5590:2;5619;5608:9;5601:21;5641:3;5682:2;5671:9;5667:18;5710:6;5704:13;5726:33;5756:2;5726:33;:::i;:::-;5775:18;;;5768:30;5833:15;;;5827:22;5868:4;5891:2;5909:18;;;5902:30;;;5981:19;;6009:22;;;;6050:3;;6110:21;;;;6069:18;;;;6149:1;6159:545;6173:6;6170:1;6167:13;6159:545;;;6238:6;6232:13;6258:43;6297:3;6292:2;6286:9;6258:43;:::i;:::-;6342:11;;;6336:18;-1:-1:-1;;;;;6430:23:138;;;6416:12;;;6409:45;6498:11;;;6492:18;6488:27;6474:12;;;6467:49;6556:11;;;6550:18;6536:12;;;6529:40;6609:11;;6603:18;6589:12;;;6582:40;6679:15;;;;6651:4;6642:14;;;;6394:1;6188:9;6159:545;;;-1:-1:-1;;6741:15:138;;;6735:22;6797:19;;;-1:-1:-1;;6793:33:138;6773:18;;;6766:61;6735:22;-1:-1:-1;6844:65:138;6801:3;6735:22;6844:65;:::i;:::-;6836:73;5415:1500;-1:-1:-1;;;;;;;;;;5415:1500:138:o;7421:163::-;7488:20;;7548:10;7537:22;;7527:33;;7517:61;;7574:1;7571;7564:12;7517:61;7421:163;;;:::o;7589:650::-;7700:6;7708;7716;7724;7732;7785:3;7773:9;7764:7;7760:23;7756:33;7753:53;;;7802:1;7799;7792:12;7753:53;7838:9;7825:23;7815:33;;7867:37;7900:2;7889:9;7885:18;7867:37;:::i;:::-;7857:47;;7955:2;7944:9;7940:18;7927:32;7982:18;7974:6;7971:30;7968:50;;;8014:1;8011;8004:12;7968:50;8053:70;8115:7;8106:6;8095:9;8091:22;8053:70;:::i;:::-;8142:8;;-1:-1:-1;8027:96:138;-1:-1:-1;8196:37:138;;-1:-1:-1;8229:2:138;8214:18;;8196:37;:::i;:::-;8186:47;;7589:650;;;;;;;;:::o;8426:234::-;8571:2;8556:18;;8583:37;8613:6;8583:37;:::i;:::-;8629:25;;;8426:234;:::o;8665:479::-;8933:3;8918:19;;8946:46;8922:9;8974:6;8946:46;:::i;:::-;9023:2;9008:18;;9001:34;;;;9078:14;;9071:22;9066:2;9051:18;;9044:50;9125:3;9110:19;;;9103:35;8665:479;;-1:-1:-1;8665:479:138:o;9791:796::-;9918:6;9926;9934;9942;9950;9958;9966;10019:3;10007:9;9998:7;9994:23;9990:33;9987:53;;;10036:1;10033;10026:12;9987:53;10059:28;10077:9;10059:28;:::i;:::-;10049:38;;10106:37;10139:2;10128:9;10124:18;10106:37;:::i;:::-;10096:47;;10190:2;10179:9;10175:18;10162:32;10152:42;;10245:2;10234:9;10230:18;10217:32;10272:18;10264:6;10261:30;10258:50;;;10304:1;10301;10294:12;10258:50;10343:70;10405:7;10396:6;10385:9;10381:22;10343:70;:::i;:::-;10432:8;;-1:-1:-1;10317:96:138;-1:-1:-1;10486:38:138;;-1:-1:-1;10519:3:138;10504:19;;10486:38;:::i;:::-;10476:48;;10543:38;10576:3;10565:9;10561:19;10543:38;:::i;:::-;10533:48;;9791:796;;;;;;;;;;:::o;10892:106::-;10972:1;10965:5;10962:12;10952:40;;10988:1;10985;10978:12;11003:764;11126:6;11134;11142;11150;11203:3;11191:9;11182:7;11178:23;11174:33;11171:53;;;11220:1;11217;11210:12;11171:53;11259:9;11246:23;11278:48;11320:5;11278:48;:::i;:::-;11345:5;-1:-1:-1;11402:2:138;11387:18;;11374:32;11415:50;11374:32;11415:50;:::i;:::-;11484:7;-1:-1:-1;11543:2:138;11528:18;;11515:32;11556:38;11515:32;11556:38;:::i;:::-;11613:7;-1:-1:-1;11672:2:138;11657:18;;11644:32;11685:50;11644:32;11685:50;:::i;:::-;11003:764;;;;-1:-1:-1;11003:764:138;;-1:-1:-1;;11003:764:138:o;11772:352::-;11974:2;11956:21;;;12013:2;11993:18;;;11986:30;12052;12047:2;12032:18;;12025:58;12115:2;12100:18;;11772:352::o;12129:355::-;12331:2;12313:21;;;12370:2;12350:18;;;12343:30;12409:33;12404:2;12389:18;;12382:61;12475:2;12460:18;;12129:355::o;12837:298::-;12937:5;12924:19;12952:38;12982:7;12952:38;:::i;:::-;12999;13029:7;12999:38;:::i;:::-;13046:20;;13122:4;13111:16;;;13098:30;13082:14;;13075:54;12837:298::o;13140:466::-;13326:3;13311:19;;13339:55;13315:9;13376:6;13339:55;:::i;:::-;13457:4;13449:6;13445:17;13432:31;13425:4;13414:9;13410:20;13403:61;13525:2;13517:6;13513:15;13500:29;13495:2;13484:9;13480:18;13473:57;13593:4;13585:6;13581:17;13568:31;13561:4;13550:9;13546:20;13539:61;13140:466;;;;:::o;13957:127::-;14018:10;14013:3;14009:20;14006:1;13999:31;14049:4;14046:1;14039:15;14073:4;14070:1;14063:15;14089:125;14129:4;14157:1;14154;14151:8;14148:34;;;14162:18;;:::i;:::-;-1:-1:-1;14199:9:138;;14089:125::o;14219:128::-;14259:3;14290:1;14286:6;14283:1;14280:13;14277:39;;;14296:18;;:::i;:::-;-1:-1:-1;14332:9:138;;14219:128::o;16322:268::-;16392:6;16445:2;16433:9;16424:7;16420:23;16416:32;16413:52;;;16461:1;16458;16451:12;16413:52;16493:9;16487:16;16512:48;16554:5;16512:48;:::i;16595:406::-;16797:2;16779:21;;;16836:2;16816:18;;;16809:30;16875:34;16870:2;16855:18;;16848:62;-1:-1:-1;;;16941:2:138;16926:18;;16919:40;16991:3;16976:19;;16595:406::o;17006:277::-;17073:6;17126:2;17114:9;17105:7;17101:23;17097:32;17094:52;;;17142:1;17139;17132:12;17094:52;17174:9;17168:16;17227:5;17220:13;17213:21;17206:5;17203:32;17193:60;;17249:1;17246;17239:12;17288:404;17490:2;17472:21;;;17529:2;17509:18;;;17502:30;17568:34;17563:2;17548:18;;17541:62;-1:-1:-1;;;17634:2:138;17619:18;;17612:38;17682:3;17667:19;;17288:404::o;18122:135::-;18161:3;-1:-1:-1;;18182:17:138;;18179:43;;;18202:18;;:::i;:::-;-1:-1:-1;18249:1:138;18238:13;;18122:135::o;18262:127::-;18323:10;18318:3;18314:20;18311:1;18304:31;18354:4;18351:1;18344:15;18378:4;18375:1;18368:15;18394:127;18455:10;18450:3;18446:20;18443:1;18436:31;18486:4;18483:1;18476:15;18510:4;18507:1;18500:15;18949:127;19010:10;19005:3;19001:20;18998:1;18991:31;19041:4;19038:1;19031:15;19065:4;19062:1;19055:15;19081:191;19120:1;19146:10;19183:2;19180:1;19176:10;19205:3;19195:37;;19212:18;;:::i;:::-;19250:10;;19246:20;;;;;19081:191;-1:-1:-1;;19081:191:138:o;19277:228::-;19316:3;19344:10;19381:2;19378:1;19374:10;19411:2;19408:1;19404:10;19442:3;19438:2;19434:12;19429:3;19426:21;19423:47;;;19450:18;;:::i;:::-;19486:13;;19277:228;-1:-1:-1;;;;19277:228:138:o;19510:221::-;19549:4;19578:10;19638;;;;19608;;19660:12;;;19657:38;;;19675:18;;:::i;:::-;19712:13;;19510:221;-1:-1:-1;;;19510:221:138:o;20899:356::-;21101:2;21083:21;;;21120:18;;;21113:30;21179:34;21174:2;21159:18;;21152:62;21246:2;21231:18;;20899:356::o;21260:708::-;21454:3;21439:19;;21467:55;21443:9;21504:6;21467:55;:::i;:::-;21569:4;21561:6;21557:17;21544:31;21584:48;21626:5;21584:48;:::i;:::-;-1:-1:-1;;;;;21708:14:138;;;21701:4;21686:20;;21679:44;21772:4;21760:17;;21747:31;;21787:50;21747:31;21787:50;:::i;:::-;21875:16;21868:4;21853:20;;21846:46;21955:4;21943:17;;;21930:31;21908:20;;;;21901:61;;;;21260:708;:::o;21973:183::-;22004:1;22030:10;22067:2;22064:1;22060:10;22089:3;22079:37;;22096:18;;:::i;:::-;22134:10;;22130:20;;;;;21973:183;-1:-1:-1;;21973:183:138:o;22161:201::-;22199:3;22227:10;22272:2;22265:5;22261:14;22299:2;22290:7;22287:15;22284:41;;;22305:18;;:::i;:::-;22354:1;22341:15;;22161:201;-1:-1:-1;;;22161:201:138:o;23373:136::-;23412:3;23440:5;23430:39;;23449:18;;:::i;:::-;-1:-1:-1;;;23485:18:138;;23373:136::o;28176:184::-;28246:6;28299:2;28287:9;28278:7;28274:23;28270:32;28267:52;;;28315:1;28312;28305:12;28267:52;-1:-1:-1;28338:16:138;;28176:184;-1:-1:-1;28176:184:138:o;30125:258::-;30197:1;30207:113;30221:6;30218:1;30215:13;30207:113;;;30297:11;;;30291:18;30278:11;;;30271:39;30243:2;30236:10;30207:113;;;30338:6;30335:1;30332:13;30329:48;;;-1:-1:-1;;30373:1:138;30355:16;;30348:27;30125:258::o;30388:274::-;30517:3;30555:6;30549:13;30571:53;30617:6;30612:3;30605:4;30597:6;30593:17;30571:53;:::i;:::-;30640:16;;;;;30388:274;-1:-1:-1;;30388:274:138:o;30667:383::-;30816:2;30805:9;30798:21;30779:4;30848:6;30842:13;30891:6;30886:2;30875:9;30871:18;30864:34;30907:66;30966:6;30961:2;30950:9;30946:18;30941:2;30933:6;30929:15;30907:66;:::i;:::-;31034:2;31013:15;-1:-1:-1;;31009:29:138;30994:45;;;;31041:2;30990:54;;30667:383;-1:-1:-1;;30667:383:138:o","linkReferences":{}},"methodIdentifiers":{"ETH_TOKEN_ADDRESS()":"1878d1f1","calculate_root(bytes32,uint32,bytes32[],uint32)":"af26c695","calculate_root_impl(uint32,uint32,bytes32,bytes32[],uint32,uint32)":"ef0ba5d0","cancelResolutions(uint256)":"ca9b21ae","chain()":"c763e5a1","close_cancel(((uint8,uint256),(uint256,uint256),bytes32),bytes32,bytes32[])":"01ef6966","close_withdrawal(((uint8,uint256),address,address,uint256),bytes32,bytes32[])":"dfb0b12b","counter()":"61bc221a","deposit(address,uint256)":"47e7ef24","deposit_erc20(address,uint256)":"d16544f0","deposit_native()":"c87c2224","find_l2_batch(uint256)":"f9ecd01e","getPendingRequests(uint256,uint256)":"79e041f2","getUpdateForL2()":"b1538706","initialize(address,address,uint8,address)":"ffea632b","lastProcessedUpdate_origin_l1()":"7fd4f845","lastProcessedUpdate_origin_l2()":"f26ee9d0","merkleRootRange(bytes32)":"4f48eedf","owner()":"8da5cb5b","pause(uint256)":"136439dd","pauseAll()":"595c6a67","paused()":"5c975abb","paused(uint8)":"5ac86ab7","pauserRegistry()":"886f1195","processedL2Requests(uint256)":"a555980b","renounceOwnership()":"715018a6","setPauserRegistry(address)":"10d67a2f","setUpdater(address)":"9d54f419","transferOwnership(address)":"f2fde38b","unpause(uint256)":"fabc1cbc","update_l1_from_l2(bytes32,(uint256,uint256))":"08f42d40","updaterAccount()":"71c54461"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"depositRecipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"DepositAcceptedIntoQueue\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"cancelJustified\",\"type\":\"bool\"}],\"name\":\"DisputeResolutionAcceptedIntoQueue\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ERC20TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NativeTokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updater\",\"type\":\"address\"}],\"name\":\"NewUpdaterSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IPauserRegistry\",\"name\":\"pauserRegistry\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"PauserRegistrySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"}],\"name\":\"WithdrawalClosed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ETH_TOKEN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"leave_hash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"leave_idx\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint32\",\"name\":\"leaves_count\",\"type\":\"uint32\"}],\"name\":\"calculate_root\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"level\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pos\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint32\",\"name\":\"proof_idx\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"max_index\",\"type\":\"uint32\"}],\"name\":\"calculate_root_impl\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"cancelResolutions\",\"outputs\":[{\"components\":[{\"internalType\":\"enum IRolldownPrimitives.Origin\",\"name\":\"origin\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"internalType\":\"struct IRolldownPrimitives.RequestId\",\"name\":\"requestId\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"l2RequestId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"cancelJustified\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"timeStamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chain\",\"outputs\":[{\"internalType\":\"enum IRolldownPrimitives.ChainId\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"enum IRolldownPrimitives.Origin\",\"name\":\"origin\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"internalType\":\"struct IRolldownPrimitives.RequestId\",\"name\":\"requestId\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"}],\"internalType\":\"struct IRolldownPrimitives.Range\",\"name\":\"range\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"internalType\":\"struct IRolldownPrimitives.Cancel\",\"name\":\"cancel\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkle_root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"close_cancel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"enum IRolldownPrimitives.Origin\",\"name\":\"origin\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"internalType\":\"struct IRolldownPrimitives.RequestId\",\"name\":\"requestId\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct IRolldownPrimitives.Withdrawal\",\"name\":\"withdrawal\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkle_root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"close_withdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"counter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit_erc20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit_native\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"}],\"name\":\"find_l2_batch\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"}],\"internalType\":\"struct IRolldownPrimitives.Range\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"}],\"name\":\"getPendingRequests\",\"outputs\":[{\"components\":[{\"internalType\":\"enum IRolldownPrimitives.ChainId\",\"name\":\"chain\",\"type\":\"uint8\"},{\"components\":[{\"components\":[{\"internalType\":\"enum IRolldownPrimitives.Origin\",\"name\":\"origin\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"internalType\":\"struct IRolldownPrimitives.RequestId\",\"name\":\"requestId\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"depositRecipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeStamp\",\"type\":\"uint256\"}],\"internalType\":\"struct IRolldownPrimitives.Deposit[]\",\"name\":\"pendingDeposits\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"enum IRolldownPrimitives.Origin\",\"name\":\"origin\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"internalType\":\"struct IRolldownPrimitives.RequestId\",\"name\":\"requestId\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"l2RequestId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"cancelJustified\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"timeStamp\",\"type\":\"uint256\"}],\"internalType\":\"struct IRolldownPrimitives.CancelResolution[]\",\"name\":\"pendingCancelResolutions\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IRolldownPrimitives.L1Update\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUpdateForL2\",\"outputs\":[{\"components\":[{\"internalType\":\"enum IRolldownPrimitives.ChainId\",\"name\":\"chain\",\"type\":\"uint8\"},{\"components\":[{\"components\":[{\"internalType\":\"enum IRolldownPrimitives.Origin\",\"name\":\"origin\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"internalType\":\"struct IRolldownPrimitives.RequestId\",\"name\":\"requestId\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"depositRecipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeStamp\",\"type\":\"uint256\"}],\"internalType\":\"struct IRolldownPrimitives.Deposit[]\",\"name\":\"pendingDeposits\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"enum IRolldownPrimitives.Origin\",\"name\":\"origin\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"internalType\":\"struct IRolldownPrimitives.RequestId\",\"name\":\"requestId\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"l2RequestId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"cancelJustified\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"timeStamp\",\"type\":\"uint256\"}],\"internalType\":\"struct IRolldownPrimitives.CancelResolution[]\",\"name\":\"pendingCancelResolutions\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IRolldownPrimitives.L1Update\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPauserRegistry\",\"name\":\"_pauserRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"enum IRolldownPrimitives.ChainId\",\"name\":\"chainId\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"updater\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastProcessedUpdate_origin_l1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastProcessedUpdate_origin_l2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"merkleRootRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauserRegistry\",\"outputs\":[{\"internalType\":\"contract IPauserRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"processedL2Requests\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"setPauserRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"updater\",\"type\":\"address\"}],\"name\":\"setUpdater\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"merkle_root\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"}],\"internalType\":\"struct IRolldownPrimitives.Range\",\"name\":\"range\",\"type\":\"tuple\"}],\"name\":\"update_l1_from_l2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updaterAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pause(uint256)\":{\"details\":\"This function can only pause functionality, and thus cannot 'unflip' any bit in `_paused` from 1 to 0.\",\"params\":{\"newPausedStatus\":\"represents the new value for `_paused` to take, which means it may flip several bits at once.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"unpause(uint256)\":{\"details\":\"This function can only unpause functionality, and thus cannot 'flip' any bit in `_paused` from 0 to 1.\",\"params\":{\"newPausedStatus\":\"represents the new value for `_paused` to take, which means it may flip several bits at once.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"Paused(address,uint256)\":{\"notice\":\"Emitted when the pause is triggered by `account`, and changed to `newPausedStatus`.\"},\"PauserRegistrySet(address,address)\":{\"notice\":\"Emitted when the `pauserRegistry` is set to `newPauserRegistry`.\"},\"Unpaused(address,uint256)\":{\"notice\":\"Emitted when the pause is lifted by `account`, and changed to `newPausedStatus`.\"}},\"kind\":\"user\",\"methods\":{\"pause(uint256)\":{\"notice\":\"This function is used to pause an EigenLayer contract's functionality. It is permissioned to the `pauser` address, which is expected to be a low threshold multisig.\"},\"pauseAll()\":{\"notice\":\"Alias for `pause(type(uint256).max)`.\"},\"paused()\":{\"notice\":\"Returns the current paused status as a uint256.\"},\"paused(uint8)\":{\"notice\":\"Returns 'true' if the `indexed`th bit of `_paused` is 1, and 'false' otherwise\"},\"pauserRegistry()\":{\"notice\":\"Address of the `PauserRegistry` contract that this contract defers to for determining access control (for pausing).\"},\"setPauserRegistry(address)\":{\"notice\":\"Allows the unpauser to set a new pauser registry\"},\"unpause(uint256)\":{\"notice\":\"This function is used to unpause an EigenLayer contract's functionality. It is permissioned to the `unpauser` address, which is expected to be a high threshold multisig or governance contract.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Rolldown.sol\":\"Rolldown\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@eigenlayer-middleware/=lib/eigenlayer-middleware/\",\":@eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/\",\":@eigenlayer/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/\",\":@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/\",\":@openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/\",\":eigenlayer-middleware/=lib/eigenlayer-middleware/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0x0e9621f60b2faabe65549f7ed0f24e8853a45c1b7990d47e8160e523683f3935\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://287a2f8d5814dd0f05f22b740f18ca8321acc21c9bd03a6cb2203ea626e2f3f2\",\"dweb:/ipfs/QmZRQv9iuwU817VuqkA2WweiaibKii69x9QxYBBEfbNEud\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x032807210d1d7d218963d7355d62e021a84bf1b3339f4f50be2f63b53cccaf29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11756f42121f6541a35a8339ea899ee7514cfaa2e6d740625fcc844419296aa6\",\"dweb:/ipfs/QmekMuk6BY4DAjzeXr4MSbKdgoqqsZnA8JPtuyWc6CwXHf\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638\",\"dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324\",\"dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol\":{\"keccak256\":\"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d\",\"dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/permissions/Pausable.sol\":{\"keccak256\":\"0xc543d34b3e0fd116227fc5218286de6b30a9141f47df2e8cc17d857d2c0cb338\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://e78ca3c3c9f14ccde852ea41bc411726ea7770a1cf2ef18851e67bcdf7522cff\",\"dweb:/ipfs/QmWagcWsaNZqBZhdEHhZ4PcU9fx5wQnrbjoaaFvjEwgGHt\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70\",\"dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec\"]},\"src/IRolldown.sol\":{\"keccak256\":\"0x33b290caba61fd424ce628c961e103eabce5a339c2db19ce3903eaa2286dba71\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://33964a20189dd2a7e1f95a4aa28083b8879aa8c71a06dc3e87677c2445281b59\",\"dweb:/ipfs/QmXaFEH93cus3EyiDJrKNZ7RtrjdjSU7TEEeg4FQGJaa4d\"]},\"src/IRolldownPrimitives.sol\":{\"keccak256\":\"0xbc8b48e4d05032618a93a4247325d26e7b8e9b44a31b8811fff43ec67db5b73c\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://25d91dbd6c5b2da4c5a61404395c91705f4f26ad2e0f3210398e23c4cdd0a55e\",\"dweb:/ipfs/Qmc4B7G9xV3eQvxX4uEft6BLvZdFGxVoJV2A2P77tX7QGP\"]},\"src/Rolldown.sol\":{\"keccak256\":\"0xbdceedf3af1d4c7a4caf9388fa9b5ac053505d1fca4c093c0dba88fcad79e201\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c371ae104a84b5b5e7ae987b2b75fa0b544d5c7123ed2dee9481d7b49e250154\",\"dweb:/ipfs/QmNpRtYDmj2FMRozynsh7MKrECYyd1GugYfWaJJDtpJpou\"]},\"src/RolldownStorage.sol\":{\"keccak256\":\"0x4b3b649a7f740587c1f488b4c0bb3ed8d996cacafef5307970e7cf54a3001e39\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://49774ff2771b113aa0dd823bdedd14b6223ac584fe8f274415c46e6952efcd2a\",\"dweb:/ipfs/QmVsJ8thWuhcAC5aPLhKPKR85aXUWqjZPrKnahwuygpyRS\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.12+commit.f00d7308"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256","indexed":false},{"internalType":"address","name":"depositRecipient","type":"address","indexed":false},{"internalType":"address","name":"tokenAddress","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"DepositAcceptedIntoQueue","anonymous":false},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256","indexed":false},{"internalType":"bool","name":"cancelJustified","type":"bool","indexed":false}],"type":"event","name":"DisputeResolutionAcceptedIntoQueue","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"address","name":"token_address","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"ERC20TokensWithdrawn","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"NativeTokensWithdrawn","anonymous":false},{"inputs":[{"internalType":"address","name":"updater","type":"address","indexed":false}],"type":"event","name":"NewUpdaterSet","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"uint256","name":"newPausedStatus","type":"uint256","indexed":false}],"type":"event","name":"Paused","anonymous":false},{"inputs":[{"internalType":"contract IPauserRegistry","name":"pauserRegistry","type":"address","indexed":false},{"internalType":"contract IPauserRegistry","name":"newPauserRegistry","type":"address","indexed":false}],"type":"event","name":"PauserRegistrySet","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"uint256","name":"newPausedStatus","type":"uint256","indexed":false}],"type":"event","name":"Unpaused","anonymous":false},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256","indexed":false},{"internalType":"bytes32","name":"withdrawalHash","type":"bytes32","indexed":false}],"type":"event","name":"WithdrawalClosed","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"ETH_TOKEN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"leave_hash","type":"bytes32"},{"internalType":"uint32","name":"leave_idx","type":"uint32"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint32","name":"leaves_count","type":"uint32"}],"stateMutability":"pure","type":"function","name":"calculate_root","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint32","name":"level","type":"uint32"},{"internalType":"uint32","name":"pos","type":"uint32"},{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes32[]","name":"proofs","type":"bytes32[]"},{"internalType":"uint32","name":"proof_idx","type":"uint32"},{"internalType":"uint32","name":"max_index","type":"uint32"}],"stateMutability":"pure","type":"function","name":"calculate_root_impl","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"cancelResolutions","outputs":[{"internalType":"struct IRolldownPrimitives.RequestId","name":"requestId","type":"tuple","components":[{"internalType":"enum IRolldownPrimitives.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}]},{"internalType":"uint256","name":"l2RequestId","type":"uint256"},{"internalType":"bool","name":"cancelJustified","type":"bool"},{"internalType":"uint256","name":"timeStamp","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"chain","outputs":[{"internalType":"enum IRolldownPrimitives.ChainId","name":"","type":"uint8"}]},{"inputs":[{"internalType":"struct IRolldownPrimitives.Cancel","name":"cancel","type":"tuple","components":[{"internalType":"struct IRolldownPrimitives.RequestId","name":"requestId","type":"tuple","components":[{"internalType":"enum IRolldownPrimitives.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}]},{"internalType":"struct IRolldownPrimitives.Range","name":"range","type":"tuple","components":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}]},{"internalType":"bytes32","name":"hash","type":"bytes32"}]},{"internalType":"bytes32","name":"merkle_root","type":"bytes32"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"stateMutability":"nonpayable","type":"function","name":"close_cancel"},{"inputs":[{"internalType":"struct IRolldownPrimitives.Withdrawal","name":"withdrawal","type":"tuple","components":[{"internalType":"struct IRolldownPrimitives.RequestId","name":"requestId","type":"tuple","components":[{"internalType":"enum IRolldownPrimitives.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}]},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}]},{"internalType":"bytes32","name":"merkle_root","type":"bytes32"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"stateMutability":"nonpayable","type":"function","name":"close_withdrawal"},{"inputs":[],"stateMutability":"view","type":"function","name":"counter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"deposit"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"deposit_erc20"},{"inputs":[],"stateMutability":"payable","type":"function","name":"deposit_native"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"stateMutability":"view","type":"function","name":"find_l2_batch","outputs":[{"internalType":"struct IRolldownPrimitives.Range","name":"","type":"tuple","components":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}]}]},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"stateMutability":"view","type":"function","name":"getPendingRequests","outputs":[{"internalType":"struct IRolldownPrimitives.L1Update","name":"","type":"tuple","components":[{"internalType":"enum IRolldownPrimitives.ChainId","name":"chain","type":"uint8"},{"internalType":"struct IRolldownPrimitives.Deposit[]","name":"pendingDeposits","type":"tuple[]","components":[{"internalType":"struct IRolldownPrimitives.RequestId","name":"requestId","type":"tuple","components":[{"internalType":"enum IRolldownPrimitives.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}]},{"internalType":"address","name":"depositRecipient","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timeStamp","type":"uint256"}]},{"internalType":"struct IRolldownPrimitives.CancelResolution[]","name":"pendingCancelResolutions","type":"tuple[]","components":[{"internalType":"struct IRolldownPrimitives.RequestId","name":"requestId","type":"tuple","components":[{"internalType":"enum IRolldownPrimitives.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}]},{"internalType":"uint256","name":"l2RequestId","type":"uint256"},{"internalType":"bool","name":"cancelJustified","type":"bool"},{"internalType":"uint256","name":"timeStamp","type":"uint256"}]}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getUpdateForL2","outputs":[{"internalType":"struct IRolldownPrimitives.L1Update","name":"","type":"tuple","components":[{"internalType":"enum IRolldownPrimitives.ChainId","name":"chain","type":"uint8"},{"internalType":"struct IRolldownPrimitives.Deposit[]","name":"pendingDeposits","type":"tuple[]","components":[{"internalType":"struct IRolldownPrimitives.RequestId","name":"requestId","type":"tuple","components":[{"internalType":"enum IRolldownPrimitives.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}]},{"internalType":"address","name":"depositRecipient","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timeStamp","type":"uint256"}]},{"internalType":"struct IRolldownPrimitives.CancelResolution[]","name":"pendingCancelResolutions","type":"tuple[]","components":[{"internalType":"struct IRolldownPrimitives.RequestId","name":"requestId","type":"tuple","components":[{"internalType":"enum IRolldownPrimitives.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}]},{"internalType":"uint256","name":"l2RequestId","type":"uint256"},{"internalType":"bool","name":"cancelJustified","type":"bool"},{"internalType":"uint256","name":"timeStamp","type":"uint256"}]}]}]},{"inputs":[{"internalType":"contract IPauserRegistry","name":"_pauserRegistry","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"enum IRolldownPrimitives.ChainId","name":"chainId","type":"uint8"},{"internalType":"address","name":"updater","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"lastProcessedUpdate_origin_l1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"lastProcessedUpdate_origin_l2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"merkleRootRange","outputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"pause"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pauseAll"},{"inputs":[{"internalType":"uint8","name":"index","type":"uint8"}],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"pauserRegistry","outputs":[{"internalType":"contract IPauserRegistry","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"processedL2Requests","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"contract IPauserRegistry","name":"newPauserRegistry","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setPauserRegistry"},{"inputs":[{"internalType":"address","name":"updater","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setUpdater"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"unpause"},{"inputs":[{"internalType":"bytes32","name":"merkle_root","type":"bytes32"},{"internalType":"struct IRolldownPrimitives.Range","name":"range","type":"tuple","components":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"update_l1_from_l2"},{"inputs":[],"stateMutability":"view","type":"function","name":"updaterAccount","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"pause(uint256)":{"details":"This function can only pause functionality, and thus cannot 'unflip' any bit in `_paused` from 1 to 0.","params":{"newPausedStatus":"represents the new value for `_paused` to take, which means it may flip several bits at once."}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"unpause(uint256)":{"details":"This function can only unpause functionality, and thus cannot 'flip' any bit in `_paused` from 0 to 1.","params":{"newPausedStatus":"represents the new value for `_paused` to take, which means it may flip several bits at once."}}},"version":1},"userdoc":{"kind":"user","methods":{"pause(uint256)":{"notice":"This function is used to pause an EigenLayer contract's functionality. It is permissioned to the `pauser` address, which is expected to be a low threshold multisig."},"pauseAll()":{"notice":"Alias for `pause(type(uint256).max)`."},"paused()":{"notice":"Returns the current paused status as a uint256."},"paused(uint8)":{"notice":"Returns 'true' if the `indexed`th bit of `_paused` is 1, and 'false' otherwise"},"pauserRegistry()":{"notice":"Address of the `PauserRegistry` contract that this contract defers to for determining access control (for pausing)."},"setPauserRegistry(address)":{"notice":"Allows the unpauser to set a new pauser registry"},"unpause(uint256)":{"notice":"This function is used to unpause an EigenLayer contract's functionality. It is permissioned to the `unpauser` address, which is expected to be a high threshold multisig or governance contract."}},"version":1}},"settings":{"remappings":["@eigenlayer-middleware/=lib/eigenlayer-middleware/","@eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/","@eigenlayer/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/","@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/","@openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/","eigenlayer-middleware/=lib/eigenlayer-middleware/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Rolldown.sol":"Rolldown"},"evmVersion":"london","libraries":{}},"sources":{"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888","urls":["bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a","dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149","urls":["bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c","dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol":{"keccak256":"0x0e9621f60b2faabe65549f7ed0f24e8853a45c1b7990d47e8160e523683f3935","urls":["bzz-raw://287a2f8d5814dd0f05f22b740f18ca8321acc21c9bd03a6cb2203ea626e2f3f2","dweb:/ipfs/QmZRQv9iuwU817VuqkA2WweiaibKii69x9QxYBBEfbNEud"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b","urls":["bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34","dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol":{"keccak256":"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329","urls":["bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95","dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x032807210d1d7d218963d7355d62e021a84bf1b3339f4f50be2f63b53cccaf29","urls":["bzz-raw://11756f42121f6541a35a8339ea899ee7514cfaa2e6d740625fcc844419296aa6","dweb:/ipfs/QmekMuk6BY4DAjzeXr4MSbKdgoqqsZnA8JPtuyWc6CwXHf"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10","urls":["bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487","dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3","urls":["bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638","dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol":{"keccak256":"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f","urls":["bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324","dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol":{"keccak256":"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49","urls":["bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d","dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/permissions/Pausable.sol":{"keccak256":"0xc543d34b3e0fd116227fc5218286de6b30a9141f47df2e8cc17d857d2c0cb338","urls":["bzz-raw://e78ca3c3c9f14ccde852ea41bc411726ea7770a1cf2ef18851e67bcdf7522cff","dweb:/ipfs/QmWagcWsaNZqBZhdEHhZ4PcU9fx5wQnrbjoaaFvjEwgGHt"],"license":"BUSL-1.1"},"lib/forge-std/src/console.sol":{"keccak256":"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba","urls":["bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70","dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec"],"license":"MIT"},"src/IRolldown.sol":{"keccak256":"0x33b290caba61fd424ce628c961e103eabce5a339c2db19ce3903eaa2286dba71","urls":["bzz-raw://33964a20189dd2a7e1f95a4aa28083b8879aa8c71a06dc3e87677c2445281b59","dweb:/ipfs/QmXaFEH93cus3EyiDJrKNZ7RtrjdjSU7TEEeg4FQGJaa4d"],"license":"UNLICENSED"},"src/IRolldownPrimitives.sol":{"keccak256":"0xbc8b48e4d05032618a93a4247325d26e7b8e9b44a31b8811fff43ec67db5b73c","urls":["bzz-raw://25d91dbd6c5b2da4c5a61404395c91705f4f26ad2e0f3210398e23c4cdd0a55e","dweb:/ipfs/Qmc4B7G9xV3eQvxX4uEft6BLvZdFGxVoJV2A2P77tX7QGP"],"license":"UNLICENSED"},"src/Rolldown.sol":{"keccak256":"0xbdceedf3af1d4c7a4caf9388fa9b5ac053505d1fca4c093c0dba88fcad79e201","urls":["bzz-raw://c371ae104a84b5b5e7ae987b2b75fa0b544d5c7123ed2dee9481d7b49e250154","dweb:/ipfs/QmNpRtYDmj2FMRozynsh7MKrECYyd1GugYfWaJJDtpJpou"],"license":"BUSL-1.1"},"src/RolldownStorage.sol":{"keccak256":"0x4b3b649a7f740587c1f488b4c0bb3ed8d996cacafef5307970e7cf54a3001e39","urls":["bzz-raw://49774ff2771b113aa0dd823bdedd14b6223ac584fe8f274415c46e6952efcd2a","dweb:/ipfs/QmVsJ8thWuhcAC5aPLhKPKR85aXUWqjZPrKnahwuygpyRS"],"license":"BUSL-1.1"}},"version":1},"id":130}
\ No newline at end of file
diff --git a/stash/src/app.ts b/stash/src/app.ts
index af31bb3d..f2cd0d9c 100644
--- a/stash/src/app.ts
+++ b/stash/src/app.ts
@@ -14,6 +14,7 @@ import * as liquidStakingController from './controller/liquidStakingController.j
import * as networkController from './controller/networkController.js'
import * as tokenNetworkPortfolioController from './controller/tokenNetworkPortfolioController.js'
import * as faucetController from './controller/FaucetController.js'
+import * as tracingController from './controller/TracingController.js'
import { createRequire } from 'module'
const require = createRequire(import.meta.url)
@@ -87,12 +88,12 @@ app.get(
app.get('/coingecko/pairs', coingeckoController.pairs)
app.get('/coingecko/tickers', coingeckoController.tickers)
- app.get('/affirmed-network/list', networkController.networkList)
- app.get('/affirmed-token/list', networkController.tokenList)
- app.get(
- '/account/:address/token-portfolio',
- tokenNetworkPortfolioController.tokenNetworkPortfolio
- )
+app.get('/affirmed-network/list', networkController.networkList)
+app.get('/affirmed-token/list', networkController.tokenList)
+app.get(
+ '/account/:address/token-portfolio',
+ tokenNetworkPortfolioController.tokenNetworkPortfolio
+)
//Faucet endpoint
app.get(
@@ -100,6 +101,30 @@ app.get(
faucetController.captcha
)
+// Tracing endpoints
+app.post('/tracing/tx/start', tracingController.startTracing)
+
+app.get(
+ '/tracing/tx/:txHashOrEntityId',
+ tracingController.getTransactionStatusByTxHashOrEntityId
+)
+
+app.get(
+ '/tracing/tx/listByAddress/:address',
+ tracingController.getAllTransactionsByAddress
+)
+
+app.get(
+ '/tracing/tx/listByAddress/:address/:status',
+ tracingController.getAllTransactionsByAddressAndStatus
+)
+
+app.get(
+ '/tracing/tx/findByEntityId/:entityId',
+
+ tracingController.getATransactionByEntityId
+)
+
// Coinmarketcap listing endpoints
app.get('/coinmarketcap/v1/summary', coinmarketcapController.summary)
diff --git a/stash/src/connector/RedisConnector.ts b/stash/src/connector/RedisConnector.ts
index a852c2b4..96b35bff 100644
--- a/stash/src/connector/RedisConnector.ts
+++ b/stash/src/connector/RedisConnector.ts
@@ -32,3 +32,10 @@ export const timeseries = new RedisClient(
parseInt(process.env.TIMESERIES_PORT),
process.env.TIMESERIES_PASS
)
+
+export function getTimeseriesUrl(): string {
+ const host = process.env.TIMESERIES_HOST
+ const port = parseInt(process.env.TIMESERIES_PORT)
+ const pass = process.env.TIMESERIES_PASS
+ return `redis://:${pass}@${host}:${port}`
+}
diff --git a/stash/src/controller/TracingController.ts b/stash/src/controller/TracingController.ts
new file mode 100644
index 00000000..4d3bafe2
--- /dev/null
+++ b/stash/src/controller/TracingController.ts
@@ -0,0 +1,229 @@
+import { Request, Response } from 'express'
+import {
+ findTransactionsByAddressAndStatus,
+ getStatusByTxHashOrEntityId,
+ getTransactionByEntityId,
+ getTransactionsByAddress,
+ startTracingTransaction,
+} from '../service/TracingService.js'
+import {
+ getAllTransactionsByAddressAndStatusSchema,
+ getAllTransactionsByAddressSchema,
+ getStatusByTxHashOrEntityIdSchema,
+ getTransactionByEntityIdSchema,
+ startTracingSchema,
+} from '../schema/TracingSchema.js'
+import * as errorHandler from '../error/Handler.js'
+
+export const startTracing = async (req: Request, res: Response) => {
+ /*
+ #swagger.tags = ['Tracing']
+ #swagger.summary = 'Start tracing a transaction.'
+ #swagger.description = "Start tracing a transaction by providing transaction details."
+ #swagger.parameters['body'] = {
+ in: 'body',
+ description: 'Transaction details',
+ required: true,
+ schema: {
+ txHash: 'string',
+ address: 'string',
+ type: 'string',
+ chain: 'string',
+ amount: 'number',
+ asset_chainId: 'string',
+ asset_address: 'string'
+ }
+ }
+ #swagger.responses[200] = {
+ description: 'Successful response with transaction details'
+ }
+ #swagger.responses[400] = {
+ description: 'Validation error'
+ }
+ #swagger.responses[500] = {
+ description: 'Internal Server Error'
+ }
+ */
+ const { txHash, address, type, chain, amount, asset_chainId, asset_address } =
+ req.body
+ try {
+ startTracingSchema.validate({
+ txHash,
+ address,
+ type,
+ chain,
+ amount,
+ asset_chainId,
+ asset_address,
+ })
+ const transaction = await startTracingTransaction({
+ txHash,
+ address,
+ type,
+ chain,
+ amount,
+ asset_chainId,
+ asset_address,
+ })
+ return res.json({ transaction })
+ } catch (e) {
+ await errorHandler.handle(res, e)
+ }
+}
+
+export const getTransactionStatusByTxHashOrEntityId = async (
+ req: Request,
+ res: Response
+) => {
+ /*
+ #swagger.tags = ['Tracing']
+ #swagger.summary = 'Get transaction status by txHash or entityId.'
+ #swagger.description = "Get the status of a transaction by providing the transaction hash or entity ID."
+ #swagger.parameters['txHashOrEntityId'] = {
+ in: 'path',
+ description: 'Transaction hash or entity ID',
+ required: true,
+ type: 'string'
+ }
+ #swagger.responses[200] = {
+ description: 'Successful response with transaction status'
+ }
+ #swagger.responses[404] = {
+ description: 'Transaction not found'
+ }
+ #swagger.responses[500] = {
+ description: 'Internal Server Error'
+ }
+ */
+ try {
+ const { txHashOrEntityId } = req.params
+ getStatusByTxHashOrEntityIdSchema.validate({ txHashOrEntityId })
+ const status = await getStatusByTxHashOrEntityId(txHashOrEntityId)
+ if (status) {
+ res.status(200).send({ status })
+ } else {
+ res.status(404).send({ error: 'Transaction not found' })
+ }
+ } catch (e) {
+ await errorHandler.handle(res, e)
+ }
+}
+
+export const getAllTransactionsByAddress = async (
+ req: Request,
+ res: Response
+): Promise => {
+ /*
+ #swagger.tags = ['Tracing']
+ #swagger.summary = 'Get all transactions by address.'
+ #swagger.description = "Get all transactions associated with a specific address."
+ #swagger.parameters['address'] = {
+ in: 'path',
+ description: 'Address to get transactions for',
+ required: true,
+ type: 'string'
+ }
+ #swagger.responses[200] = {
+ description: 'Successful response with transactions'
+ }
+ #swagger.responses[404] = {
+ description: 'No transactions found for this address'
+ }
+ #swagger.responses[500] = {
+ description: 'Internal Server Error'
+ }
+ */
+ const { address } = req.params
+ getAllTransactionsByAddressSchema.validate({ address })
+ try {
+ const transactions = await getTransactionsByAddress(address)
+ if (transactions.length > 0) {
+ res.status(200).send({ transactions })
+ } else {
+ res.status(404).send({ error: 'No transactions found for this address' })
+ }
+ } catch (e) {
+ await errorHandler.handle(res, e)
+ }
+}
+
+export const getAllTransactionsByAddressAndStatus = async (
+ req: Request,
+ res: Response
+) => {
+ /*
+ #swagger.tags = ['Tracing']
+ #swagger.summary = 'Get all transactions by address and status.'
+ #swagger.description = "Get all transactions associated with a specific address and status."
+ #swagger.parameters['address'] = {
+ in: 'path',
+ description: 'Address to get transactions for',
+ required: true,
+ type: 'string'
+ }
+ #swagger.parameters['status'] = {
+ in: 'path',
+ description: 'Status of the transactions to filter by',
+ required: true,
+ type: 'string'
+ }
+ #swagger.responses[200] = {
+ description: 'Successful response with transactions'
+ }
+ #swagger.responses[500] = {
+ description: 'Internal Server Error'
+ }
+ */
+ const { address, status } = req.params
+ try {
+ getAllTransactionsByAddressAndStatusSchema.validate({
+ address,
+ status,
+ })
+ const transactions = await findTransactionsByAddressAndStatus(
+ address,
+ status
+ )
+ res.status(200).json(transactions)
+ } catch (e) {
+ await errorHandler.handle(res, e)
+ }
+}
+
+export const getATransactionByEntityId = async (
+ req: Request,
+ res: Response
+) => {
+ /*
+ #swagger.tags = ['Tracing']
+ #swagger.summary = 'Get a transaction by entityId.'
+ #swagger.description = "Get a specific transaction by providing the entity ID."
+ #swagger.parameters['entityId'] = {
+ in: 'path',
+ description: 'Entity ID of the transaction',
+ required: true,
+ type: 'string'
+ }
+ #swagger.responses[200] = {
+ description: 'Successful response with transaction details'
+ }
+ #swagger.responses[404] = {
+ description: 'Transaction not found for this entityId'
+ }
+ #swagger.responses[500] = {
+ description: 'Internal Server Error'
+ }
+ */
+ const { entityId } = req.params
+ getTransactionByEntityIdSchema.validate({ entityId })
+ try {
+ const transaction = await getTransactionByEntityId(entityId)
+ if (transaction) {
+ res.status(200).send({ transaction })
+ } else {
+ res.status(404).send({ error: 'Transaction not found for this entityId' })
+ }
+ } catch (e) {
+ await errorHandler.handle(res, e)
+ }
+}
diff --git a/stash/src/model/Transaction.ts b/stash/src/model/Transaction.ts
new file mode 100644
index 00000000..99a7bbfe
--- /dev/null
+++ b/stash/src/model/Transaction.ts
@@ -0,0 +1,23 @@
+import { Schema } from 'redis-om'
+
+const transactionSchema = new Schema(
+ 'transactions',
+ {
+ address: { type: 'string' },
+ txHash: { type: 'string' },
+ requestId: { type: 'number' },
+ status: { type: 'string' },
+ created: { type: 'number' },
+ updated: { type: 'number' },
+ type: { type: 'string' },
+ chain: { type: 'string' },
+ amount: { type: 'string' },
+ asset_chainId: { type: 'string' },
+ asset_address: { type: 'string' },
+ },
+ {
+ dataStructure: 'JSON',
+ }
+)
+
+export { transactionSchema }
diff --git a/stash/src/repository/TransactionRepository.ts b/stash/src/repository/TransactionRepository.ts
new file mode 100644
index 00000000..46e3f168
--- /dev/null
+++ b/stash/src/repository/TransactionRepository.ts
@@ -0,0 +1,24 @@
+import { Client } from 'redis-om'
+import { transactionSchema } from '../model/Transaction.js'
+import { getTimeseriesUrl } from '../connector/RedisConnector.js'
+import logger from '../util/Logger.js'
+
+const client = new Client()
+await client.open(getTimeseriesUrl())
+
+const transactionRepository = client.fetchRepository(transactionSchema)
+
+try {
+ await transactionRepository.createIndex()
+} catch (error) {
+ if (error.message.includes('Index already exists')) {
+ logger.log({
+ level: 'info',
+ message: 'Index already exists, skipping creation.',
+ })
+ } else {
+ throw error
+ }
+}
+
+export { transactionRepository }
diff --git a/stash/src/schema/TracingSchema.ts b/stash/src/schema/TracingSchema.ts
new file mode 100644
index 00000000..3095dec3
--- /dev/null
+++ b/stash/src/schema/TracingSchema.ts
@@ -0,0 +1,46 @@
+import * as yup from 'yup'
+
+export const startTracingSchema = yup.object().shape({
+ txHash: yup
+ .string()
+ .required('txHash is required')
+ .matches(/^0x/, 'txHash must begin with 0x'),
+ address: yup
+ .string()
+ .required('address is required')
+ .matches(/^0x/, 'address must begin with 0x'),
+ type: yup.string().required('type is required'),
+ chain: yup
+ .string()
+ .required('chain is required')
+ .oneOf(
+ ['Ethereum', 'Arbitrum'],
+ 'network must be either "Ethereum" or "Arbitrum"'
+ ),
+ amount: yup.string().required('amount is required'),
+ asset_chainId: yup
+ .string()
+ .required('asset_chainId is required')
+ .matches(/^0x/, 'txHash must begin with 0x'),
+ asset_address: yup
+ .string()
+ .required('asset_address is required')
+ .matches(/^0x/, 'txHash must begin with 0x'),
+})
+
+export const getStatusByTxHashOrEntityIdSchema = yup.object().shape({
+ txHashOrEntityId: yup.string().required('txHash or entityId is required'),
+})
+
+export const getAllTransactionsByAddressSchema = yup.object().shape({
+ address: yup.string().required('address is required'),
+})
+
+export const getAllTransactionsByAddressAndStatusSchema = yup.object().shape({
+ address: yup.string().required('address is required'),
+ status: yup.string().required('status is required'),
+})
+
+export const getTransactionByEntityIdSchema = yup.object().shape({
+ entityId: yup.string().required('entityId is required'),
+})
diff --git a/stash/src/scraper/L1LogScraper.ts b/stash/src/scraper/L1LogScraper.ts
new file mode 100644
index 00000000..596292cc
--- /dev/null
+++ b/stash/src/scraper/L1LogScraper.ts
@@ -0,0 +1,174 @@
+import { type PublicClientConfig, createPublicClient, http } from 'viem'
+import RolldownContract from '../Rolldown.json' assert { type: 'json' }
+import { transactionRepository } from '../repository/TransactionRepository.js'
+import process from 'node:process'
+import { ApiPromise } from '@polkadot/api'
+import { timeseries } from '../connector/RedisConnector.js'
+import { setTimeout } from 'timers/promises'
+import logger from '../util/Logger.js'
+
+export const L1_CONFIRMED_STATUS = 'L1_CONFIRMED'
+export const L1_INITIATED_STATUS = 'L1_INITIATED'
+
+const keepProcessing = true
+
+export const watchDepositAcceptedIntoQueue = async (
+ api: any,
+ chainUrl: string,
+ chain: any,
+ chainName: string
+) => {
+ const publicClient = getPublicClient({
+ transport: http(chainUrl),
+ chain: chain,
+ })
+
+ while (keepProcessing) {
+ try {
+ const toBlock = await publicClient.getBlockNumber()
+ let fromBlock = await getLastProcessedBlock(chainName, 'deposit')
+ if (fromBlock === 0n) {
+ fromBlock = toBlock
+ }
+ logger.info({
+ message: `chainName: ${chainName}, fromBlock: ${fromBlock}, toBlock: ${toBlock}`,
+ })
+ const logs = await publicClient.getContractEvents({
+ address: `0x${process.env.CONTRACT_ADDRESS}` as `0x${string}`,
+ abi: RolldownContract.abi,
+ eventName: 'DepositAcceptedIntoQueue',
+ fromBlock,
+ toBlock,
+ })
+ for (const log of logs) {
+ const { transactionHash, blockNumber } = log
+ const existingTransaction = await transactionRepository
+ .search()
+ .where('txHash')
+ .equals(transactionHash)
+ .and('type')
+ .equals('deposit')
+ .and('status')
+ .equals(L1_INITIATED_STATUS)
+ .returnFirst()
+
+ if (existingTransaction) {
+ existingTransaction.status = L1_CONFIRMED_STATUS
+ existingTransaction.requestId = Number((log as any).args.requestId)
+ const timestamp = new Date().toISOString()
+ existingTransaction.updated = Date.parse(timestamp)
+ await transactionRepository.save(existingTransaction)
+ logger.info({
+ message: 'Transaction status updated:',
+ transaction: existingTransaction,
+ })
+ }
+ await saveLastProcessedBlock(chainName, blockNumber, 'deposit') //saving the last processed block
+ }
+ await saveLastProcessedBlock(chainName, toBlock, 'deposit') //even if in the range of fromBlock and toBlock we didn't find any event, we save the last block
+ } catch (error) {
+ logger.error({
+ message: 'Error in watchDepositAcceptedIntoQueue loop:',
+ error: error,
+ })
+ }
+ await setTimeout(5000)
+ }
+}
+
+export const processRequests = async (api: ApiPromise, l1Chain: string) => {
+ while (keepProcessing) {
+ try {
+ const lastProcessedRequestId = Number.parseInt(
+ (await api.query.rolldown.lastProcessedRequestOnL2(l1Chain)).toString()
+ )
+ const lastSavedProcessedRequestId = await getLastProcessedRequestId(
+ l1Chain,
+ 'deposit'
+ )
+ const transactionsToProcess = await transactionRepository
+ .search()
+ .where('chain')
+ .equals(l1Chain)
+ .and('type')
+ .equals('deposit')
+ .and('requestId')
+ .gte(lastSavedProcessedRequestId)
+ .and('requestId')
+ .lte(lastProcessedRequestId)
+ .return.all()
+
+ for (const transaction of transactionsToProcess) {
+ transaction.status = 'PROCESSED'
+ const timestamp = new Date().toISOString()
+ transaction.updated = Date.parse(timestamp)
+ await transactionRepository.save(transaction)
+ }
+ await saveLastProcessedRequestId(
+ //even if we don't have any transaction to process, we save the last processed request id
+ l1Chain,
+ lastProcessedRequestId,
+ 'deposit'
+ )
+ } catch (error) {
+ logger.error('Error processing requests:', error)
+ }
+ // Delay to avoid overwhelming the system
+ await setTimeout(5000)
+ }
+}
+
+export const getPublicClient = (options: PublicClientConfig) => {
+ return createPublicClient({ ...options })
+}
+const saveLastProcessedRequestId = async (
+ l1Chain: string,
+ lastProcessedRequestId: number,
+ type: string
+) => {
+ await timeseries.client.hset(
+ `tx:${type}:${l1Chain}`,
+ 'lastRequestId',
+ lastProcessedRequestId.toString()
+ )
+ logger.info(
+ `Last processed requestId ${lastProcessedRequestId} for chain ${l1Chain} saved`
+ )
+}
+
+const getLastProcessedRequestId = async (
+ l1Chain: string,
+ type: string
+): Promise => {
+ const result = await timeseries.client.hget(
+ `tx:${type}:${l1Chain}`,
+ 'lastRequestId'
+ )
+ return result ? Number(result) : 0
+}
+
+const saveLastProcessedBlock = async (
+ l1Chain: string,
+ lastProcessedBlock: bigint,
+ type: string
+) => {
+ await timeseries.client.hset(
+ `tx:${type}:${l1Chain}`,
+ 'lastBlock',
+ lastProcessedBlock.toString()
+ )
+ logger.info(
+ `Last processed block ${lastProcessedBlock} saved for chain ${l1Chain}`
+ )
+}
+
+const getLastProcessedBlock = async (
+ l1Chain: string,
+ type: string
+): Promise => {
+ const result = await timeseries.client.hget(
+ `tx:${type}:${l1Chain}`,
+ 'lastBlock'
+ )
+ return result ? BigInt(result) : 0n
+}
diff --git a/stash/src/server.ts b/stash/src/server.ts
index 811abf54..78275153 100644
--- a/stash/src/server.ts
+++ b/stash/src/server.ts
@@ -2,6 +2,7 @@ import 'dotenv/config'
import app from './app.js'
import * as priceService from './processing/PriceProcessorService.js'
import * as blockService from './service/SyncBlockService.js'
+import * as syncTransactionsService from './service/SyncTransactionsService.js'
import * as tokenService from './service/TokenService.js'
import * as xcmService from './service/XcmNetworkService.js'
import * as networkService from './service/NetworkService.js'
@@ -29,6 +30,8 @@ const server = app.listen(app.get('port'), async () => {
blockService.initService()
+ syncTransactionsService.initService()
+
const run = 1
while (run) {
await new Promise((f) => setTimeout(f, BLOCK_TIME * 10))
diff --git a/stash/src/service/SyncTransactionsService.ts b/stash/src/service/SyncTransactionsService.ts
new file mode 100644
index 00000000..14037217
--- /dev/null
+++ b/stash/src/service/SyncTransactionsService.ts
@@ -0,0 +1,37 @@
+import MangataClient from '../connector/MangataNode.js'
+import {
+ watchDepositAcceptedIntoQueue,
+ processRequests,
+} from '../scraper/L1LogScraper.js'
+import logger from '../util/Logger.js'
+import { holesky, arbitrumSepolia } from 'viem/chains'
+const ETH_CHAIN = 'Ethereum'
+const ARB_CHAIN = 'Arbitrum'
+export const initService = async () => {
+ const api = await MangataClient.api()
+
+ Promise.allSettled([
+ watchDepositAcceptedIntoQueue(
+ api,
+ process.env.ETH_CHAIN_URL,
+ holesky,
+ ETH_CHAIN
+ ),
+ watchDepositAcceptedIntoQueue(
+ api,
+ process.env.ARBITRUM_SEPOLIA_CHAIN_URL,
+ arbitrumSepolia,
+ ARB_CHAIN
+ ),
+ processRequests(api, 'Arbitrum'),
+ processRequests(api, 'Ethereum'),
+ ]).then((results) => {
+ results.forEach((result) => {
+ if (result.status === 'fulfilled') {
+ logger.log('Promise fulfilled:', result.value)
+ } else {
+ logger.error('Promise rejected:', result.reason)
+ }
+ })
+ })
+}
diff --git a/stash/src/service/TracingService.ts b/stash/src/service/TracingService.ts
new file mode 100644
index 00000000..14345622
--- /dev/null
+++ b/stash/src/service/TracingService.ts
@@ -0,0 +1,153 @@
+import logger from '../util/Logger.js'
+import { transactionRepository } from '../repository/TransactionRepository.js'
+
+interface TraceTransactionRequest {
+ txHash: string
+ address: string
+ amount: string
+ asset_address: string
+ type: string
+ chain: string
+ asset_chainId: string
+}
+
+export const startTracingTransaction = async (
+ traceRequest: TraceTransactionRequest
+): Promise