@the_library/web3-registry-addresses 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -45
- package/dist/index.d.ts +28 -46
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/loader.ts","../../web3-contracts/src/config.ts","../../web3-contracts/src/abis/evm/AddressRegistry.json","../../web3-contracts/src/abis/tron/AddressRegistry.json","../../web3-contracts/src/index.ts"],"sourcesContent":["import { ReadOnlyDomainAPI, Tech, AddressRegistryReadAPI } from '@the_library/web3-core';\n\nconst CACHE_KEY_PREFIX = 'dcode_registry_cache_v2_';\nconst CACHE_DURATION_MS = 24 * 60 * 60 * 1000; // 24 hours\n\nexport interface CacheEntry {\n address: string;\n abi: any;\n txId: string;\n originalName: string;\n}\n\nexport interface RegistryCache {\n timestamp: number;\n entries: {\n [contractName: string]: CacheEntry;\n };\n}\n\nexport class RegistryAddressLoader {\n private memoryCache: Map<string, RegistryCache> = new Map();\n\n private getCacheKey(tech: string, chainId: string | number): string {\n return `${CACHE_KEY_PREFIX}${tech}_${chainId}`;\n }\n\n private getFromLocalStorage(key: string): RegistryCache | null {\n const data = localStorage.getItem(key);\n if (!data) return null;\n try {\n return JSON.parse(data);\n } catch (e) {\n console.error(`[RegistryLoader] Failed to parse cache for ${key}`, e);\n return null;\n }\n }\n\n private saveToLocalStorage(key: string, cache: RegistryCache): void {\n localStorage.setItem(key, JSON.stringify(cache));\n }\n\n private async fetchAbiFromArweave(abiUrl: string): Promise<any> {\n if (!abiUrl) return null;\n try {\n const res = await fetch(`https://arweave.net/${abiUrl}`);\n if (res.ok) {\n const abi = await res.json();\n console.log(`[RegistryLoader] Successfully fetched ABI for ${abiUrl}`);\n return abi;\n }\n console.error(`[RegistryLoader] Arweave fetch failed for ${abiUrl}: ${res.status} ${res.statusText}`);\n } catch (e) {\n console.warn(`[RegistryLoader] Failed to fetch ABI from Arweave (${abiUrl}):`, e);\n }\n return null;\n }\n\n public async Initialize(tech: Tech, chainId: number | string, registry: AddressRegistryReadAPI): Promise<Record<string, string>> {\n const cacheKey = this.getCacheKey(tech, chainId);\n const now = Date.now();\n\n let cache = this.memoryCache.get(cacheKey) || this.getFromLocalStorage(cacheKey);\n\n // Time Check: Has it been less than 24 hours?\n if (cache && (now - cache.timestamp < CACHE_DURATION_MS)) {\n console.log(`[RegistryLoader] Cache valid for ${tech}:${chainId}`);\n this.memoryCache.set(cacheKey, cache);\n const addresses: Record<string, string> = {};\n Object.values(cache.entries).forEach(entry => {\n const camelCaseName = entry.originalName.charAt(0).toLowerCase() + entry.originalName.slice(1);\n addresses[camelCaseName] = entry.address;\n });\n return addresses;\n }\n\n console.log(`[RegistryLoader] Cache expired or missing for ${tech}:${chainId}. Performing Full Sync...`);\n\n const contractNames = await registry.getAllContractNames();\n console.log(`[RegistryLoader] Retrieved ${contractNames.length} contract names for ${tech}:${chainId}:`, contractNames);\n const newEntries: { [name: string]: CacheEntry } = {};\n const addresses: Record<string, string> = {};\n\n for (const name of contractNames) {\n try {\n const [address, abiUrl] = await registry.getLatestContract(name);\n const normalizedName = name.toLowerCase();\n const camelCaseName = name.charAt(0).toLowerCase() + name.slice(1);\n\n let abi = null;\n // Try to reuse ABI from old cache if txId matches\n if (cache && cache.entries[normalizedName] && cache.entries[normalizedName].txId === abiUrl) {\n abi = cache.entries[normalizedName].abi;\n } else if (abiUrl) {\n console.log(`[RegistryLoader] Fetching new ABI for ${name} (${abiUrl})...`);\n abi = await this.fetchAbiFromArweave(abiUrl);\n } else {\n console.warn(`[RegistryLoader] No ABI URL found for ${name} on ${tech}:${chainId}`);\n }\n\n newEntries[normalizedName] = {\n address,\n abi,\n txId: abiUrl,\n originalName: name\n };\n addresses[camelCaseName] = address;\n } catch (e) {\n console.warn(`[RegistryLoader] Failed to load contract ${name} for ${tech}:${chainId}:`, e);\n }\n }\n\n const newCache: RegistryCache = {\n timestamp: now,\n entries: newEntries\n };\n\n this.memoryCache.set(cacheKey, newCache);\n this.saveToLocalStorage(cacheKey, newCache);\n return addresses;\n }\n\n public getAddress(tech: string, chainId: string | number, name: string): string | undefined {\n const cacheKey = this.getCacheKey(tech, chainId);\n const cache = this.memoryCache.get(cacheKey);\n return cache?.entries[name.toLowerCase()]?.address;\n }\n\n public getAbi(tech: string, chainId: string | number, name: string): any {\n const cacheKey = this.getCacheKey(tech, chainId);\n const cache = this.memoryCache.get(cacheKey);\n return cache?.entries[name.toLowerCase()]?.abi;\n }\n}\n\nexport const registryAddressLoader = new RegistryAddressLoader();\n","\nimport {ContractConfigs} from \"./interfaces\";\n \nexport default {\n \"evm\": {\n \"1114\": {\n \"chainId\": 1114,\n \"main\": false,\n \"symbol\": \"tCORE2\",\n \"shortName\": \"SUN\",\n \"original\": \"Core Blockchain TestNet\",\n \"faucet\": \"https://scan.test2.btcs.network/faucet\",\n \"faucetAmount\": 1,\n \"decimals\": 18,\n \"website\": \"https://coredao.org/\",\n \"rpc\": \"https://rpc.test2.btcs.network\",\n \"explorer\": \"https://scan.test2.btcs.network\",\n \"name\": \"Two Core Test\",\n \"brand\": \"CORE\",\n \"deployed\": true,\n \"addresses\": {\n \"addressRegistry\": \"0x77A0Cf8a9B82dEE29ca82Bb6A773463a02E6Cf60\"\n }\n },\n \"1116\": {\n \"chainId\": 1116,\n \"main\": true,\n \"symbol\": \"CORE\",\n \"shortName\": \"TREE\",\n \"decimals\": 18,\n \"website\": \"https://coredao.org/\",\n \"rpc\": \"https://rpc.coredao.org\",\n \"explorer\": \"https://scan.coredao.org\",\n \"name\": \"Main\",\n \"original\": \"Core Blockchain MainNet\",\n \"brand\": \"CORE\",\n \"deployed\": true,\n \"addresses\": {\n \"addressRegistry\": \"0xD85bED3c96F36647BE073D120bfA5E7AcE491864\"\n }\n }\n },\n \"tron\": {\n \"nile\": {\n \"main\": false,\n \"website\": \"https://nile.trongrid.io/\",\n \"chainId\": \"nile\",\n \"symbol\": \"NileTRX\",\n \"shortName\": \"WATER\",\n \"decimals\": 6,\n \"rpc\": \"https://nile.trongrid.io\",\n \"explorer\": \"https://nilescan.org\",\n \"name\": \"Nile\",\n \"original\": \"Nile TestNet\",\n \"faucet\": \"https://nilescan.org/faucet\",\n \"faucetAmount\": 2000,\n \"brand\": \"TRON\",\n \"deployed\": true,\n \"addresses\": {\n \"addressRegistry\": \"419368123d6c77ae9e4a17af4e6c21dd30a79596f5\"\n }\n },\n \"shasta\": {\n \"main\": false,\n \"chainId\": \"shasta\",\n \"website\": \"https://shasta.trongrid.io\",\n \"rpc\": \"https://api.shasta.trongrid.io\",\n \"explorer\": \"https://shastanet.tronscan.org\",\n \"name\": \"Shasta\",\n \"original\": \"Shasta TestNet\",\n \"symbol\": \"ShastaTRX\",\n \"shortName\": \"SUN\",\n \"decimals\": 6,\n \"faucet\": \"https://shasta.tronex.io/join/getJoinPage\",\n \"faucetAmount\": 2000,\n \"brand\": \"TRON\",\n \"deployed\": true,\n \"addresses\": {\n \"addressRegistry\": \"41028907b1ca0729597624643ae939ccdb9293fc15\"\n }\n },\n \"mainnet\": {\n \"main\": true,\n \"chainId\": \"mainnet\",\n \"rpc\": \"https://api.trongrid.io\",\n \"explorer\": \"https://tronscan.org\",\n \"name\": \"Tron\",\n \"decimals\": 6,\n \"original\": \"Tron MainNet\",\n \"symbol\": \"TRX\",\n \"shortName\": \"TREE\",\n \"website\": \"https://tron.network/\",\n \"brand\": \"TRON\",\n \"deployed\": false,\n \"addresses\": {}\n }\n }\n} as ContractConfigs","{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"AddressRegistry\",\n \"sourceName\": \"contracts/generated/evm/AddressRegistry.sol\",\n \"abi\": [\n {\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"oldAdmin\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"contractAddress\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"abiUrl\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"version\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ContractAdded\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"contractAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"abiUrl\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addContract\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"admin\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"changeAdmin\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllContractNames\",\n \"outputs\": [\n {\n \"internalType\": \"string[]\",\n \"name\": \"\",\n \"type\": \"string[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"getContractHistory\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"contractAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"abiUrl\",\n \"type\": \"string\"\n }\n ],\n \"internalType\": \"struct AddressRegistry.ContractRecord[]\",\n \"name\": \"\",\n \"type\": \"tuple[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"getLatestContract\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x60808060405234610027575f80546001600160a01b03191633179055610bcf908161002c8239f35b5f80fdfe604060808152600480361015610013575f80fd5b5f3560e01c9081637d6929e0146104be5781638f283970146103d15781639dc4a3ec14610290578163d7a9b816146101b0578163df40e56e14610088575063f851a4401461005f575f80fd5b34610084575f366003190112610084576020906001600160a01b035f54169051908152f35b5f80fd5b823461008457602091826003193601126100845780359067ffffffffffffffff8211610084576100bc90849236910161084b565b816100cf845192838151938492016108a1565b810190828160019360018152030190209283546100eb81610b81565b906100f883519283610829565b80825284820180965f52855f205f915b8383106101875750505050815193808501918186525180925282850192808360051b87010196935f915b84831061013f5787890388f35b9091929394958480610175839b603f198c820301875285838c516001600160a01b038151168452015191818582015201906108c2565b9a980196959491909101920190610132565b95600288829a9861019b859b98999b610b53565b81520192019201919097959796949396610108565b8234610084575f366003190112610084576002546101cd81610b81565b906101da83519283610829565b8082526020808301918260025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5f915b83831061026e57505050508351928184019082855251809152848401948160051b85010192915f955b8287106102425785850386f35b90919293828061025e600193603f198a820301865288516108c2565b9601920196019592919092610235565b600185819261027f859a989a610ab1565b81520192019201919095939561020c565b8234610084576020918260031936011261008457803567ffffffffffffffff8111610084576102c2903690830161084b565b82518151908581818501936102d88183876108a1565b8101600181520301902054156103825784610319918551828186516102fe8183876108a1565b810160018152030190209386519384928392519283916108a1565b8101600181520301902054915f19830192831161036f575061034161036b9261034792610a84565b50610b53565b91836001600160a01b038451169301519080805195869586528501528301906108c2565b0390f35b601190634e487b7160e01b5f525260245ffd5b835162461bcd60e51b8152808401869052602360248201527f4164647265737352656769737472793a20636f6e7472616374206e6f7420666f6044820152621d5b9960ea1b6064820152608490fd5b905034610084576020366003190112610084578035916001600160a01b0391828416809403610084575f549283169161040b8333146108e7565b841561045557505082907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f5f80a373ffffffffffffffffffffffffffffffffffffffff1916175f55005b906020608492519162461bcd60e51b8352820152602e60248201527f4164647265737352656769737472793a206e65772061646d696e20697320746860448201527f65207a65726f20616464726573730000000000000000000000000000000000006064820152fd5b82346100845760603660031901126100845767ffffffffffffffff918035838111610084576104f0903690830161084b565b906024928335936001600160a01b03958686168096036100845760443590811161008457610521903690850161084b565b92610530875f541633146108e7565b85156107925784511561072b5782519185519760209384818b81838c019d610558918f6108a1565b810160038152030190205460ff1615610687575b845184818061057f8d8c519283916108a1565b8101600181520301902091855190610596826107f9565b898252858201938885528054906801000000000000000082101561067557906105c491600182018155610a84565b9590956106655750509260017fbf2c71e696266b296731ca022cf688cebadbc3d4d52f1ccbe5c027e582dcc57098999a93610616936106439651166001600160a01b031984541617835551910161097c565b8351838189516106278183876108a1565b81016001815203019020549684519283928392519283916108a1565b81010390209461065c83519484869586528501906108c2565b918301520390a3005b5f90634e487b7160e01b8252525ffd5b82604188634e487b7160e01b5f52525ffd5b845184818061069a8d8c519283916108a1565b81016003815203019020600160ff198254161790556002546801000000000000000081101561071957600181018060025581101561070757876107029160025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0161097c565b61056c565b82603285634e487b7160e01b5f52525ffd5b82604185634e487b7160e01b5f52525ffd5b602e608492602085519362461bcd60e51b85528401528201527f4164647265737352656769737472793a20636f6e7472616374206e616d65206360448201527f616e6e6f7420626520656d7074790000000000000000000000000000000000006064820152fd5b6030608492602085519362461bcd60e51b85528401528201527f4164647265737352656769737472793a20636f6e74726163742061646472657360448201527f732063616e6e6f74206265207a65726f000000000000000000000000000000006064820152fd5b6040810190811067ffffffffffffffff82111761081557604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761081557604052565b81601f820112156100845780359067ffffffffffffffff82116108155760405192610880601f8401601f191660200185610829565b8284526020838301011161008457815f926020809301838601378301015290565b5f5b8381106108b25750505f910152565b81810151838201526020016108a3565b906020916108db815180928185528580860191016108a1565b601f01601f1916010190565b156108ee57565b60405162461bcd60e51b815260206004820152602860248201527f4164647265737352656769737472793a2063616c6c6572206973206e6f74207460448201526734329030b236b4b760c11b6064820152608490fd5b90600182811c92168015610972575b602083101461095e57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610953565b919091825167ffffffffffffffff81116108155761099a8254610944565b601f8111610a3f575b50602080601f83116001146109de5750819293945f926109d3575b50508160011b915f199060031b1c1916179055565b015190505f806109be565b90601f19831695845f5260205f20925f905b888210610a2757505083600195969710610a0f575b505050811b019055565b01515f1960f88460031b161c191690555f8080610a05565b806001859682949686015181550195019301906109f0565b825f5260205f20601f830160051c81019160208410610a7a575b601f0160051c01905b818110610a6f57506109a3565b5f8155600101610a62565b9091508190610a59565b8054821015610a9d575f5260205f209060011b01905f90565b634e487b7160e01b5f52603260045260245ffd5b9060405191825f8254610ac381610944565b908184526020946001916001811690815f14610b315750600114610af3575b505050610af192500383610829565b565b5f90815285812095935091905b818310610b19575050610af193508201015f8080610ae2565b85548884018501529485019487945091830191610b00565b92505050610af194925060ff191682840152151560051b8201015f8080610ae2565b90604051610b60816107f9565b6020610b7c600183956001600160a01b03815416855201610ab1565b910152565b67ffffffffffffffff81116108155760051b6020019056fea264697066735822122025407833e309966fe7b3011ca855589d79596b3be02b1eeeec41ad068c60570964736f6c63430008180033\",\n \"deployedBytecode\": \"0x604060808152600480361015610013575f80fd5b5f3560e01c9081637d6929e0146104be5781638f283970146103d15781639dc4a3ec14610290578163d7a9b816146101b0578163df40e56e14610088575063f851a4401461005f575f80fd5b34610084575f366003190112610084576020906001600160a01b035f54169051908152f35b5f80fd5b823461008457602091826003193601126100845780359067ffffffffffffffff8211610084576100bc90849236910161084b565b816100cf845192838151938492016108a1565b810190828160019360018152030190209283546100eb81610b81565b906100f883519283610829565b80825284820180965f52855f205f915b8383106101875750505050815193808501918186525180925282850192808360051b87010196935f915b84831061013f5787890388f35b9091929394958480610175839b603f198c820301875285838c516001600160a01b038151168452015191818582015201906108c2565b9a980196959491909101920190610132565b95600288829a9861019b859b98999b610b53565b81520192019201919097959796949396610108565b8234610084575f366003190112610084576002546101cd81610b81565b906101da83519283610829565b8082526020808301918260025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5f915b83831061026e57505050508351928184019082855251809152848401948160051b85010192915f955b8287106102425785850386f35b90919293828061025e600193603f198a820301865288516108c2565b9601920196019592919092610235565b600185819261027f859a989a610ab1565b81520192019201919095939561020c565b8234610084576020918260031936011261008457803567ffffffffffffffff8111610084576102c2903690830161084b565b82518151908581818501936102d88183876108a1565b8101600181520301902054156103825784610319918551828186516102fe8183876108a1565b810160018152030190209386519384928392519283916108a1565b8101600181520301902054915f19830192831161036f575061034161036b9261034792610a84565b50610b53565b91836001600160a01b038451169301519080805195869586528501528301906108c2565b0390f35b601190634e487b7160e01b5f525260245ffd5b835162461bcd60e51b8152808401869052602360248201527f4164647265737352656769737472793a20636f6e7472616374206e6f7420666f6044820152621d5b9960ea1b6064820152608490fd5b905034610084576020366003190112610084578035916001600160a01b0391828416809403610084575f549283169161040b8333146108e7565b841561045557505082907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f5f80a373ffffffffffffffffffffffffffffffffffffffff1916175f55005b906020608492519162461bcd60e51b8352820152602e60248201527f4164647265737352656769737472793a206e65772061646d696e20697320746860448201527f65207a65726f20616464726573730000000000000000000000000000000000006064820152fd5b82346100845760603660031901126100845767ffffffffffffffff918035838111610084576104f0903690830161084b565b906024928335936001600160a01b03958686168096036100845760443590811161008457610521903690850161084b565b92610530875f541633146108e7565b85156107925784511561072b5782519185519760209384818b81838c019d610558918f6108a1565b810160038152030190205460ff1615610687575b845184818061057f8d8c519283916108a1565b8101600181520301902091855190610596826107f9565b898252858201938885528054906801000000000000000082101561067557906105c491600182018155610a84565b9590956106655750509260017fbf2c71e696266b296731ca022cf688cebadbc3d4d52f1ccbe5c027e582dcc57098999a93610616936106439651166001600160a01b031984541617835551910161097c565b8351838189516106278183876108a1565b81016001815203019020549684519283928392519283916108a1565b81010390209461065c83519484869586528501906108c2565b918301520390a3005b5f90634e487b7160e01b8252525ffd5b82604188634e487b7160e01b5f52525ffd5b845184818061069a8d8c519283916108a1565b81016003815203019020600160ff198254161790556002546801000000000000000081101561071957600181018060025581101561070757876107029160025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0161097c565b61056c565b82603285634e487b7160e01b5f52525ffd5b82604185634e487b7160e01b5f52525ffd5b602e608492602085519362461bcd60e51b85528401528201527f4164647265737352656769737472793a20636f6e7472616374206e616d65206360448201527f616e6e6f7420626520656d7074790000000000000000000000000000000000006064820152fd5b6030608492602085519362461bcd60e51b85528401528201527f4164647265737352656769737472793a20636f6e74726163742061646472657360448201527f732063616e6e6f74206265207a65726f000000000000000000000000000000006064820152fd5b6040810190811067ffffffffffffffff82111761081557604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761081557604052565b81601f820112156100845780359067ffffffffffffffff82116108155760405192610880601f8401601f191660200185610829565b8284526020838301011161008457815f926020809301838601378301015290565b5f5b8381106108b25750505f910152565b81810151838201526020016108a3565b906020916108db815180928185528580860191016108a1565b601f01601f1916010190565b156108ee57565b60405162461bcd60e51b815260206004820152602860248201527f4164647265737352656769737472793a2063616c6c6572206973206e6f74207460448201526734329030b236b4b760c11b6064820152608490fd5b90600182811c92168015610972575b602083101461095e57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610953565b919091825167ffffffffffffffff81116108155761099a8254610944565b601f8111610a3f575b50602080601f83116001146109de5750819293945f926109d3575b50508160011b915f199060031b1c1916179055565b015190505f806109be565b90601f19831695845f5260205f20925f905b888210610a2757505083600195969710610a0f575b505050811b019055565b01515f1960f88460031b161c191690555f8080610a05565b806001859682949686015181550195019301906109f0565b825f5260205f20601f830160051c81019160208410610a7a575b601f0160051c01905b818110610a6f57506109a3565b5f8155600101610a62565b9091508190610a59565b8054821015610a9d575f5260205f209060011b01905f90565b634e487b7160e01b5f52603260045260245ffd5b9060405191825f8254610ac381610944565b908184526020946001916001811690815f14610b315750600114610af3575b505050610af192500383610829565b565b5f90815285812095935091905b818310610b19575050610af193508201015f8080610ae2565b85548884018501529485019487945091830191610b00565b92505050610af194925060ff191682840152151560051b8201015f8080610ae2565b90604051610b60816107f9565b6020610b7c600183956001600160a01b03815416855201610ab1565b910152565b67ffffffffffffffff81116108155760051b6020019056fea264697066735822122025407833e309966fe7b3011ca855589d79596b3be02b1eeeec41ad068c60570964736f6c63430008180033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n","{\n \"contractName\": \"AddressRegistry\",\n \"abi\": [\n {\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"oldAdmin\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"contractAddress\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"abiUrl\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"version\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ContractAdded\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"contractAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"abiUrl\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addContract\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"admin\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"changeAdmin\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllContractNames\",\n \"outputs\": [\n {\n \"internalType\": \"string[]\",\n \"name\": \"\",\n \"type\": \"string[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"getContractHistory\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"contractAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"abiUrl\",\n \"type\": \"string\"\n }\n ],\n \"internalType\": \"struct AddressRegistry.ContractRecord[]\",\n \"name\": \"\",\n \"type\": \"tuple[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"getLatestContract\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x60808060405234610027575f80546001600160a01b03191633179055610bae908161002c8239f35b5f80fdfe604060808152600480361015610013575f80fd5b5f3560e01c9081637d6929e0146104ad5781638f283970146103d35781639dc4a3ec14610290578163d7a9b816146101b0578163df40e56e14610089575063f851a4401461005f575f80fd5b34610085575f366003190112610085575f5490516001600160a01b039091168152602090f35b5f80fd5b823461008557602091826003193601126100855780359067ffffffffffffffff8211610085576100bd908492369101610827565b816100d08451928381519384920161087d565b810190828160019360018152030190209283546100ec81610b60565b906100f983519283610805565b80825284820180965f52855f205f915b8383106101875750505050815193808501918186525180925282850192808360051b87010196935f915b8483106101405787890388f35b9091929394958480610175839b603f198c820301875285838c5160018060a01b0381511684520151918185820152019061089e565b9a980196959491909101920190610133565b95600288829a9861019b859b98999b610b2f565b81520192019201919097959796949396610109565b8234610085575f366003190112610085576002546101cd81610b60565b906101da83519283610805565b8082526020808301918260025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5f915b83831061026e57505050508351928184019082855251809152848401948160051b85010192915f955b8287106102425785850386f35b90919293828061025e600193603f198a8203018652885161089e565b9601920196019592919092610235565b600185819261027f859a989a610a8d565b81520192019201919095939561020c565b8234610085576020918260031936011261008557803567ffffffffffffffff8111610085576102c29036908301610827565b82518151908581818501936102d881838761087d565b8101600181520301902054156103845784610319918551828186516102fe81838761087d565b8101600181520301902093865193849283925192839161087d565b8101600181520301902054915f198301928311610371575061034161036d9261034792610a60565b50610b2f565b80519084015183516001600160a01b03909216825293810183905292839283019061089e565b0390f35b601190634e487b7160e01b5f525260245ffd5b835162461bcd60e51b8152808401869052602360248201527f4164647265737352656769737472793a20636f6e7472616374206e6f7420666f6044820152621d5b9960ea1b6064820152608490fd5b8234610085576020366003190112610085578135906001600160a81b0382168203610085575f546001600160a01b039283169390928316916104163384146108c3565b841561045357505082907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f5f80a36001600160a01b031916175f55005b906020608492519162461bcd60e51b8352820152602e60248201527f4164647265737352656769737472793a206e65772061646d696e20697320746860448201526d65207a65726f206164647265737360901b6064820152fd5b9050346100855760603660031901126100855767ffffffffffffffff908035828111610085576104e09036908301610827565b6024803594919291906001600160a81b0386168603610085576001600160a01b03958616946044359081116100855761051c9036908501610827565b9261052b875f541633146108c3565b851561077b578451156107235782519185519760209384818b81838c019d610553918f61087d565b810160038152030190205460ff1615610684575b845184818061057a8d8c5192839161087d565b8101600181520301902091855190610591826107d5565b89825285820193888552805490600160401b82101561067257906105ba91600182018155610a60565b9590956106625750509260017fbf2c71e696266b296731ca022cf688cebadbc3d4d52f1ccbe5c027e582dcc57098999a93610613936106409651166bffffffffffffffffffffffff60a01b845416178355519101610958565b83518381895161062481838761087d565b810160018152030190205496845192839283925192839161087d565b810103902094610659835194848695865285019061089e565b918301520390a3005b5f90634e487b7160e01b8252525ffd5b82604188634e487b7160e01b5f52525ffd5b84518481806106978d8c5192839161087d565b81016003815203019020600160ff19825416179055600254600160401b8110156107115760018101806002558110156106ff57876106fa9160025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01610958565b610567565b82603285634e487b7160e01b5f52525ffd5b82604185634e487b7160e01b5f52525ffd5b602e608492602085519362461bcd60e51b85528401528201527f4164647265737352656769737472793a20636f6e7472616374206e616d65206360448201526d616e6e6f7420626520656d70747960901b6064820152fd5b6030608492602085519362461bcd60e51b85528401528201527f4164647265737352656769737472793a20636f6e74726163742061646472657360448201526f732063616e6e6f74206265207a65726f60801b6064820152fd5b6040810190811067ffffffffffffffff8211176107f157604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176107f157604052565b81601f820112156100855780359067ffffffffffffffff82116107f1576040519261085c601f8401601f191660200185610805565b8284526020838301011161008557815f926020809301838601378301015290565b5f5b83811061088e5750505f910152565b818101518382015260200161087f565b906020916108b78151809281855285808601910161087d565b601f01601f1916010190565b156108ca57565b60405162461bcd60e51b815260206004820152602860248201527f4164647265737352656769737472793a2063616c6c6572206973206e6f74207460448201526734329030b236b4b760c11b6064820152608490fd5b90600182811c9216801561094e575b602083101461093a57565b634e487b7160e01b5f52602260045260245ffd5b91607f169161092f565b919091825167ffffffffffffffff81116107f1576109768254610920565b601f8111610a1b575b50602080601f83116001146109ba5750819293945f926109af575b50508160011b915f199060031b1c1916179055565b015190505f8061099a565b90601f19831695845f5260205f20925f905b888210610a03575050836001959697106109eb575b505050811b019055565b01515f1960f88460031b161c191690555f80806109e1565b806001859682949686015181550195019301906109cc565b825f5260205f20601f830160051c81019160208410610a56575b601f0160051c01905b818110610a4b575061097f565b5f8155600101610a3e565b9091508190610a35565b8054821015610a79575f5260205f209060011b01905f90565b634e487b7160e01b5f52603260045260245ffd5b9060405191825f8254610a9f81610920565b908184526020946001916001811690815f14610b0d5750600114610acf575b505050610acd92500383610805565b565b5f90815285812095935091905b818310610af5575050610acd93508201015f8080610abe565b85548884018501529485019487945091830191610adc565b92505050610acd94925060ff191682840152151560051b8201015f8080610abe565b90604051610b3c816107d5565b82546001600160a01b03168152918290602090610b5b90600101610a8d565b910152565b67ffffffffffffffff81116107f15760051b6020019056fea26474726f6e582212202099894a2163edc14ed6ceba66f8f37788a11fada2014f7d602de58c240b9bd564736f6c63430008180033\",\n \"deployedBytecode\": \"0x604060808152600480361015610013575f80fd5b5f3560e01c9081637d6929e0146104ad5781638f283970146103d35781639dc4a3ec14610290578163d7a9b816146101b0578163df40e56e14610089575063f851a4401461005f575f80fd5b34610085575f366003190112610085575f5490516001600160a01b039091168152602090f35b5f80fd5b823461008557602091826003193601126100855780359067ffffffffffffffff8211610085576100bd908492369101610827565b816100d08451928381519384920161087d565b810190828160019360018152030190209283546100ec81610b60565b906100f983519283610805565b80825284820180965f52855f205f915b8383106101875750505050815193808501918186525180925282850192808360051b87010196935f915b8483106101405787890388f35b9091929394958480610175839b603f198c820301875285838c5160018060a01b0381511684520151918185820152019061089e565b9a980196959491909101920190610133565b95600288829a9861019b859b98999b610b2f565b81520192019201919097959796949396610109565b8234610085575f366003190112610085576002546101cd81610b60565b906101da83519283610805565b8082526020808301918260025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5f915b83831061026e57505050508351928184019082855251809152848401948160051b85010192915f955b8287106102425785850386f35b90919293828061025e600193603f198a8203018652885161089e565b9601920196019592919092610235565b600185819261027f859a989a610a8d565b81520192019201919095939561020c565b8234610085576020918260031936011261008557803567ffffffffffffffff8111610085576102c29036908301610827565b82518151908581818501936102d881838761087d565b8101600181520301902054156103845784610319918551828186516102fe81838761087d565b8101600181520301902093865193849283925192839161087d565b8101600181520301902054915f198301928311610371575061034161036d9261034792610a60565b50610b2f565b80519084015183516001600160a01b03909216825293810183905292839283019061089e565b0390f35b601190634e487b7160e01b5f525260245ffd5b835162461bcd60e51b8152808401869052602360248201527f4164647265737352656769737472793a20636f6e7472616374206e6f7420666f6044820152621d5b9960ea1b6064820152608490fd5b8234610085576020366003190112610085578135906001600160a81b0382168203610085575f546001600160a01b039283169390928316916104163384146108c3565b841561045357505082907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f5f80a36001600160a01b031916175f55005b906020608492519162461bcd60e51b8352820152602e60248201527f4164647265737352656769737472793a206e65772061646d696e20697320746860448201526d65207a65726f206164647265737360901b6064820152fd5b9050346100855760603660031901126100855767ffffffffffffffff908035828111610085576104e09036908301610827565b6024803594919291906001600160a81b0386168603610085576001600160a01b03958616946044359081116100855761051c9036908501610827565b9261052b875f541633146108c3565b851561077b578451156107235782519185519760209384818b81838c019d610553918f61087d565b810160038152030190205460ff1615610684575b845184818061057a8d8c5192839161087d565b8101600181520301902091855190610591826107d5565b89825285820193888552805490600160401b82101561067257906105ba91600182018155610a60565b9590956106625750509260017fbf2c71e696266b296731ca022cf688cebadbc3d4d52f1ccbe5c027e582dcc57098999a93610613936106409651166bffffffffffffffffffffffff60a01b845416178355519101610958565b83518381895161062481838761087d565b810160018152030190205496845192839283925192839161087d565b810103902094610659835194848695865285019061089e565b918301520390a3005b5f90634e487b7160e01b8252525ffd5b82604188634e487b7160e01b5f52525ffd5b84518481806106978d8c5192839161087d565b81016003815203019020600160ff19825416179055600254600160401b8110156107115760018101806002558110156106ff57876106fa9160025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01610958565b610567565b82603285634e487b7160e01b5f52525ffd5b82604185634e487b7160e01b5f52525ffd5b602e608492602085519362461bcd60e51b85528401528201527f4164647265737352656769737472793a20636f6e7472616374206e616d65206360448201526d616e6e6f7420626520656d70747960901b6064820152fd5b6030608492602085519362461bcd60e51b85528401528201527f4164647265737352656769737472793a20636f6e74726163742061646472657360448201526f732063616e6e6f74206265207a65726f60801b6064820152fd5b6040810190811067ffffffffffffffff8211176107f157604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176107f157604052565b81601f820112156100855780359067ffffffffffffffff82116107f1576040519261085c601f8401601f191660200185610805565b8284526020838301011161008557815f926020809301838601378301015290565b5f5b83811061088e5750505f910152565b818101518382015260200161087f565b906020916108b78151809281855285808601910161087d565b601f01601f1916010190565b156108ca57565b60405162461bcd60e51b815260206004820152602860248201527f4164647265737352656769737472793a2063616c6c6572206973206e6f74207460448201526734329030b236b4b760c11b6064820152608490fd5b90600182811c9216801561094e575b602083101461093a57565b634e487b7160e01b5f52602260045260245ffd5b91607f169161092f565b919091825167ffffffffffffffff81116107f1576109768254610920565b601f8111610a1b575b50602080601f83116001146109ba5750819293945f926109af575b50508160011b915f199060031b1c1916179055565b015190505f8061099a565b90601f19831695845f5260205f20925f905b888210610a03575050836001959697106109eb575b505050811b019055565b01515f1960f88460031b161c191690555f80806109e1565b806001859682949686015181550195019301906109cc565b825f5260205f20601f830160051c81019160208410610a56575b601f0160051c01905b818110610a4b575061097f565b5f8155600101610a3e565b9091508190610a35565b8054821015610a79575f5260205f209060011b01905f90565b634e487b7160e01b5f52603260045260245ffd5b9060405191825f8254610a9f81610920565b908184526020946001916001811690815f14610b0d5750600114610acf575b505050610acd92500383610805565b565b5f90815285812095935091905b818310610af5575050610acd93508201015f8080610abe565b85548884018501529485019487945091830191610adc565b92505050610acd94925060ff191682840152151560051b8201015f8080610abe565b90604051610b3c816107d5565b82546001600160a01b03168152918290602090610b5b90600101610a8d565b910152565b67ffffffffffffffff81116107f15760051b6020019056fea26474726f6e582212202099894a2163edc14ed6ceba66f8f37788a11fada2014f7d602de58c240b9bd564736f6c63430008180033\",\n \"sourceMap\": \"325:3454:1:-:0;;;;;;;1269:18;325:3454;;-1:-1:-1;;;;;;325:3454:1;1277:10;325:3454;;;;;;;;;;;;;\",\n \"deployedSourceMap\": \"325:3454:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;325:3454:1;;;;;;;;-1:-1:-1;;;;;325:3454:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;3532:16;;;;325:3454;3532:16;325:3454;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;325:3454:1;;;;3756:14;325:3454;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;3756:14;325:3454;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;2948:16;325:3454;;;;;;;2948:33;325:3454;;;;;;;;;;;;;;;;:::i;:::-;;;2948:16;325:3454;;;;;;;;;;;;;;;;;;;:::i;:::-;;;2948:16;325:3454;;;;;;;;;;;;;;;;;3083:79;;325:3454;3083:79;325:3454;3083:79;;:::i;:::-;325:3454;;:::i;:::-;;;3204:13;;;;325:3454;;-1:-1:-1;;;;;325:3454:1;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;325:3454:1;;;;;;;;;;;;;;;;;;-1:-1:-1;;;325:3454:1;;;;;;;;;;;;;;-1:-1:-1;;325:3454:1;;;;;;;-1:-1:-1;;;;;325:3454:1;;;;;;;;-1:-1:-1;;;;;325:3454:1;;;;;;;;;1115:106;1136:10;:19;;1115:106;:::i;:::-;1476:22;;325:3454;;1585:29;;;;;325:3454;1585:29;;-1:-1:-1;;;;;;325:3454:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;325:3454:1;;;;;;;;;;;;;-1:-1:-1;;325:3454:1;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;325:3454:1;;;;;;-1:-1:-1;;;;;325:3454:1;;;;;;;;;;;;;;;;;;:::i;:::-;;1115:106;325:3454;;;;1136:10;:19;1115:106;:::i;:::-;2002:29;;325:3454;;;;2136:22;325:3454;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;2246:11;325:3454;;;;;;;;;2245:18;2241:112;;325:3454;;;;;;;;;;;;;;:::i;:::-;;;2363:16;325:3454;;;;;;;;;;;;;:::i;:::-;;;;2404:66;;;325:3454;;;;;;;-1:-1:-1;;;325:3454:1;;;;;;;;2363:16;325:3454;;;;;:::i;:::-;;;;;;;;;2363:16;2579:58;325:3454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;2363:16;325:3454;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2579:58;;;325:3454;;;;;;;;;;;;;;;;;;;;;;;;2241:112;325:3454;;;;;;;;;;;;;:::i;:::-;;;2246:11;325:3454;;;;;;2299:4;325:3454;;;;;;;;2317:14;325:3454;-1:-1:-1;;;325:3454:1;;;;;2299:4;325:3454;;;2317:14;325:3454;;;;;;;;;2317:14;325:3454;;;;;:::i;:::-;2241:112;;325:3454;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;325:3454:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;325:3454:1;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;325:3454:1;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;325:3454:1;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;325:3454:1;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;325:3454:1;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;325:3454:1;;;;;;;;;;;;;;;;;-1:-1:-1;;;325:3454:1;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;325:3454:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;325:3454:1;;-1:-1:-1;325:3454:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;325:3454:1;;;;;;;;;-1:-1:-1;325:3454:1;;;;;;;;;;;;-1:-1:-1;325:3454:1;;-1:-1:-1;325:3454:1;;;;;;-1:-1:-1;325:3454:1;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;325:3454:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;-1:-1:-1;325:3454:1;;;;;;;;-1:-1:-1;;325:3454:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;325:3454:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;325:3454:1;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;:::o\",\n \"source\": \"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.24;\\n\\n/**\\n * @title Address Registry\\n * @dev An immutable registry that stores the historical and active deployment addresses for\\n * D-Library Core Contracts (Factory, BouncerStorage, BackupStorage, etc.).\\n * Designed to replace build-time static configuration.\\n */\\ncontract AddressRegistry {\\n address public admin;\\n\\n struct ContractRecord {\\n address contractAddress;\\n string abiUrl;\\n }\\n\\n // Mapping from Contract Name (e.g., \\\"Factory\\\") to a historical array of deployed records\\n mapping(string => ContractRecord[]) private _contractHistory;\\n\\n // Array to keep track of all registered contract names for easy enumeration\\n string[] private _contractNames;\\n // Mapping to prevent duplicates in _contractNames\\n mapping(string => bool) private _nameExists;\\n\\n event ContractAdded(\\n string indexed name,\\n address indexed contractAddress,\\n string abiUrl,\\n uint256 version\\n );\\n event AdminChanged(address indexed oldAdmin, address indexed newAdmin);\\n\\n modifier onlyAdmin() {\\n require(\\n msg.sender == admin,\\n \\\"AddressRegistry: caller is not the admin\\\"\\n );\\n _;\\n }\\n\\n constructor() {\\n admin = msg.sender;\\n }\\n\\n /**\\n * @dev Transfers administration of the registry to a new address.\\n */\\n function changeAdmin(address newAdmin) external onlyAdmin {\\n require(\\n newAdmin != address(0),\\n \\\"AddressRegistry: new admin is the zero address\\\"\\n );\\n emit AdminChanged(admin, newAdmin);\\n admin = newAdmin;\\n }\\n\\n /**\\n * @dev Appends a new deployed address to the history of a given contract name.\\n * The last appended address is considered the \\\"active\\\" or \\\"latest\\\" version.\\n */\\n function addContract(\\n string memory name,\\n address contractAddress,\\n string memory abiUrl\\n ) external onlyAdmin {\\n require(\\n contractAddress != address(0),\\n \\\"AddressRegistry: contract address cannot be zero\\\"\\n );\\n require(\\n bytes(name).length > 0,\\n \\\"AddressRegistry: contract name cannot be empty\\\"\\n );\\n\\n if (!_nameExists[name]) {\\n _nameExists[name] = true;\\n _contractNames.push(name);\\n }\\n\\n _contractHistory[name].push(\\n ContractRecord({contractAddress: contractAddress, abiUrl: abiUrl})\\n );\\n\\n uint256 versionIndex = _contractHistory[name].length; // 1-indexed version\\n emit ContractAdded(name, contractAddress, abiUrl, versionIndex);\\n }\\n\\n /**\\n * @dev Returns the most recently deployed (active) address for a given contract name.\\n * Reverts if the contract name has no history.\\n */\\n function getLatestContract(\\n string memory name\\n ) external view returns (address, string memory) {\\n require(\\n _contractHistory[name].length > 0,\\n \\\"AddressRegistry: contract not found\\\"\\n );\\n ContractRecord memory record = _contractHistory[name][\\n _contractHistory[name].length - 1\\n ];\\n return (record.contractAddress, record.abiUrl);\\n }\\n\\n /**\\n * @dev Returns the entire chronological history of records for a given contract name.\\n * The last record in the array is the current active version.\\n */\\n function getContractHistory(\\n string memory name\\n ) external view returns (ContractRecord[] memory) {\\n return _contractHistory[name];\\n }\\n\\n /**\\n * @dev Returns all recognized contract names currently tracked in the registry.\\n */\\n function getAllContractNames() external view returns (string[] memory) {\\n return _contractNames;\\n }\\n}\\n\",\n \"sourcePath\": \"/home/dme/Documents/blockchain/contracts/generated/tron/AddressRegistry.sol\",\n \"ast\": {\n \"absolutePath\": \"/home/dme/Documents/blockchain/contracts/generated/tron/AddressRegistry.sol\",\n \"exportedSymbols\": {\n \"AddressRegistry\": [\n 488\n ]\n },\n \"id\": 489,\n \"license\": \"Apache-2.0\",\n \"nodeType\": \"SourceUnit\",\n \"nodes\": [\n {\n \"id\": 259,\n \"literals\": [\n \"solidity\",\n \"^\",\n \"0.8\",\n \".24\"\n ],\n \"nodeType\": \"PragmaDirective\",\n \"src\": \"39:24:1\"\n },\n {\n \"abstract\": false,\n \"baseContracts\": [],\n \"canonicalName\": \"AddressRegistry\",\n \"contractDependencies\": [],\n \"contractKind\": \"contract\",\n \"documentation\": {\n \"id\": 260,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"65:259:1\",\n \"text\": \" @title Address Registry\\n @dev An immutable registry that stores the historical and active deployment addresses for\\n D-Library Core Contracts (Factory, BouncerStorage, BackupStorage, etc.).\\n Designed to replace build-time static configuration.\"\n },\n \"fullyImplemented\": true,\n \"id\": 488,\n \"linearizedBaseContracts\": [\n 488\n ],\n \"name\": \"AddressRegistry\",\n \"nameLocation\": \"334:15:1\",\n \"nodeType\": \"ContractDefinition\",\n \"nodes\": [\n {\n \"constant\": false,\n \"functionSelector\": \"f851a440\",\n \"id\": 262,\n \"mutability\": \"mutable\",\n \"name\": \"admin\",\n \"nameLocation\": \"371:5:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 488,\n \"src\": \"356:20:1\",\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 261,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"356:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"public\"\n },\n {\n \"canonicalName\": \"AddressRegistry.ContractRecord\",\n \"id\": 267,\n \"members\": [\n {\n \"constant\": false,\n \"id\": 264,\n \"mutability\": \"mutable\",\n \"name\": \"contractAddress\",\n \"nameLocation\": \"423:15:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 267,\n \"src\": \"415:23:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 263,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"415:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 266,\n \"mutability\": \"mutable\",\n \"name\": \"abiUrl\",\n \"nameLocation\": \"455:6:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 267,\n \"src\": \"448:13:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 265,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"448:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"name\": \"ContractRecord\",\n \"nameLocation\": \"390:14:1\",\n \"nodeType\": \"StructDefinition\",\n \"scope\": 488,\n \"src\": \"383:85:1\",\n \"visibility\": \"public\"\n },\n {\n \"constant\": false,\n \"id\": 273,\n \"mutability\": \"mutable\",\n \"name\": \"_contractHistory\",\n \"nameLocation\": \"612:16:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 488,\n \"src\": \"568:60:1\",\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string => struct AddressRegistry.ContractRecord[])\"\n },\n \"typeName\": {\n \"id\": 272,\n \"keyName\": \"\",\n \"keyNameLocation\": \"-1:-1:-1\",\n \"keyType\": {\n \"id\": 268,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"576:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"nodeType\": \"Mapping\",\n \"src\": \"568:35:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string => struct AddressRegistry.ContractRecord[])\"\n },\n \"valueName\": \"\",\n \"valueNameLocation\": \"-1:-1:-1\",\n \"valueType\": {\n \"baseType\": {\n \"id\": 270,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 269,\n \"name\": \"ContractRecord\",\n \"nameLocations\": [\n \"586:14:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 267,\n \"src\": \"586:14:1\"\n },\n \"referencedDeclaration\": 267,\n \"src\": \"586:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord\"\n }\n },\n \"id\": 271,\n \"nodeType\": \"ArrayTypeName\",\n \"src\": \"586:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord[]\"\n }\n }\n },\n \"visibility\": \"private\"\n },\n {\n \"constant\": false,\n \"id\": 276,\n \"mutability\": \"mutable\",\n \"name\": \"_contractNames\",\n \"nameLocation\": \"733:14:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 488,\n \"src\": \"716:31:1\",\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage\",\n \"typeString\": \"string[]\"\n },\n \"typeName\": {\n \"baseType\": {\n \"id\": 274,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"716:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"id\": 275,\n \"nodeType\": \"ArrayTypeName\",\n \"src\": \"716:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage_ptr\",\n \"typeString\": \"string[]\"\n }\n },\n \"visibility\": \"private\"\n },\n {\n \"constant\": false,\n \"id\": 280,\n \"mutability\": \"mutable\",\n \"name\": \"_nameExists\",\n \"nameLocation\": \"840:11:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 488,\n \"src\": \"808:43:1\",\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_bool_$\",\n \"typeString\": \"mapping(string => bool)\"\n },\n \"typeName\": {\n \"id\": 279,\n \"keyName\": \"\",\n \"keyNameLocation\": \"-1:-1:-1\",\n \"keyType\": {\n \"id\": 277,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"816:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"nodeType\": \"Mapping\",\n \"src\": \"808:23:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_bool_$\",\n \"typeString\": \"mapping(string => bool)\"\n },\n \"valueName\": \"\",\n \"valueNameLocation\": \"-1:-1:-1\",\n \"valueType\": {\n \"id\": 278,\n \"name\": \"bool\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"826:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n }\n },\n \"visibility\": \"private\"\n },\n {\n \"anonymous\": false,\n \"eventSelector\": \"bf2c71e696266b296731ca022cf688cebadbc3d4d52f1ccbe5c027e582dcc570\",\n \"id\": 290,\n \"name\": \"ContractAdded\",\n \"nameLocation\": \"864:13:1\",\n \"nodeType\": \"EventDefinition\",\n \"parameters\": {\n \"id\": 289,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 282,\n \"indexed\": true,\n \"mutability\": \"mutable\",\n \"name\": \"name\",\n \"nameLocation\": \"902:4:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 290,\n \"src\": \"887:19:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 281,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"887:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 284,\n \"indexed\": true,\n \"mutability\": \"mutable\",\n \"name\": \"contractAddress\",\n \"nameLocation\": \"932:15:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 290,\n \"src\": \"916:31:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 283,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"916:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 286,\n \"indexed\": false,\n \"mutability\": \"mutable\",\n \"name\": \"abiUrl\",\n \"nameLocation\": \"964:6:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 290,\n \"src\": \"957:13:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 285,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"957:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 288,\n \"indexed\": false,\n \"mutability\": \"mutable\",\n \"name\": \"version\",\n \"nameLocation\": \"988:7:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 290,\n \"src\": \"980:15:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 287,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"980:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"877:124:1\"\n },\n \"src\": \"858:144:1\"\n },\n {\n \"anonymous\": false,\n \"eventSelector\": \"7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f\",\n \"id\": 296,\n \"name\": \"AdminChanged\",\n \"nameLocation\": \"1013:12:1\",\n \"nodeType\": \"EventDefinition\",\n \"parameters\": {\n \"id\": 295,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 292,\n \"indexed\": true,\n \"mutability\": \"mutable\",\n \"name\": \"oldAdmin\",\n \"nameLocation\": \"1042:8:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 296,\n \"src\": \"1026:24:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 291,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1026:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 294,\n \"indexed\": true,\n \"mutability\": \"mutable\",\n \"name\": \"newAdmin\",\n \"nameLocation\": \"1068:8:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 296,\n \"src\": \"1052:24:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 293,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1052:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"1025:52:1\"\n },\n \"src\": \"1007:71:1\"\n },\n {\n \"body\": {\n \"id\": 307,\n \"nodeType\": \"Block\",\n \"src\": \"1105:134:1\",\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"id\": 302,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"expression\": {\n \"id\": 299,\n \"name\": \"msg\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 4294967281,\n \"src\": \"1136:3:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_message\",\n \"typeString\": \"msg\"\n }\n },\n \"id\": 300,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"1140:6:1\",\n \"memberName\": \"sender\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"1136:10:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \"==\",\n \"rightExpression\": {\n \"id\": 301,\n \"name\": \"admin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 262,\n \"src\": \"1150:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"1136:19:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a2063616c6c6572206973206e6f74207468652061646d696e\",\n \"id\": 303,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"1169:42:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_cb159406d97a2d44dd078dff96fa3a509f0aa29414d28bc90206a821cb3755b1\",\n \"typeString\": \"literal_string \\\"AddressRegistry: caller is not the admin\\\"\"\n },\n \"value\": \"AddressRegistry: caller is not the admin\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_cb159406d97a2d44dd078dff96fa3a509f0aa29414d28bc90206a821cb3755b1\",\n \"typeString\": \"literal_string \\\"AddressRegistry: caller is not the admin\\\"\"\n }\n ],\n \"id\": 298,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"1115:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 304,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1115:106:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 305,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1115:106:1\"\n },\n {\n \"id\": 306,\n \"nodeType\": \"PlaceholderStatement\",\n \"src\": \"1231:1:1\"\n }\n ]\n },\n \"id\": 308,\n \"name\": \"onlyAdmin\",\n \"nameLocation\": \"1093:9:1\",\n \"nodeType\": \"ModifierDefinition\",\n \"parameters\": {\n \"id\": 297,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1102:2:1\"\n },\n \"src\": \"1084:155:1\",\n \"virtual\": false,\n \"visibility\": \"internal\"\n },\n {\n \"body\": {\n \"id\": 316,\n \"nodeType\": \"Block\",\n \"src\": \"1259:35:1\",\n \"statements\": [\n {\n \"expression\": {\n \"id\": 314,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"id\": 311,\n \"name\": \"admin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 262,\n \"src\": \"1269:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"expression\": {\n \"id\": 312,\n \"name\": \"msg\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 4294967281,\n \"src\": \"1277:3:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_message\",\n \"typeString\": \"msg\"\n }\n },\n \"id\": 313,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"1281:6:1\",\n \"memberName\": \"sender\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"1277:10:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"1269:18:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"id\": 315,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1269:18:1\"\n }\n ]\n },\n \"id\": 317,\n \"implemented\": true,\n \"kind\": \"constructor\",\n \"modifiers\": [],\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 309,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1256:2:1\"\n },\n \"returnParameters\": {\n \"id\": 310,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1259:0:1\"\n },\n \"scope\": 488,\n \"src\": \"1245:49:1\",\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"body\": {\n \"id\": 344,\n \"nodeType\": \"Block\",\n \"src\": \"1445:202:1\",\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"id\": 331,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"id\": 326,\n \"name\": \"newAdmin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 320,\n \"src\": \"1476:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \"!=\",\n \"rightExpression\": {\n \"arguments\": [\n {\n \"hexValue\": \"30\",\n \"id\": 329,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"1496:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n }\n ],\n \"id\": 328,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"1488:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 327,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1488:7:1\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 330,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1488:10:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"1476:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a206e65772061646d696e20697320746865207a65726f2061646472657373\",\n \"id\": 332,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"1512:48:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_f51585c46b13d02a1d62f5a20a7a59926678787cab006e6d45003d6596a57c5b\",\n \"typeString\": \"literal_string \\\"AddressRegistry: new admin is the zero address\\\"\"\n },\n \"value\": \"AddressRegistry: new admin is the zero address\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_f51585c46b13d02a1d62f5a20a7a59926678787cab006e6d45003d6596a57c5b\",\n \"typeString\": \"literal_string \\\"AddressRegistry: new admin is the zero address\\\"\"\n }\n ],\n \"id\": 325,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"1455:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 333,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1455:115:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 334,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1455:115:1\"\n },\n {\n \"eventCall\": {\n \"arguments\": [\n {\n \"id\": 336,\n \"name\": \"admin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 262,\n \"src\": \"1598:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n {\n \"id\": 337,\n \"name\": \"newAdmin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 320,\n \"src\": \"1605:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 335,\n \"name\": \"AdminChanged\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 296,\n \"src\": \"1585:12:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n \"typeString\": \"function (address,address)\"\n }\n },\n \"id\": 338,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1585:29:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 339,\n \"nodeType\": \"EmitStatement\",\n \"src\": \"1580:34:1\"\n },\n {\n \"expression\": {\n \"id\": 342,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"id\": 340,\n \"name\": \"admin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 262,\n \"src\": \"1624:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"id\": 341,\n \"name\": \"newAdmin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 320,\n \"src\": \"1632:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"1624:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"id\": 343,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1624:16:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 318,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"1300:82:1\",\n \"text\": \" @dev Transfers administration of the registry to a new address.\"\n },\n \"functionSelector\": \"8f283970\",\n \"id\": 345,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [\n {\n \"id\": 323,\n \"kind\": \"modifierInvocation\",\n \"modifierName\": {\n \"id\": 322,\n \"name\": \"onlyAdmin\",\n \"nameLocations\": [\n \"1435:9:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 308,\n \"src\": \"1435:9:1\"\n },\n \"nodeType\": \"ModifierInvocation\",\n \"src\": \"1435:9:1\"\n }\n ],\n \"name\": \"changeAdmin\",\n \"nameLocation\": \"1396:11:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 321,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 320,\n \"mutability\": \"mutable\",\n \"name\": \"newAdmin\",\n \"nameLocation\": \"1416:8:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 345,\n \"src\": \"1408:16:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 319,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1408:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"1407:18:1\"\n },\n \"returnParameters\": {\n \"id\": 324,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1445:0:1\"\n },\n \"scope\": 488,\n \"src\": \"1387:260:1\",\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"external\"\n },\n {\n \"body\": {\n \"id\": 420,\n \"nodeType\": \"Block\",\n \"src\": \"1971:673:1\",\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"id\": 363,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"id\": 358,\n \"name\": \"contractAddress\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 350,\n \"src\": \"2002:15:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \"!=\",\n \"rightExpression\": {\n \"arguments\": [\n {\n \"hexValue\": \"30\",\n \"id\": 361,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2029:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n }\n ],\n \"id\": 360,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"2021:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 359,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2021:7:1\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 362,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2021:10:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"2002:29:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a20636f6e747261637420616464726573732063616e6e6f74206265207a65726f\",\n \"id\": 364,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2045:50:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_8b4b3d39595ff286fe4920e60453149c169d1740c0e80d3cba5c9b9f34ab6379\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract address cannot be zero\\\"\"\n },\n \"value\": \"AddressRegistry: contract address cannot be zero\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_8b4b3d39595ff286fe4920e60453149c169d1740c0e80d3cba5c9b9f34ab6379\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract address cannot be zero\\\"\"\n }\n ],\n \"id\": 357,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"1981:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 365,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1981:124:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 366,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1981:124:1\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"id\": 374,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 370,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2142:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n ],\n \"id\": 369,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"2136:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_bytes_storage_ptr_$\",\n \"typeString\": \"type(bytes storage pointer)\"\n },\n \"typeName\": {\n \"id\": 368,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2136:5:1\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 371,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2136:11:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n },\n \"id\": 372,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2148:6:1\",\n \"memberName\": \"length\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2136:18:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \">\",\n \"rightExpression\": {\n \"hexValue\": \"30\",\n \"id\": 373,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2157:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n },\n \"src\": \"2136:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a20636f6e7472616374206e616d652063616e6e6f7420626520656d707479\",\n \"id\": 375,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2172:48:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_1bb9b4bababfa5415006cfb7388a6199c54d8f58a3be11a3f1f461c3c138fca3\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract name cannot be empty\\\"\"\n },\n \"value\": \"AddressRegistry: contract name cannot be empty\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_1bb9b4bababfa5415006cfb7388a6199c54d8f58a3be11a3f1f461c3c138fca3\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract name cannot be empty\\\"\"\n }\n ],\n \"id\": 367,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"2115:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 376,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2115:115:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 377,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2115:115:1\"\n },\n {\n \"condition\": {\n \"id\": 381,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"UnaryOperation\",\n \"operator\": \"!\",\n \"prefix\": true,\n \"src\": \"2245:18:1\",\n \"subExpression\": {\n \"baseExpression\": {\n \"id\": 378,\n \"name\": \"_nameExists\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 280,\n \"src\": \"2246:11:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_bool_$\",\n \"typeString\": \"mapping(string memory => bool)\"\n }\n },\n \"id\": 380,\n \"indexExpression\": {\n \"id\": 379,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2258:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2246:17:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"id\": 395,\n \"nodeType\": \"IfStatement\",\n \"src\": \"2241:112:1\",\n \"trueBody\": {\n \"id\": 394,\n \"nodeType\": \"Block\",\n \"src\": \"2265:88:1\",\n \"statements\": [\n {\n \"expression\": {\n \"id\": 386,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"baseExpression\": {\n \"id\": 382,\n \"name\": \"_nameExists\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 280,\n \"src\": \"2279:11:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_bool_$\",\n \"typeString\": \"mapping(string memory => bool)\"\n }\n },\n \"id\": 384,\n \"indexExpression\": {\n \"id\": 383,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2291:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": true,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2279:17:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"hexValue\": \"74727565\",\n \"id\": 385,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"bool\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2299:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n \"value\": \"true\"\n },\n \"src\": \"2279:24:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"id\": 387,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2279:24:1\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 391,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2337:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n ],\n \"expression\": {\n \"id\": 388,\n \"name\": \"_contractNames\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 276,\n \"src\": \"2317:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage\",\n \"typeString\": \"string storage ref[] storage ref\"\n }\n },\n \"id\": 390,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2332:4:1\",\n \"memberName\": \"push\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2317:19:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_arraypush_nonpayable$_t_array$_t_string_storage_$dyn_storage_ptr_$_t_string_storage_$returns$__$attached_to$_t_array$_t_string_storage_$dyn_storage_ptr_$\",\n \"typeString\": \"function (string storage ref[] storage pointer,string storage ref)\"\n }\n },\n \"id\": 392,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2317:25:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 393,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2317:25:1\"\n }\n ]\n }\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"id\": 401,\n \"name\": \"contractAddress\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 350,\n \"src\": \"2437:15:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n {\n \"id\": 402,\n \"name\": \"abiUrl\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 352,\n \"src\": \"2462:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n ],\n \"id\": 400,\n \"name\": \"ContractRecord\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 267,\n \"src\": \"2404:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_struct$_ContractRecord_$267_storage_ptr_$\",\n \"typeString\": \"type(struct AddressRegistry.ContractRecord storage pointer)\"\n }\n },\n \"id\": 403,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"structConstructorCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [\n \"2420:15:1\",\n \"2454:6:1\"\n ],\n \"names\": [\n \"contractAddress\",\n \"abiUrl\"\n ],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2404:66:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord memory\"\n }\n ],\n \"expression\": {\n \"baseExpression\": {\n \"id\": 396,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"2363:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 398,\n \"indexExpression\": {\n \"id\": 397,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2380:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2363:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 399,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2386:4:1\",\n \"memberName\": \"push\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2363:27:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_arraypush_nonpayable$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_ptr_$_t_struct$_ContractRecord_$267_storage_$returns$__$attached_to$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_ptr_$\",\n \"typeString\": \"function (struct AddressRegistry.ContractRecord storage ref[] storage pointer,struct AddressRegistry.ContractRecord storage ref)\"\n }\n },\n \"id\": 404,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2363:117:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 405,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2363:117:1\"\n },\n {\n \"assignments\": [\n 407\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 407,\n \"mutability\": \"mutable\",\n \"name\": \"versionIndex\",\n \"nameLocation\": \"2499:12:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 420,\n \"src\": \"2491:20:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 406,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2491:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 412,\n \"initialValue\": {\n \"expression\": {\n \"baseExpression\": {\n \"id\": 408,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"2514:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 410,\n \"indexExpression\": {\n \"id\": 409,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2531:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2514:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 411,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2537:6:1\",\n \"memberName\": \"length\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2514:29:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"2491:52:1\"\n },\n {\n \"eventCall\": {\n \"arguments\": [\n {\n \"id\": 414,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2593:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n {\n \"id\": 415,\n \"name\": \"contractAddress\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 350,\n \"src\": \"2599:15:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n {\n \"id\": 416,\n \"name\": \"abiUrl\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 352,\n \"src\": \"2616:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n {\n \"id\": 417,\n \"name\": \"versionIndex\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 407,\n \"src\": \"2624:12:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n },\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n },\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n ],\n \"id\": 413,\n \"name\": \"ContractAdded\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 290,\n \"src\": \"2579:13:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_event_nonpayable$_t_string_memory_ptr_$_t_address_$_t_string_memory_ptr_$_t_uint256_$returns$__$\",\n \"typeString\": \"function (string memory,address,string memory,uint256)\"\n }\n },\n \"id\": 418,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2579:58:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 419,\n \"nodeType\": \"EmitStatement\",\n \"src\": \"2574:63:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 346,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"1653:176:1\",\n \"text\": \" @dev Appends a new deployed address to the history of a given contract name.\\n The last appended address is considered the \\\"active\\\" or \\\"latest\\\" version.\"\n },\n \"functionSelector\": \"7d6929e0\",\n \"id\": 421,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [\n {\n \"id\": 355,\n \"kind\": \"modifierInvocation\",\n \"modifierName\": {\n \"id\": 354,\n \"name\": \"onlyAdmin\",\n \"nameLocations\": [\n \"1961:9:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 308,\n \"src\": \"1961:9:1\"\n },\n \"nodeType\": \"ModifierInvocation\",\n \"src\": \"1961:9:1\"\n }\n ],\n \"name\": \"addContract\",\n \"nameLocation\": \"1843:11:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 353,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 348,\n \"mutability\": \"mutable\",\n \"name\": \"name\",\n \"nameLocation\": \"1878:4:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 421,\n \"src\": \"1864:18:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 347,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1864:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 350,\n \"mutability\": \"mutable\",\n \"name\": \"contractAddress\",\n \"nameLocation\": \"1900:15:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 421,\n \"src\": \"1892:23:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 349,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1892:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 352,\n \"mutability\": \"mutable\",\n \"name\": \"abiUrl\",\n \"nameLocation\": \"1939:6:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 421,\n \"src\": \"1925:20:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 351,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1925:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"1854:97:1\"\n },\n \"returnParameters\": {\n \"id\": 356,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1971:0:1\"\n },\n \"scope\": 488,\n \"src\": \"1834:810:1\",\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"external\"\n },\n {\n \"body\": {\n \"id\": 461,\n \"nodeType\": \"Block\",\n \"src\": \"2917:308:1\",\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"id\": 437,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"expression\": {\n \"baseExpression\": {\n \"id\": 432,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"2948:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 434,\n \"indexExpression\": {\n \"id\": 433,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 424,\n \"src\": \"2965:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2948:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 435,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2971:6:1\",\n \"memberName\": \"length\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2948:29:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \">\",\n \"rightExpression\": {\n \"hexValue\": \"30\",\n \"id\": 436,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2980:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n },\n \"src\": \"2948:33:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a20636f6e7472616374206e6f7420666f756e64\",\n \"id\": 438,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2995:37:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_d066a44a39671b21109182475e6b0e1e4835a3c0e1acbc3b59ed277bf9b1ecc0\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract not found\\\"\"\n },\n \"value\": \"AddressRegistry: contract not found\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_d066a44a39671b21109182475e6b0e1e4835a3c0e1acbc3b59ed277bf9b1ecc0\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract not found\\\"\"\n }\n ],\n \"id\": 431,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"2927:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 439,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2927:115:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 440,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2927:115:1\"\n },\n {\n \"assignments\": [\n 443\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 443,\n \"mutability\": \"mutable\",\n \"name\": \"record\",\n \"nameLocation\": \"3074:6:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 461,\n \"src\": \"3052:28:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord\"\n },\n \"typeName\": {\n \"id\": 442,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 441,\n \"name\": \"ContractRecord\",\n \"nameLocations\": [\n \"3052:14:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 267,\n \"src\": \"3052:14:1\"\n },\n \"referencedDeclaration\": 267,\n \"src\": \"3052:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 454,\n \"initialValue\": {\n \"baseExpression\": {\n \"baseExpression\": {\n \"id\": 444,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"3083:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 446,\n \"indexExpression\": {\n \"id\": 445,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 424,\n \"src\": \"3100:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"3083:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 453,\n \"indexExpression\": {\n \"commonType\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"id\": 452,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"expression\": {\n \"baseExpression\": {\n \"id\": 447,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"3119:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 449,\n \"indexExpression\": {\n \"id\": 448,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 424,\n \"src\": \"3136:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"3119:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 450,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"3142:6:1\",\n \"memberName\": \"length\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"3119:29:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \"-\",\n \"rightExpression\": {\n \"hexValue\": \"31\",\n \"id\": 451,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"3151:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_1_by_1\",\n \"typeString\": \"int_const 1\"\n },\n \"value\": \"1\"\n },\n \"src\": \"3119:33:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"3083:79:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"3052:110:1\"\n },\n {\n \"expression\": {\n \"components\": [\n {\n \"expression\": {\n \"id\": 455,\n \"name\": \"record\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 443,\n \"src\": \"3180:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord memory\"\n }\n },\n \"id\": 456,\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"3187:15:1\",\n \"memberName\": \"contractAddress\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 264,\n \"src\": \"3180:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n {\n \"expression\": {\n \"id\": 457,\n \"name\": \"record\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 443,\n \"src\": \"3204:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord memory\"\n }\n },\n \"id\": 458,\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"3211:6:1\",\n \"memberName\": \"abiUrl\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 266,\n \"src\": \"3204:13:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n }\n ],\n \"id\": 459,\n \"isConstant\": false,\n \"isInlineArray\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"TupleExpression\",\n \"src\": \"3179:39:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$_t_address_$_t_string_memory_ptr_$\",\n \"typeString\": \"tuple(address,string memory)\"\n }\n },\n \"functionReturnParameters\": 430,\n \"id\": 460,\n \"nodeType\": \"Return\",\n \"src\": \"3172:46:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 422,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"2650:154:1\",\n \"text\": \" @dev Returns the most recently deployed (active) address for a given contract name.\\n Reverts if the contract name has no history.\"\n },\n \"functionSelector\": \"9dc4a3ec\",\n \"id\": 462,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"getLatestContract\",\n \"nameLocation\": \"2818:17:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 425,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 424,\n \"mutability\": \"mutable\",\n \"name\": \"name\",\n \"nameLocation\": \"2859:4:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 462,\n \"src\": \"2845:18:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 423,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2845:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"2835:34:1\"\n },\n \"returnParameters\": {\n \"id\": 430,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 427,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 462,\n \"src\": \"2893:7:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 426,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2893:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 429,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 462,\n \"src\": \"2902:13:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 428,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2902:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"2892:24:1\"\n },\n \"scope\": 488,\n \"src\": \"2809:416:1\",\n \"stateMutability\": \"view\",\n \"virtual\": false,\n \"visibility\": \"external\"\n },\n {\n \"body\": {\n \"id\": 476,\n \"nodeType\": \"Block\",\n \"src\": \"3515:46:1\",\n \"statements\": [\n {\n \"expression\": {\n \"baseExpression\": {\n \"id\": 472,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"3532:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 474,\n \"indexExpression\": {\n \"id\": 473,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 465,\n \"src\": \"3549:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"3532:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"functionReturnParameters\": 471,\n \"id\": 475,\n \"nodeType\": \"Return\",\n \"src\": \"3525:29:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 463,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"3231:169:1\",\n \"text\": \" @dev Returns the entire chronological history of records for a given contract name.\\n The last record in the array is the current active version.\"\n },\n \"functionSelector\": \"df40e56e\",\n \"id\": 477,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"getContractHistory\",\n \"nameLocation\": \"3414:18:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 466,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 465,\n \"mutability\": \"mutable\",\n \"name\": \"name\",\n \"nameLocation\": \"3456:4:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 477,\n \"src\": \"3442:18:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 464,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3442:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"3432:34:1\"\n },\n \"returnParameters\": {\n \"id\": 471,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 470,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 477,\n \"src\": \"3490:23:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_memory_ptr_$dyn_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord[]\"\n },\n \"typeName\": {\n \"baseType\": {\n \"id\": 468,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 467,\n \"name\": \"ContractRecord\",\n \"nameLocations\": [\n \"3490:14:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 267,\n \"src\": \"3490:14:1\"\n },\n \"referencedDeclaration\": 267,\n \"src\": \"3490:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord\"\n }\n },\n \"id\": 469,\n \"nodeType\": \"ArrayTypeName\",\n \"src\": \"3490:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord[]\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"3489:25:1\"\n },\n \"scope\": 488,\n \"src\": \"3405:156:1\",\n \"stateMutability\": \"view\",\n \"virtual\": false,\n \"visibility\": \"external\"\n },\n {\n \"body\": {\n \"id\": 486,\n \"nodeType\": \"Block\",\n \"src\": \"3739:38:1\",\n \"statements\": [\n {\n \"expression\": {\n \"id\": 484,\n \"name\": \"_contractNames\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 276,\n \"src\": \"3756:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage\",\n \"typeString\": \"string storage ref[] storage ref\"\n }\n },\n \"functionReturnParameters\": 483,\n \"id\": 485,\n \"nodeType\": \"Return\",\n \"src\": \"3749:21:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 478,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"3567:96:1\",\n \"text\": \" @dev Returns all recognized contract names currently tracked in the registry.\"\n },\n \"functionSelector\": \"d7a9b816\",\n \"id\": 487,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"getAllContractNames\",\n \"nameLocation\": \"3677:19:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 479,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"3696:2:1\"\n },\n \"returnParameters\": {\n \"id\": 483,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 482,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 487,\n \"src\": \"3722:15:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_memory_ptr_$dyn_memory_ptr\",\n \"typeString\": \"string[]\"\n },\n \"typeName\": {\n \"baseType\": {\n \"id\": 480,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3722:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"id\": 481,\n \"nodeType\": \"ArrayTypeName\",\n \"src\": \"3722:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage_ptr\",\n \"typeString\": \"string[]\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"3721:17:1\"\n },\n \"scope\": 488,\n \"src\": \"3668:109:1\",\n \"stateMutability\": \"view\",\n \"virtual\": false,\n \"visibility\": \"external\"\n }\n ],\n \"scope\": 489,\n \"src\": \"325:3454:1\",\n \"usedErrors\": [],\n \"usedEvents\": [\n 290,\n 296\n ]\n }\n ],\n \"src\": \"39:3741:1\"\n },\n \"legacyAST\": {\n \"absolutePath\": \"/home/dme/Documents/blockchain/contracts/generated/tron/AddressRegistry.sol\",\n \"exportedSymbols\": {\n \"AddressRegistry\": [\n 488\n ]\n },\n \"id\": 489,\n \"license\": \"Apache-2.0\",\n \"nodeType\": \"SourceUnit\",\n \"nodes\": [\n {\n \"id\": 259,\n \"literals\": [\n \"solidity\",\n \"^\",\n \"0.8\",\n \".24\"\n ],\n \"nodeType\": \"PragmaDirective\",\n \"src\": \"39:24:1\"\n },\n {\n \"abstract\": false,\n \"baseContracts\": [],\n \"canonicalName\": \"AddressRegistry\",\n \"contractDependencies\": [],\n \"contractKind\": \"contract\",\n \"documentation\": {\n \"id\": 260,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"65:259:1\",\n \"text\": \" @title Address Registry\\n @dev An immutable registry that stores the historical and active deployment addresses for\\n D-Library Core Contracts (Factory, BouncerStorage, BackupStorage, etc.).\\n Designed to replace build-time static configuration.\"\n },\n \"fullyImplemented\": true,\n \"id\": 488,\n \"linearizedBaseContracts\": [\n 488\n ],\n \"name\": \"AddressRegistry\",\n \"nameLocation\": \"334:15:1\",\n \"nodeType\": \"ContractDefinition\",\n \"nodes\": [\n {\n \"constant\": false,\n \"functionSelector\": \"f851a440\",\n \"id\": 262,\n \"mutability\": \"mutable\",\n \"name\": \"admin\",\n \"nameLocation\": \"371:5:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 488,\n \"src\": \"356:20:1\",\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 261,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"356:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"public\"\n },\n {\n \"canonicalName\": \"AddressRegistry.ContractRecord\",\n \"id\": 267,\n \"members\": [\n {\n \"constant\": false,\n \"id\": 264,\n \"mutability\": \"mutable\",\n \"name\": \"contractAddress\",\n \"nameLocation\": \"423:15:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 267,\n \"src\": \"415:23:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 263,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"415:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 266,\n \"mutability\": \"mutable\",\n \"name\": \"abiUrl\",\n \"nameLocation\": \"455:6:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 267,\n \"src\": \"448:13:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 265,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"448:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"name\": \"ContractRecord\",\n \"nameLocation\": \"390:14:1\",\n \"nodeType\": \"StructDefinition\",\n \"scope\": 488,\n \"src\": \"383:85:1\",\n \"visibility\": \"public\"\n },\n {\n \"constant\": false,\n \"id\": 273,\n \"mutability\": \"mutable\",\n \"name\": \"_contractHistory\",\n \"nameLocation\": \"612:16:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 488,\n \"src\": \"568:60:1\",\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string => struct AddressRegistry.ContractRecord[])\"\n },\n \"typeName\": {\n \"id\": 272,\n \"keyName\": \"\",\n \"keyNameLocation\": \"-1:-1:-1\",\n \"keyType\": {\n \"id\": 268,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"576:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"nodeType\": \"Mapping\",\n \"src\": \"568:35:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string => struct AddressRegistry.ContractRecord[])\"\n },\n \"valueName\": \"\",\n \"valueNameLocation\": \"-1:-1:-1\",\n \"valueType\": {\n \"baseType\": {\n \"id\": 270,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 269,\n \"name\": \"ContractRecord\",\n \"nameLocations\": [\n \"586:14:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 267,\n \"src\": \"586:14:1\"\n },\n \"referencedDeclaration\": 267,\n \"src\": \"586:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord\"\n }\n },\n \"id\": 271,\n \"nodeType\": \"ArrayTypeName\",\n \"src\": \"586:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord[]\"\n }\n }\n },\n \"visibility\": \"private\"\n },\n {\n \"constant\": false,\n \"id\": 276,\n \"mutability\": \"mutable\",\n \"name\": \"_contractNames\",\n \"nameLocation\": \"733:14:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 488,\n \"src\": \"716:31:1\",\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage\",\n \"typeString\": \"string[]\"\n },\n \"typeName\": {\n \"baseType\": {\n \"id\": 274,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"716:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"id\": 275,\n \"nodeType\": \"ArrayTypeName\",\n \"src\": \"716:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage_ptr\",\n \"typeString\": \"string[]\"\n }\n },\n \"visibility\": \"private\"\n },\n {\n \"constant\": false,\n \"id\": 280,\n \"mutability\": \"mutable\",\n \"name\": \"_nameExists\",\n \"nameLocation\": \"840:11:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 488,\n \"src\": \"808:43:1\",\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_bool_$\",\n \"typeString\": \"mapping(string => bool)\"\n },\n \"typeName\": {\n \"id\": 279,\n \"keyName\": \"\",\n \"keyNameLocation\": \"-1:-1:-1\",\n \"keyType\": {\n \"id\": 277,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"816:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"nodeType\": \"Mapping\",\n \"src\": \"808:23:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_bool_$\",\n \"typeString\": \"mapping(string => bool)\"\n },\n \"valueName\": \"\",\n \"valueNameLocation\": \"-1:-1:-1\",\n \"valueType\": {\n \"id\": 278,\n \"name\": \"bool\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"826:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n }\n },\n \"visibility\": \"private\"\n },\n {\n \"anonymous\": false,\n \"eventSelector\": \"bf2c71e696266b296731ca022cf688cebadbc3d4d52f1ccbe5c027e582dcc570\",\n \"id\": 290,\n \"name\": \"ContractAdded\",\n \"nameLocation\": \"864:13:1\",\n \"nodeType\": \"EventDefinition\",\n \"parameters\": {\n \"id\": 289,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 282,\n \"indexed\": true,\n \"mutability\": \"mutable\",\n \"name\": \"name\",\n \"nameLocation\": \"902:4:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 290,\n \"src\": \"887:19:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 281,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"887:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 284,\n \"indexed\": true,\n \"mutability\": \"mutable\",\n \"name\": \"contractAddress\",\n \"nameLocation\": \"932:15:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 290,\n \"src\": \"916:31:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 283,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"916:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 286,\n \"indexed\": false,\n \"mutability\": \"mutable\",\n \"name\": \"abiUrl\",\n \"nameLocation\": \"964:6:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 290,\n \"src\": \"957:13:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 285,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"957:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 288,\n \"indexed\": false,\n \"mutability\": \"mutable\",\n \"name\": \"version\",\n \"nameLocation\": \"988:7:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 290,\n \"src\": \"980:15:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 287,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"980:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"877:124:1\"\n },\n \"src\": \"858:144:1\"\n },\n {\n \"anonymous\": false,\n \"eventSelector\": \"7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f\",\n \"id\": 296,\n \"name\": \"AdminChanged\",\n \"nameLocation\": \"1013:12:1\",\n \"nodeType\": \"EventDefinition\",\n \"parameters\": {\n \"id\": 295,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 292,\n \"indexed\": true,\n \"mutability\": \"mutable\",\n \"name\": \"oldAdmin\",\n \"nameLocation\": \"1042:8:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 296,\n \"src\": \"1026:24:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 291,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1026:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 294,\n \"indexed\": true,\n \"mutability\": \"mutable\",\n \"name\": \"newAdmin\",\n \"nameLocation\": \"1068:8:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 296,\n \"src\": \"1052:24:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 293,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1052:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"1025:52:1\"\n },\n \"src\": \"1007:71:1\"\n },\n {\n \"body\": {\n \"id\": 307,\n \"nodeType\": \"Block\",\n \"src\": \"1105:134:1\",\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"id\": 302,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"expression\": {\n \"id\": 299,\n \"name\": \"msg\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 4294967281,\n \"src\": \"1136:3:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_message\",\n \"typeString\": \"msg\"\n }\n },\n \"id\": 300,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"1140:6:1\",\n \"memberName\": \"sender\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"1136:10:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \"==\",\n \"rightExpression\": {\n \"id\": 301,\n \"name\": \"admin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 262,\n \"src\": \"1150:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"1136:19:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a2063616c6c6572206973206e6f74207468652061646d696e\",\n \"id\": 303,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"1169:42:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_cb159406d97a2d44dd078dff96fa3a509f0aa29414d28bc90206a821cb3755b1\",\n \"typeString\": \"literal_string \\\"AddressRegistry: caller is not the admin\\\"\"\n },\n \"value\": \"AddressRegistry: caller is not the admin\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_cb159406d97a2d44dd078dff96fa3a509f0aa29414d28bc90206a821cb3755b1\",\n \"typeString\": \"literal_string \\\"AddressRegistry: caller is not the admin\\\"\"\n }\n ],\n \"id\": 298,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"1115:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 304,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1115:106:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 305,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1115:106:1\"\n },\n {\n \"id\": 306,\n \"nodeType\": \"PlaceholderStatement\",\n \"src\": \"1231:1:1\"\n }\n ]\n },\n \"id\": 308,\n \"name\": \"onlyAdmin\",\n \"nameLocation\": \"1093:9:1\",\n \"nodeType\": \"ModifierDefinition\",\n \"parameters\": {\n \"id\": 297,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1102:2:1\"\n },\n \"src\": \"1084:155:1\",\n \"virtual\": false,\n \"visibility\": \"internal\"\n },\n {\n \"body\": {\n \"id\": 316,\n \"nodeType\": \"Block\",\n \"src\": \"1259:35:1\",\n \"statements\": [\n {\n \"expression\": {\n \"id\": 314,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"id\": 311,\n \"name\": \"admin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 262,\n \"src\": \"1269:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"expression\": {\n \"id\": 312,\n \"name\": \"msg\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 4294967281,\n \"src\": \"1277:3:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_message\",\n \"typeString\": \"msg\"\n }\n },\n \"id\": 313,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"1281:6:1\",\n \"memberName\": \"sender\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"1277:10:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"1269:18:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"id\": 315,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1269:18:1\"\n }\n ]\n },\n \"id\": 317,\n \"implemented\": true,\n \"kind\": \"constructor\",\n \"modifiers\": [],\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 309,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1256:2:1\"\n },\n \"returnParameters\": {\n \"id\": 310,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1259:0:1\"\n },\n \"scope\": 488,\n \"src\": \"1245:49:1\",\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"body\": {\n \"id\": 344,\n \"nodeType\": \"Block\",\n \"src\": \"1445:202:1\",\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"id\": 331,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"id\": 326,\n \"name\": \"newAdmin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 320,\n \"src\": \"1476:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \"!=\",\n \"rightExpression\": {\n \"arguments\": [\n {\n \"hexValue\": \"30\",\n \"id\": 329,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"1496:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n }\n ],\n \"id\": 328,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"1488:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 327,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1488:7:1\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 330,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1488:10:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"1476:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a206e65772061646d696e20697320746865207a65726f2061646472657373\",\n \"id\": 332,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"1512:48:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_f51585c46b13d02a1d62f5a20a7a59926678787cab006e6d45003d6596a57c5b\",\n \"typeString\": \"literal_string \\\"AddressRegistry: new admin is the zero address\\\"\"\n },\n \"value\": \"AddressRegistry: new admin is the zero address\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_f51585c46b13d02a1d62f5a20a7a59926678787cab006e6d45003d6596a57c5b\",\n \"typeString\": \"literal_string \\\"AddressRegistry: new admin is the zero address\\\"\"\n }\n ],\n \"id\": 325,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"1455:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 333,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1455:115:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 334,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1455:115:1\"\n },\n {\n \"eventCall\": {\n \"arguments\": [\n {\n \"id\": 336,\n \"name\": \"admin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 262,\n \"src\": \"1598:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n {\n \"id\": 337,\n \"name\": \"newAdmin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 320,\n \"src\": \"1605:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 335,\n \"name\": \"AdminChanged\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 296,\n \"src\": \"1585:12:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n \"typeString\": \"function (address,address)\"\n }\n },\n \"id\": 338,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1585:29:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 339,\n \"nodeType\": \"EmitStatement\",\n \"src\": \"1580:34:1\"\n },\n {\n \"expression\": {\n \"id\": 342,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"id\": 340,\n \"name\": \"admin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 262,\n \"src\": \"1624:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"id\": 341,\n \"name\": \"newAdmin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 320,\n \"src\": \"1632:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"1624:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"id\": 343,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1624:16:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 318,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"1300:82:1\",\n \"text\": \" @dev Transfers administration of the registry to a new address.\"\n },\n \"functionSelector\": \"8f283970\",\n \"id\": 345,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [\n {\n \"id\": 323,\n \"kind\": \"modifierInvocation\",\n \"modifierName\": {\n \"id\": 322,\n \"name\": \"onlyAdmin\",\n \"nameLocations\": [\n \"1435:9:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 308,\n \"src\": \"1435:9:1\"\n },\n \"nodeType\": \"ModifierInvocation\",\n \"src\": \"1435:9:1\"\n }\n ],\n \"name\": \"changeAdmin\",\n \"nameLocation\": \"1396:11:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 321,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 320,\n \"mutability\": \"mutable\",\n \"name\": \"newAdmin\",\n \"nameLocation\": \"1416:8:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 345,\n \"src\": \"1408:16:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 319,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1408:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"1407:18:1\"\n },\n \"returnParameters\": {\n \"id\": 324,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1445:0:1\"\n },\n \"scope\": 488,\n \"src\": \"1387:260:1\",\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"external\"\n },\n {\n \"body\": {\n \"id\": 420,\n \"nodeType\": \"Block\",\n \"src\": \"1971:673:1\",\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"id\": 363,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"id\": 358,\n \"name\": \"contractAddress\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 350,\n \"src\": \"2002:15:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \"!=\",\n \"rightExpression\": {\n \"arguments\": [\n {\n \"hexValue\": \"30\",\n \"id\": 361,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2029:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n }\n ],\n \"id\": 360,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"2021:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 359,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2021:7:1\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 362,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2021:10:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"2002:29:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a20636f6e747261637420616464726573732063616e6e6f74206265207a65726f\",\n \"id\": 364,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2045:50:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_8b4b3d39595ff286fe4920e60453149c169d1740c0e80d3cba5c9b9f34ab6379\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract address cannot be zero\\\"\"\n },\n \"value\": \"AddressRegistry: contract address cannot be zero\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_8b4b3d39595ff286fe4920e60453149c169d1740c0e80d3cba5c9b9f34ab6379\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract address cannot be zero\\\"\"\n }\n ],\n \"id\": 357,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"1981:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 365,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1981:124:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 366,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1981:124:1\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"id\": 374,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 370,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2142:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n ],\n \"id\": 369,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"2136:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_bytes_storage_ptr_$\",\n \"typeString\": \"type(bytes storage pointer)\"\n },\n \"typeName\": {\n \"id\": 368,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2136:5:1\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 371,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2136:11:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n },\n \"id\": 372,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2148:6:1\",\n \"memberName\": \"length\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2136:18:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \">\",\n \"rightExpression\": {\n \"hexValue\": \"30\",\n \"id\": 373,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2157:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n },\n \"src\": \"2136:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a20636f6e7472616374206e616d652063616e6e6f7420626520656d707479\",\n \"id\": 375,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2172:48:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_1bb9b4bababfa5415006cfb7388a6199c54d8f58a3be11a3f1f461c3c138fca3\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract name cannot be empty\\\"\"\n },\n \"value\": \"AddressRegistry: contract name cannot be empty\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_1bb9b4bababfa5415006cfb7388a6199c54d8f58a3be11a3f1f461c3c138fca3\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract name cannot be empty\\\"\"\n }\n ],\n \"id\": 367,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"2115:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 376,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2115:115:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 377,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2115:115:1\"\n },\n {\n \"condition\": {\n \"id\": 381,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"UnaryOperation\",\n \"operator\": \"!\",\n \"prefix\": true,\n \"src\": \"2245:18:1\",\n \"subExpression\": {\n \"baseExpression\": {\n \"id\": 378,\n \"name\": \"_nameExists\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 280,\n \"src\": \"2246:11:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_bool_$\",\n \"typeString\": \"mapping(string memory => bool)\"\n }\n },\n \"id\": 380,\n \"indexExpression\": {\n \"id\": 379,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2258:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2246:17:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"id\": 395,\n \"nodeType\": \"IfStatement\",\n \"src\": \"2241:112:1\",\n \"trueBody\": {\n \"id\": 394,\n \"nodeType\": \"Block\",\n \"src\": \"2265:88:1\",\n \"statements\": [\n {\n \"expression\": {\n \"id\": 386,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"baseExpression\": {\n \"id\": 382,\n \"name\": \"_nameExists\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 280,\n \"src\": \"2279:11:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_bool_$\",\n \"typeString\": \"mapping(string memory => bool)\"\n }\n },\n \"id\": 384,\n \"indexExpression\": {\n \"id\": 383,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2291:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": true,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2279:17:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"hexValue\": \"74727565\",\n \"id\": 385,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"bool\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2299:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n \"value\": \"true\"\n },\n \"src\": \"2279:24:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"id\": 387,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2279:24:1\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 391,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2337:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n ],\n \"expression\": {\n \"id\": 388,\n \"name\": \"_contractNames\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 276,\n \"src\": \"2317:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage\",\n \"typeString\": \"string storage ref[] storage ref\"\n }\n },\n \"id\": 390,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2332:4:1\",\n \"memberName\": \"push\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2317:19:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_arraypush_nonpayable$_t_array$_t_string_storage_$dyn_storage_ptr_$_t_string_storage_$returns$__$attached_to$_t_array$_t_string_storage_$dyn_storage_ptr_$\",\n \"typeString\": \"function (string storage ref[] storage pointer,string storage ref)\"\n }\n },\n \"id\": 392,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2317:25:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 393,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2317:25:1\"\n }\n ]\n }\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"id\": 401,\n \"name\": \"contractAddress\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 350,\n \"src\": \"2437:15:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n {\n \"id\": 402,\n \"name\": \"abiUrl\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 352,\n \"src\": \"2462:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n ],\n \"id\": 400,\n \"name\": \"ContractRecord\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 267,\n \"src\": \"2404:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_struct$_ContractRecord_$267_storage_ptr_$\",\n \"typeString\": \"type(struct AddressRegistry.ContractRecord storage pointer)\"\n }\n },\n \"id\": 403,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"structConstructorCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [\n \"2420:15:1\",\n \"2454:6:1\"\n ],\n \"names\": [\n \"contractAddress\",\n \"abiUrl\"\n ],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2404:66:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord memory\"\n }\n ],\n \"expression\": {\n \"baseExpression\": {\n \"id\": 396,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"2363:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 398,\n \"indexExpression\": {\n \"id\": 397,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2380:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2363:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 399,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2386:4:1\",\n \"memberName\": \"push\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2363:27:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_arraypush_nonpayable$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_ptr_$_t_struct$_ContractRecord_$267_storage_$returns$__$attached_to$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_ptr_$\",\n \"typeString\": \"function (struct AddressRegistry.ContractRecord storage ref[] storage pointer,struct AddressRegistry.ContractRecord storage ref)\"\n }\n },\n \"id\": 404,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2363:117:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 405,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2363:117:1\"\n },\n {\n \"assignments\": [\n 407\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 407,\n \"mutability\": \"mutable\",\n \"name\": \"versionIndex\",\n \"nameLocation\": \"2499:12:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 420,\n \"src\": \"2491:20:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 406,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2491:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 412,\n \"initialValue\": {\n \"expression\": {\n \"baseExpression\": {\n \"id\": 408,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"2514:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 410,\n \"indexExpression\": {\n \"id\": 409,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2531:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2514:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 411,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2537:6:1\",\n \"memberName\": \"length\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2514:29:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"2491:52:1\"\n },\n {\n \"eventCall\": {\n \"arguments\": [\n {\n \"id\": 414,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2593:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n {\n \"id\": 415,\n \"name\": \"contractAddress\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 350,\n \"src\": \"2599:15:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n {\n \"id\": 416,\n \"name\": \"abiUrl\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 352,\n \"src\": \"2616:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n {\n \"id\": 417,\n \"name\": \"versionIndex\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 407,\n \"src\": \"2624:12:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n },\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n },\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n ],\n \"id\": 413,\n \"name\": \"ContractAdded\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 290,\n \"src\": \"2579:13:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_event_nonpayable$_t_string_memory_ptr_$_t_address_$_t_string_memory_ptr_$_t_uint256_$returns$__$\",\n \"typeString\": \"function (string memory,address,string memory,uint256)\"\n }\n },\n \"id\": 418,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2579:58:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 419,\n \"nodeType\": \"EmitStatement\",\n \"src\": \"2574:63:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 346,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"1653:176:1\",\n \"text\": \" @dev Appends a new deployed address to the history of a given contract name.\\n The last appended address is considered the \\\"active\\\" or \\\"latest\\\" version.\"\n },\n \"functionSelector\": \"7d6929e0\",\n \"id\": 421,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [\n {\n \"id\": 355,\n \"kind\": \"modifierInvocation\",\n \"modifierName\": {\n \"id\": 354,\n \"name\": \"onlyAdmin\",\n \"nameLocations\": [\n \"1961:9:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 308,\n \"src\": \"1961:9:1\"\n },\n \"nodeType\": \"ModifierInvocation\",\n \"src\": \"1961:9:1\"\n }\n ],\n \"name\": \"addContract\",\n \"nameLocation\": \"1843:11:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 353,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 348,\n \"mutability\": \"mutable\",\n \"name\": \"name\",\n \"nameLocation\": \"1878:4:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 421,\n \"src\": \"1864:18:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 347,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1864:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 350,\n \"mutability\": \"mutable\",\n \"name\": \"contractAddress\",\n \"nameLocation\": \"1900:15:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 421,\n \"src\": \"1892:23:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 349,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1892:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 352,\n \"mutability\": \"mutable\",\n \"name\": \"abiUrl\",\n \"nameLocation\": \"1939:6:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 421,\n \"src\": \"1925:20:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 351,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1925:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"1854:97:1\"\n },\n \"returnParameters\": {\n \"id\": 356,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1971:0:1\"\n },\n \"scope\": 488,\n \"src\": \"1834:810:1\",\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"external\"\n },\n {\n \"body\": {\n \"id\": 461,\n \"nodeType\": \"Block\",\n \"src\": \"2917:308:1\",\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"id\": 437,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"expression\": {\n \"baseExpression\": {\n \"id\": 432,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"2948:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 434,\n \"indexExpression\": {\n \"id\": 433,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 424,\n \"src\": \"2965:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2948:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 435,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2971:6:1\",\n \"memberName\": \"length\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2948:29:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \">\",\n \"rightExpression\": {\n \"hexValue\": \"30\",\n \"id\": 436,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2980:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n },\n \"src\": \"2948:33:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a20636f6e7472616374206e6f7420666f756e64\",\n \"id\": 438,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2995:37:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_d066a44a39671b21109182475e6b0e1e4835a3c0e1acbc3b59ed277bf9b1ecc0\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract not found\\\"\"\n },\n \"value\": \"AddressRegistry: contract not found\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_d066a44a39671b21109182475e6b0e1e4835a3c0e1acbc3b59ed277bf9b1ecc0\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract not found\\\"\"\n }\n ],\n \"id\": 431,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"2927:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 439,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2927:115:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 440,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2927:115:1\"\n },\n {\n \"assignments\": [\n 443\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 443,\n \"mutability\": \"mutable\",\n \"name\": \"record\",\n \"nameLocation\": \"3074:6:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 461,\n \"src\": \"3052:28:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord\"\n },\n \"typeName\": {\n \"id\": 442,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 441,\n \"name\": \"ContractRecord\",\n \"nameLocations\": [\n \"3052:14:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 267,\n \"src\": \"3052:14:1\"\n },\n \"referencedDeclaration\": 267,\n \"src\": \"3052:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 454,\n \"initialValue\": {\n \"baseExpression\": {\n \"baseExpression\": {\n \"id\": 444,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"3083:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 446,\n \"indexExpression\": {\n \"id\": 445,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 424,\n \"src\": \"3100:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"3083:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 453,\n \"indexExpression\": {\n \"commonType\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"id\": 452,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"expression\": {\n \"baseExpression\": {\n \"id\": 447,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"3119:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 449,\n \"indexExpression\": {\n \"id\": 448,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 424,\n \"src\": \"3136:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"3119:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 450,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"3142:6:1\",\n \"memberName\": \"length\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"3119:29:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \"-\",\n \"rightExpression\": {\n \"hexValue\": \"31\",\n \"id\": 451,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"3151:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_1_by_1\",\n \"typeString\": \"int_const 1\"\n },\n \"value\": \"1\"\n },\n \"src\": \"3119:33:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"3083:79:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"3052:110:1\"\n },\n {\n \"expression\": {\n \"components\": [\n {\n \"expression\": {\n \"id\": 455,\n \"name\": \"record\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 443,\n \"src\": \"3180:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord memory\"\n }\n },\n \"id\": 456,\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"3187:15:1\",\n \"memberName\": \"contractAddress\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 264,\n \"src\": \"3180:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n {\n \"expression\": {\n \"id\": 457,\n \"name\": \"record\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 443,\n \"src\": \"3204:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord memory\"\n }\n },\n \"id\": 458,\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"3211:6:1\",\n \"memberName\": \"abiUrl\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 266,\n \"src\": \"3204:13:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n }\n ],\n \"id\": 459,\n \"isConstant\": false,\n \"isInlineArray\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"TupleExpression\",\n \"src\": \"3179:39:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$_t_address_$_t_string_memory_ptr_$\",\n \"typeString\": \"tuple(address,string memory)\"\n }\n },\n \"functionReturnParameters\": 430,\n \"id\": 460,\n \"nodeType\": \"Return\",\n \"src\": \"3172:46:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 422,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"2650:154:1\",\n \"text\": \" @dev Returns the most recently deployed (active) address for a given contract name.\\n Reverts if the contract name has no history.\"\n },\n \"functionSelector\": \"9dc4a3ec\",\n \"id\": 462,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"getLatestContract\",\n \"nameLocation\": \"2818:17:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 425,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 424,\n \"mutability\": \"mutable\",\n \"name\": \"name\",\n \"nameLocation\": \"2859:4:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 462,\n \"src\": \"2845:18:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 423,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2845:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"2835:34:1\"\n },\n \"returnParameters\": {\n \"id\": 430,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 427,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 462,\n \"src\": \"2893:7:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 426,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2893:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 429,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 462,\n \"src\": \"2902:13:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 428,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2902:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"2892:24:1\"\n },\n \"scope\": 488,\n \"src\": \"2809:416:1\",\n \"stateMutability\": \"view\",\n \"virtual\": false,\n \"visibility\": \"external\"\n },\n {\n \"body\": {\n \"id\": 476,\n \"nodeType\": \"Block\",\n \"src\": \"3515:46:1\",\n \"statements\": [\n {\n \"expression\": {\n \"baseExpression\": {\n \"id\": 472,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"3532:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 474,\n \"indexExpression\": {\n \"id\": 473,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 465,\n \"src\": \"3549:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"3532:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"functionReturnParameters\": 471,\n \"id\": 475,\n \"nodeType\": \"Return\",\n \"src\": \"3525:29:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 463,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"3231:169:1\",\n \"text\": \" @dev Returns the entire chronological history of records for a given contract name.\\n The last record in the array is the current active version.\"\n },\n \"functionSelector\": \"df40e56e\",\n \"id\": 477,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"getContractHistory\",\n \"nameLocation\": \"3414:18:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 466,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 465,\n \"mutability\": \"mutable\",\n \"name\": \"name\",\n \"nameLocation\": \"3456:4:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 477,\n \"src\": \"3442:18:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 464,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3442:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"3432:34:1\"\n },\n \"returnParameters\": {\n \"id\": 471,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 470,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 477,\n \"src\": \"3490:23:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_memory_ptr_$dyn_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord[]\"\n },\n \"typeName\": {\n \"baseType\": {\n \"id\": 468,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 467,\n \"name\": \"ContractRecord\",\n \"nameLocations\": [\n \"3490:14:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 267,\n \"src\": \"3490:14:1\"\n },\n \"referencedDeclaration\": 267,\n \"src\": \"3490:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord\"\n }\n },\n \"id\": 469,\n \"nodeType\": \"ArrayTypeName\",\n \"src\": \"3490:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord[]\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"3489:25:1\"\n },\n \"scope\": 488,\n \"src\": \"3405:156:1\",\n \"stateMutability\": \"view\",\n \"virtual\": false,\n \"visibility\": \"external\"\n },\n {\n \"body\": {\n \"id\": 486,\n \"nodeType\": \"Block\",\n \"src\": \"3739:38:1\",\n \"statements\": [\n {\n \"expression\": {\n \"id\": 484,\n \"name\": \"_contractNames\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 276,\n \"src\": \"3756:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage\",\n \"typeString\": \"string storage ref[] storage ref\"\n }\n },\n \"functionReturnParameters\": 483,\n \"id\": 485,\n \"nodeType\": \"Return\",\n \"src\": \"3749:21:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 478,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"3567:96:1\",\n \"text\": \" @dev Returns all recognized contract names currently tracked in the registry.\"\n },\n \"functionSelector\": \"d7a9b816\",\n \"id\": 487,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"getAllContractNames\",\n \"nameLocation\": \"3677:19:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 479,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"3696:2:1\"\n },\n \"returnParameters\": {\n \"id\": 483,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 482,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 487,\n \"src\": \"3722:15:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_memory_ptr_$dyn_memory_ptr\",\n \"typeString\": \"string[]\"\n },\n \"typeName\": {\n \"baseType\": {\n \"id\": 480,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3722:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"id\": 481,\n \"nodeType\": \"ArrayTypeName\",\n \"src\": \"3722:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage_ptr\",\n \"typeString\": \"string[]\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"3721:17:1\"\n },\n \"scope\": 488,\n \"src\": \"3668:109:1\",\n \"stateMutability\": \"view\",\n \"virtual\": false,\n \"visibility\": \"external\"\n }\n ],\n \"scope\": 489,\n \"src\": \"325:3454:1\",\n \"usedErrors\": [],\n \"usedEvents\": [\n 290,\n 296\n ]\n }\n ],\n \"src\": \"39:3741:1\"\n },\n \"compiler\": {\n \"name\": \"solc\",\n \"version\": \"0.8.24+commit.7d902c66.Emscripten.clang\"\n },\n \"networks\": {},\n \"schemaVersion\": \"2.0.1\",\n \"updatedAt\": \"2026-02-25T11:29:52.687Z\"\n}","import config from './config';\nimport { ProviderConfig, ContractConfigs } from \"./interfaces\";\nimport evmRegistry from './abis/evm/AddressRegistry.json'\nimport tronRegistry from './abis/tron/AddressRegistry.json'\n\nconst evmAddressRegistryAbi = evmRegistry.abi;\nconst tronAddressRegistryAbi = tronRegistry.abi;\n\nexport { evmAddressRegistryAbi, tronAddressRegistryAbi }\nexport { type ProviderConfig, type ContractConfigs }\n\n\nexport { config };"],"mappings":"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","names":["CACHE_KEY_PREFIX","CACHE_DURATION_MS","RegistryAddressLoader","tech","chainId","key","data","e","cache","abiUrl","res","abi","registry","cacheKey","now","addresses","entry","camelCaseName","contractNames","newEntries","name","address","normalizedName","newCache","registryAddressLoader","config_default","AddressRegistry_default","evmAddressRegistryAbi","tronAddressRegistryAbi"]}
|
|
1
|
+
{"version":3,"sources":["../src/loader.ts","../src/index.ts"],"sourcesContent":["import { ReadOnlyDomainAPI, Tech, AddressRegistryReadAPI } from '@the_library/web3-core';\n\nexport interface ContractLoadingStatus {\n name: string;\n status: 'pending' | 'loading' | 'loaded' | 'error';\n address?: string;\n}\n\nexport interface LoadingStatus {\n total: number;\n loaded: number;\n contracts: ContractLoadingStatus[];\n}\n\n\nconst CACHE_KEY_PREFIX = 'dcode_registry_cache_v2_';\nconst CACHE_DURATION_MS = 24 * 60 * 60 * 1000; // 24 hours\n\nexport interface CacheEntry {\n address: string;\n abi: any;\n txId: string;\n originalName: string;\n}\n\nexport interface RegistryCache {\n timestamp: number;\n entries: {\n [contractName: string]: CacheEntry;\n };\n dataEntries?: {\n [dataKey: string]: string;\n };\n}\n\nexport class RegistryAddressLoader {\n\n private defered: { [key: string]: Promise<true> } = {};\n private memoryCache: Map<string, RegistryCache> = new Map();\n private listeners: Set<(tech: Tech, chainId: string | number, status: LoadingStatus) => void> = new Set();\n private loadingStatuses: Map<string, LoadingStatus> = new Map();\n\n\n private getCacheKey(tech: string, chainId: string | number): string {\n return `${CACHE_KEY_PREFIX}${tech}_${chainId}`;\n }\n\n private getFromLocalStorage(key: string): RegistryCache | null {\n const data = localStorage.getItem(key);\n if (!data) return null;\n try {\n return JSON.parse(data);\n } catch (e) {\n console.error(`[RegistryLoader] Failed to parse cache for ${key}`, e);\n return null;\n }\n }\n\n private saveToLocalStorage(key: string, cache: RegistryCache): void {\n localStorage.setItem(key, JSON.stringify(cache));\n }\n\n public subscribe(listener: (tech: Tech, chainId: string | number, status: LoadingStatus) => void): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n private notify(tech: Tech, chainId: string | number, status: LoadingStatus): void {\n const key = `${tech}:${chainId}`;\n this.loadingStatuses.set(key, status);\n this.listeners.forEach(l => l(tech, chainId, status));\n }\n\n public getLoadingStatus(tech: Tech, chainId: string | number): LoadingStatus | undefined {\n return this.loadingStatuses.get(`${tech}:${chainId}`);\n }\n\n\n private async fetchAbiFromArweave(abiUrl: string): Promise<any> {\n if (!abiUrl) return null;\n try {\n const res = await fetch(`https://arweave.net/${abiUrl}`);\n if (res.ok) {\n const abi = await res.json();\n console.log(`[RegistryLoader] Successfully fetched ABI for ${abiUrl}`);\n return abi;\n }\n console.error(`[RegistryLoader] Arweave fetch failed for ${abiUrl}: ${res.status} ${res.statusText}`);\n } catch (e) {\n console.warn(`[RegistryLoader] Failed to fetch ABI from Arweave (${abiUrl}):`, e);\n }\n return null;\n }\n\n public async loadAllKeys(tech: Tech, chainId: number | string): Promise<Record<string, string>> {\n const addresses: Record<string, string> = {};\n const cacheKey = this.getCacheKey(tech, chainId);\n\n const promiseKey = `${tech}-${chainId}`;\n if (typeof this.defered[promiseKey] !== 'undefined') {\n await this.defered[promiseKey];\n }\n let cache = this.memoryCache.get(cacheKey) || this.getFromLocalStorage(cacheKey);\n\n if (cache) {\n this.memoryCache.set(cacheKey, cache);\n\n Object.values(cache.entries).forEach(entry => {\n const camelCaseName = entry.originalName.charAt(0).toLowerCase() + entry.originalName.slice(1);\n addresses[camelCaseName] = entry.address;\n });\n return addresses;\n }\n throw new Error(`No cache found for ${tech}:${chainId}`);\n }\n public async Initialize(tech: Tech, chainId: number | string, registry: AddressRegistryReadAPI, registryAddress?: string): Promise<Record<string, string>> {\n console.log(`[RegistryLoader] Starting Initialization for ${tech}:${chainId} using AddressRegistry at ${registryAddress || 'unknown'}`);\n\n const cacheKey = this.getCacheKey(tech, chainId);\n const now = Date.now();\n\n\n const promiseKey = `${tech}-${chainId}`;\n if (typeof this.defered[promiseKey] !== 'undefined') {\n return this.loadAllKeys(tech, chainId)\n }\n let resolve!: (value: true) => void;\n let reject!: (reason?: any) => void;\n this.defered[promiseKey] = new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n\n let cache = this.memoryCache.get(cacheKey) || this.getFromLocalStorage(cacheKey);\n\n // Time Check: Has it been less than 24 hours?\n if (cache && (now - cache.timestamp < CACHE_DURATION_MS)) {\n console.log(`[RegistryLoader] Cache valid for ${tech}:${chainId}`);\n const keys = this.loadAllKeys(tech, chainId)\n resolve(true);\n return keys;\n }\n\n console.log(`[RegistryLoader] Cache expired or missing for ${tech}:${chainId}. Performing Full Sync...`);\n\n const contractNames = await registry.getAllContractNames();\n let dataKeys: string[] = [];\n try {\n dataKeys = await registry.getAllDataKeys();\n } catch (e) {\n console.warn(`[RegistryLoader] Failed to fetch data keys (method may not exist yet on this network for ${tech}:${chainId})`);\n }\n \n console.log(`[RegistryLoader] Retrieved ${contractNames.length} contract names and ${dataKeys.length} data keys for ${tech}:${chainId} (Registry at ${registryAddress}):`, contractNames, dataKeys);\n\n\n const status: LoadingStatus = {\n total: contractNames.length + dataKeys.length,\n loaded: 0,\n contracts: contractNames.map(name => ({ name, status: 'pending' }))\n };\n this.notify(tech, chainId, status);\n\n const newEntries: { [name: string]: CacheEntry } = {};\n const newDataEntries: { [name: string]: string } = {};\n const addresses: Record<string, string> = {};\n\n const loadPromises = contractNames.map(async (name) => {\n const contractStatus = status.contracts.find(c => c.name === name)!;\n contractStatus.status = 'loading';\n this.notify(tech, chainId, { ...status });\n\n try {\n const [address, abiUrl] = await registry.getLatestContract(name);\n console.log(`[RegistryLoader] Found ${name} at ${address} (ABI: ${abiUrl}) for ${tech}:${chainId}`);\n\n const normalizedName = name.toLowerCase();\n const camelCaseName = name.charAt(0).toLowerCase() + name.slice(1);\n\n let abi = null;\n // Try to reuse ABI from old cache if txId matches\n if (cache && cache.entries[normalizedName] && cache.entries[normalizedName].txId === abiUrl) {\n abi = cache.entries[normalizedName].abi;\n } else if (abiUrl) {\n console.log(`[RegistryLoader] Fetching new ABI for ${name} (${abiUrl})...`);\n abi = await this.fetchAbiFromArweave(abiUrl);\n } else {\n console.warn(`[RegistryLoader] No ABI URL found for ${name} on ${tech}:${chainId}`);\n }\n\n newEntries[normalizedName] = {\n address,\n abi,\n txId: abiUrl,\n originalName: name\n };\n addresses[camelCaseName] = address;\n contractStatus.status = abi || !abiUrl ? 'loaded' : 'error';\n contractStatus.address = address;\n } catch (e) {\n console.warn(`[RegistryLoader] Failed to load contract ${name} for ${tech}:${chainId}:`, e);\n contractStatus.status = 'error';\n } finally {\n status.loaded++;\n this.notify(tech, chainId, { ...status });\n }\n });\n\n const dataPromises = dataKeys.map(async (key) => {\n try {\n const value = await registry.getLatestData(key);\n newDataEntries[key] = value;\n console.log(`[RegistryLoader] Found data ${key} = ${value} for ${tech}:${chainId}`);\n } catch (e) {\n console.warn(`[RegistryLoader] Failed to load data ${key} for ${tech}:${chainId}:`, e);\n } finally {\n status.loaded++;\n this.notify(tech, chainId, { ...status });\n }\n });\n\n await Promise.all([...loadPromises, ...dataPromises]);\n\n const hasErrors = status.contracts.some(c => c.status === 'error');\n\n const newCache: RegistryCache = {\n timestamp: hasErrors ? (cache?.timestamp || 0) : now,\n entries: newEntries,\n dataEntries: newDataEntries\n };\n\n this.memoryCache.set(cacheKey, newCache);\n this.saveToLocalStorage(cacheKey, newCache);\n resolve(true);\n return addresses;\n }\n\n\n public getAddress(tech: string, chainId: string | number, name: string): string | undefined {\n const cacheKey = this.getCacheKey(tech, chainId);\n const cache = this.memoryCache.get(cacheKey);\n return cache?.entries[name.toLowerCase()]?.address;\n }\n\n public getAbi(tech: string, chainId: string | number, name: string): any {\n const cacheKey = this.getCacheKey(tech, chainId);\n const cache = this.memoryCache.get(cacheKey);\n return cache?.entries[name.toLowerCase()]?.abi;\n }\n\n public getData(tech: string, chainId: string | number, key: string): string | undefined {\n const cacheKey = this.getCacheKey(tech, chainId);\n const cache = this.memoryCache.get(cacheKey);\n return cache?.dataEntries?.[key];\n }\n}\n\nexport const registryAddressLoader = new RegistryAddressLoader();\n\n/**\n * Proxy to registryAddressLoader for backward compatibility\n */\nexport function getContractAbi(ecosystem: string, networkId: string | number, contractName: string): any {\n return registryAddressLoader.getAbi(ecosystem, networkId, contractName);\n}\n","export * from './loader';\nexport * from '@the_library/web3-contracts';\n"],"mappings":"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","names":["CACHE_KEY_PREFIX","CACHE_DURATION_MS","RegistryAddressLoader","tech","chainId","key","data","e","cache","listener","status","l","abiUrl","res","abi","addresses","cacheKey","promiseKey","entry","camelCaseName","registry","registryAddress","now","resolve","reject","_resolve","_reject","keys","contractNames","dataKeys","name","newEntries","newDataEntries","loadPromises","contractStatus","address","normalizedName","dataPromises","value","newCache","c","registryAddressLoader","getContractAbi","ecosystem","networkId","contractName"]}
|