{
  "fileName": "DeprecatedApp.sol",
  "contractName": "DeprecatedApp",
  "source": "pragma solidity ^0.6.0;\n// SPDX-License-Identifier: MIT\n\nimport \"../application/ImplementationProvider.sol\";\nimport \"../application/Package.sol\";\nimport { DeprecatedAdminUpgradeabilityProxy as AdminUpgradeabilityProxy } from \"../mocks/DeprecatedAdminUpgradeabilityProxy.sol\";\nimport \"../ownership/Ownable.sol\";\n\n/**\n * @title App\n * @dev Contract for upgradeable applications.\n * It handles the creation and upgrading of proxies.\n */\ncontract DeprecatedApp is OpenZeppelinUpgradesOwnable {\n  /**\n   * @dev Emitted when a new proxy is created.\n   * @param proxy Address of the created proxy.\n   */\n  event ProxyCreated(address proxy);\n\n  /**\n   * @dev Emitted when a package dependency is changed in the application.\n   * @param providerName Name of the package that changed.\n   * @param package Address of the package associated to the name.\n   * @param version Version of the package in use.\n   */\n  event PackageChanged(string providerName, address package, uint64[3] version);\n\n  /**\n   * @dev Tracks a package in a particular version, used for retrieving implementations\n   */\n  struct ProviderInfo {\n    Package package;\n    uint64[3] version;\n  }\n\n  /**\n   * @dev Maps from dependency name to a tuple of package and version\n   */\n  mapping(string => ProviderInfo) internal providers;\n\n  /**\n   * @dev Constructor function.\n   */\n  constructor() public { }\n\n  /**\n   * @dev Returns the provider for a given package name, or zero if not set.\n   * @param packageName Name of the package to be retrieved.\n   * @return provider The provider.\n   */\n  function getProvider(string memory packageName) public view returns (ImplementationProvider provider) {\n    ProviderInfo storage info = providers[packageName];\n    if (address(info.package) == address(0)) return ImplementationProvider(0);\n    return ImplementationProvider(info.package.getContract(info.version));\n  }\n\n  /**\n   * @dev Returns information on a package given its name.\n   * @param packageName Name of the package to be queried.\n   * @return A tuple with the package address and pinned version given a package name, or zero if not set\n   */\n  function getPackage(string memory packageName) public view returns (Package, uint64[3] memory) {\n    ProviderInfo storage info = providers[packageName];\n    return (info.package, info.version);\n  }\n\n  /**\n   * @dev Sets a package in a specific version as a dependency for this application.\n   * Requires the version to be present in the package.\n   * @param packageName Name of the package to set or overwrite.\n   * @param package Address of the package to register.\n   * @param version Version of the package to use in this application.\n   */\n  function setPackage(string memory packageName, Package package, uint64[3] memory version) public onlyOwner {\n    require(package.hasVersion(version), \"The requested version must be registered in the given package\");\n    providers[packageName] = ProviderInfo(package, version);\n    emit PackageChanged(packageName, address(package), version);\n  }\n\n  /**\n   * @dev Unsets a package given its name.\n   * Reverts if the package is not set in the application.\n   * @param packageName Name of the package to remove.\n   */\n  function unsetPackage(string memory packageName) public onlyOwner {\n    require(address(providers[packageName].package) != address(0), \"Package to unset not found\");\n    delete providers[packageName];\n    emit PackageChanged(packageName, address(0), [uint64(0), uint64(0), uint64(0)]);\n  }\n\n  /**\n   * @dev Returns the implementation address for a given contract name, provided by the `ImplementationProvider`.\n   * @param packageName Name of the package where the contract is contained.\n   * @param contractName Name of the contract.\n   * @return Address where the contract is implemented.\n   */\n  function getImplementation(string memory packageName, string memory contractName) public view returns (address) {\n    ImplementationProvider provider = getProvider(packageName);\n    if (address(provider) == address(0)) return address(0);\n    return provider.getImplementation(contractName);\n  }\n\n  /**\n   * @dev Returns the current implementation of a proxy.\n   * This is needed because only the proxy admin can query it.\n   * @return The address of the current implementation of the proxy.\n   */\n  function getProxyImplementation(AdminUpgradeabilityProxy proxy) public returns (address) {\n    return proxy.implementation();\n  }\n\n  /**\n   * @dev Returns the admin of a proxy. Only the admin can query it.\n   * @return The address of the current admin of the proxy.\n   */\n  function getProxyAdmin(AdminUpgradeabilityProxy proxy) public view returns (address) {\n    return proxy.admin();\n  }\n\n  /**\n   * @dev Changes the admin of a proxy.\n   * @param proxy Proxy to change admin.\n   * @param newAdmin Address to transfer proxy administration to.\n   */\n  function changeProxyAdmin(AdminUpgradeabilityProxy proxy, address newAdmin) public onlyOwner {\n    proxy.changeAdmin(newAdmin);\n  }\n\n  /**\n   * @dev Creates a new proxy for the given contract and forwards a function call to it.\n   * This is useful to initialize the proxied contract.\n   * @param packageName Name of the package where the contract is contained.\n   * @param contractName Name of the contract.\n   * @param data Data to send as msg.data to the corresponding implementation to initialize the proxied contract.\n   * It should include the signature and the parameters of the function to be called, as described in\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\n   * @return Address of the new proxy.\n   */\n   function create(string memory packageName, string memory contractName, bytes memory data) payable public returns (AdminUpgradeabilityProxy) {\n    address implementation = getImplementation(packageName, contractName);\n     AdminUpgradeabilityProxy proxy = (new AdminUpgradeabilityProxy){value: msg.value}(implementation, data);\n     emit ProxyCreated(address(proxy));\n     return proxy;\n  }\n\n  /**\n   * @dev Upgrades a proxy to the newest implementation of a contract.\n   * @param proxy Proxy to be upgraded.\n   * @param packageName Name of the package where the contract is contained.\n   * @param contractName Name of the contract.\n   */\n  function upgrade(AdminUpgradeabilityProxy proxy, string memory packageName, string memory contractName) public onlyOwner {\n    address implementation = getImplementation(packageName, contractName);\n    proxy.upgradeTo(implementation);\n  }\n\n  /**\n   * @dev Upgrades a proxy to the newest implementation of a contract and forwards a function call to it.\n   * This is useful to initialize the proxied contract.\n   * @param proxy Proxy to be upgraded.\n   * @param packageName Name of the package where the contract is contained.\n   * @param contractName Name of the contract.\n   * @param data Data to send as msg.data in the low level call.\n   * It should include the signature and the parameters of the function to be called, as described in\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n   */\n  function upgradeAndCall(AdminUpgradeabilityProxy proxy, string memory packageName, string memory contractName, bytes memory data) payable public onlyOwner {\n    address implementation = getImplementation(packageName, contractName);\n    proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n  }\n}\n",
  "sourcePath": "contracts/mocks/DeprecatedApp.sol",
  "sourceMap": "434:7073:8:-:0;;;1337:24;;;;;;;;;;;978:115:33;1021:10;1012:6;;:19;;;;;;;;;;;;;;;;;;1079:6;;;;;;;;;;;1046:40;;1075:1;1046:40;;;;;;;;;;;;978:115;1337:24:8;434:7073;;;;;;;;;",
  "deployedSourceMap": "434:7073:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4270:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3771:294;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5712:389;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1551:317;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1844:137:33;;;;;;;;;;;;;:::i;:::-;;2654:345:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4823:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6352:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2108:197;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:77:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1476:90;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3172:289:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7202:303;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2152:107:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4544:116:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4270:129;4350:7;4372:5;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4365:29;;;;4270:129;;;;:::o;3771:294::-;3874:7;3889:31;3923:24;3935:11;3923;:24;;:::i;:::-;3889:58;;3986:1;3957:31;;3965:8;3957:31;;;3953:54;;;4005:1;3990:17;;;;;3953:54;4020:8;:26;;;4047:12;4020:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4013:47;;;;;3771:294;;;;;;:::o;5712:389::-;5826:24;5858:22;5883:44;5901:11;5914:12;5883:17;:44;;:::i;:::-;5858:69;;5934:30;6005:9;6016:14;6032:4;5967:70;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5934:103;;6049:28;6070:5;6049:28;;;;;;;;;;;;;;;;;;;;;;6091:5;6084:12;;;;;;5712:389;;;;;;;;:::o;1551:317::-;1620:31;1659:25;1687:9;;;1697:11;1687:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1659:50;;1752:1;1719:35;;1727:4;:12;;;;;;;;;;;;1719:35;;;1715:73;;;1786:1;1756:32;;;;;1715:73;1824:4;:12;;;;;;;;;;;;:24;;;1849:4;:12;;;;1824:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1794:69;;;;;1551:317;;;;;:::o;1844:137:33:-;1360:9;:7;:9;;:::i;:::-;1352:18;;;;;;;;1942:1:::1;1905:40;;1926:6;;;;;;;;;;;1905:40;;;;;;;;;;;;1972:1;1955:6;;:19;;;;;;;;;;;;;;;;;;1380:1;1844:137:::0;:::o;2654:345:8:-;1360:9:33;:7;:9;;:::i;:::-;1352:18;;;;;;;;2775:7:8::1;:18;;;2794:7;2775:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2767:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2899:30;;;;;;;;2912:7;2899:30;;;;;;2921:7;2899:30;;;;;2874:9;;;2884:11;2874:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2940:54;2955:11;2976:7;2986;2940:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1380:1:33;2654:345:8::0;;;;:::o;4823:131::-;1360:9:33;:7;:9;;:::i;:::-;1352:18;;;;;;;;4922:5:8::1;:17;;;4940:8;4922:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1380:1:33;4823:131:8::0;;;:::o;6352:238::-;1360:9:33;:7;:9;;:::i;:::-;1352:18;;;;;;;;6479:22:8::1;6504:44;6522:11;6535:12;6504:17;:44;;:::i;:::-;6479:69;;6554:5;:15;;;6570:14;6554:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1380:1:33;;6352:238:8::0;;;;:::o;2108:197::-;2176:7;2185:16;;:::i;:::-;2209:25;2237:9;;;2247:11;2237:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2209:50;;2273:4;:12;;;;;;;;;;;;2287:4;:12;;;;2265:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2108:197;;;;;:::o;1156:77:33:-;1194:7;1220:6;;;;;;;;;;;1213:13;;;;1156:77;;:::o;1476:90::-;1516:4;1553:6;;;;;;;;;;;1539:20;;:10;:20;;;1532:27;;;;1476:90;;:::o;3172:289:8:-;1360:9:33;:7;:9;;:::i;:::-;1352:18;;;;;;;;3303:1:8::1;3252:53;;3260:9;;;3270:11;3260:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;3252:53;;;;3244:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3349:9;;;3359:11;3349:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3342:29;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;3382:74;3397:11;3418:1;3382:74;;;;;;;;3430:1;3382:74;;;;;;;;3441:1;3382:74;;;;;;;;3452:1;3382:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1380:1:33;3172:289:8::0;;:::o;7202:303::-;1360:9:33;:7;:9;;:::i;:::-;1352:18;;;;;;;;7363:22:8::1;7388:44;7406:11;7419:12;7388:17;:44;;:::i;:::-;7363:69;;7438:5;:22;;;7468:9;7479:14;7495:4;7438:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1380:1:33;;7202:303:8::0;;;;;:::o;2152:107:33:-;1360:9;:7;:9;;:::i;:::-;1352:18;;;;;;;;2224:28:::1;2243:8;2224:18;:28;;:::i;:::-;1380:1;2152:107:::0;;:::o;4544:116:8:-;4620:7;4642:5;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4635:20;;;;4544:116;;;;:::o;2403:183:33:-;2496:1;2476:22;;:8;:22;;;;2468:31;;;;;;;;2543:8;2514:38;;2535:6;;;;;;;;;;;2514:38;;;;;;;;;;;;2571:8;2562:6;;:17;;;;;;;;;;;;;;;;;;2403:183;;:::o;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "providerName",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "package",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint64[3]",
          "name": "version",
          "type": "uint64[3]"
        }
      ],
      "name": "PackageChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "proxy",
          "type": "address"
        }
      ],
      "name": "ProxyCreated",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "contract DeprecatedAdminUpgradeabilityProxy",
          "name": "proxy",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "changeProxyAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "packageName",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "contractName",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "create",
      "outputs": [
        {
          "internalType": "contract DeprecatedAdminUpgradeabilityProxy",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "packageName",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "contractName",
          "type": "string"
        }
      ],
      "name": "getImplementation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "packageName",
          "type": "string"
        }
      ],
      "name": "getPackage",
      "outputs": [
        {
          "internalType": "contract Package",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint64[3]",
          "name": "",
          "type": "uint64[3]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "packageName",
          "type": "string"
        }
      ],
      "name": "getProvider",
      "outputs": [
        {
          "internalType": "contract ImplementationProvider",
          "name": "provider",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract DeprecatedAdminUpgradeabilityProxy",
          "name": "proxy",
          "type": "address"
        }
      ],
      "name": "getProxyAdmin",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract DeprecatedAdminUpgradeabilityProxy",
          "name": "proxy",
          "type": "address"
        }
      ],
      "name": "getProxyImplementation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "packageName",
          "type": "string"
        },
        {
          "internalType": "contract Package",
          "name": "package",
          "type": "address"
        },
        {
          "internalType": "uint64[3]",
          "name": "version",
          "type": "uint64[3]"
        }
      ],
      "name": "setPackage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "packageName",
          "type": "string"
        }
      ],
      "name": "unsetPackage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract DeprecatedAdminUpgradeabilityProxy",
          "name": "proxy",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "packageName",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "contractName",
          "type": "string"
        }
      ],
      "name": "upgrade",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract DeprecatedAdminUpgradeabilityProxy",
          "name": "proxy",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "packageName",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "contractName",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "ast": {
    "absolutePath": "contracts/mocks/DeprecatedApp.sol",
    "exportedSymbols": {
      "DeprecatedApp": [
        1530
      ]
    },
    "id": 1531,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1153,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:8"
      },
      {
        "absolutePath": "contracts/application/ImplementationProvider.sol",
        "file": "../application/ImplementationProvider.sol",
        "id": 1154,
        "nodeType": "ImportDirective",
        "scope": 1531,
        "sourceUnit": 497,
        "src": "57:51:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/application/Package.sol",
        "file": "../application/Package.sol",
        "id": 1155,
        "nodeType": "ImportDirective",
        "scope": 1531,
        "sourceUnit": 850,
        "src": "109:36:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/mocks/DeprecatedAdminUpgradeabilityProxy.sol",
        "file": "../mocks/DeprecatedAdminUpgradeabilityProxy.sol",
        "id": 1157,
        "nodeType": "ImportDirective",
        "scope": 1531,
        "sourceUnit": 1152,
        "src": "146:129:8",
        "symbolAliases": [
          {
            "foreign": {
              "argumentTypes": null,
              "id": 1156,
              "name": "DeprecatedAdminUpgradeabilityProxy",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": null,
              "src": "155:34:8",
              "typeDescriptions": {
                "typeIdentifier": null,
                "typeString": null
              }
            },
            "local": "AdminUpgradeabilityProxy"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/ownership/Ownable.sol",
        "file": "../ownership/Ownable.sol",
        "id": 1158,
        "nodeType": "ImportDirective",
        "scope": 1531,
        "sourceUnit": 5785,
        "src": "276:34:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1160,
              "name": "OpenZeppelinUpgradesOwnable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5784,
              "src": "460:27:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OpenZeppelinUpgradesOwnable_$5784",
                "typeString": "contract OpenZeppelinUpgradesOwnable"
              }
            },
            "id": 1161,
            "nodeType": "InheritanceSpecifier",
            "src": "460:27:8"
          }
        ],
        "contractDependencies": [
          1151,
          5784
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 1159,
          "nodeType": "StructuredDocumentation",
          "src": "312:121:8",
          "text": " @title App\n @dev Contract for upgradeable applications.\n It handles the creation and upgrading of proxies."
        },
        "fullyImplemented": true,
        "id": 1530,
        "linearizedBaseContracts": [
          1530,
          5784
        ],
        "name": "DeprecatedApp",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": {
              "id": 1162,
              "nodeType": "StructuredDocumentation",
              "src": "492:104:8",
              "text": " @dev Emitted when a new proxy is created.\n @param proxy Address of the created proxy."
            },
            "id": 1166,
            "name": "ProxyCreated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1165,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1164,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "proxy",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1166,
                  "src": "618:13:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1163,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "618:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "617:15:8"
            },
            "src": "599:34:8"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 1167,
              "nodeType": "StructuredDocumentation",
              "src": "637:261:8",
              "text": " @dev Emitted when a package dependency is changed in the application.\n @param providerName Name of the package that changed.\n @param package Address of the package associated to the name.\n @param version Version of the package in use."
            },
            "id": 1177,
            "name": "PackageChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1176,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1169,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "providerName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1177,
                  "src": "922:19:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1168,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "922:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1171,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "package",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1177,
                  "src": "943:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1170,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "943:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1175,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "version",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1177,
                  "src": "960:17:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1172,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "960:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 1174,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 1173,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "967:1:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "960:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "921:57:8"
            },
            "src": "901:78:8"
          },
          {
            "canonicalName": "DeprecatedApp.ProviderInfo",
            "id": 1184,
            "members": [
              {
                "constant": false,
                "id": 1179,
                "mutability": "mutable",
                "name": "package",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 1184,
                "src": "1109:15:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_Package_$849",
                  "typeString": "contract Package"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 1178,
                  "name": "Package",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 849,
                  "src": "1109:7:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Package_$849",
                    "typeString": "contract Package"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1183,
                "mutability": "mutable",
                "name": "version",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 1184,
                "src": "1130:17:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                  "typeString": "uint64[3]"
                },
                "typeName": {
                  "baseType": {
                    "id": 1180,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "1130:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1182,
                  "length": {
                    "argumentTypes": null,
                    "hexValue": "33",
                    "id": 1181,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1137:1:8",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3_by_1",
                      "typeString": "int_const 3"
                    },
                    "value": "3"
                  },
                  "nodeType": "ArrayTypeName",
                  "src": "1130:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                    "typeString": "uint64[3]"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "ProviderInfo",
            "nodeType": "StructDefinition",
            "scope": 1530,
            "src": "1083:69:8",
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 1185,
              "nodeType": "StructuredDocumentation",
              "src": "1156:79:8",
              "text": " @dev Maps from dependency name to a tuple of package and version"
            },
            "id": 1189,
            "mutability": "mutable",
            "name": "providers",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 1530,
            "src": "1238:50:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_ProviderInfo_$1184_storage_$",
              "typeString": "mapping(string => struct DeprecatedApp.ProviderInfo)"
            },
            "typeName": {
              "id": 1188,
              "keyType": {
                "id": 1186,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "1246:6:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "nodeType": "Mapping",
              "src": "1238:31:8",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_ProviderInfo_$1184_storage_$",
                "typeString": "mapping(string => struct DeprecatedApp.ProviderInfo)"
              },
              "valueType": {
                "contractScope": null,
                "id": 1187,
                "name": "ProviderInfo",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1184,
                "src": "1256:12:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_ProviderInfo_$1184_storage_ptr",
                  "typeString": "struct DeprecatedApp.ProviderInfo"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1193,
              "nodeType": "Block",
              "src": "1358:3:8",
              "statements": []
            },
            "documentation": {
              "id": 1190,
              "nodeType": "StructuredDocumentation",
              "src": "1293:41:8",
              "text": " @dev Constructor function."
            },
            "id": 1194,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1191,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1348:2:8"
            },
            "returnParameters": {
              "id": 1192,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1358:0:8"
            },
            "scope": 1530,
            "src": "1337:24:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1232,
              "nodeType": "Block",
              "src": "1653:215:8",
              "statements": [
                {
                  "assignments": [
                    1203
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1203,
                      "mutability": "mutable",
                      "name": "info",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1232,
                      "src": "1659:25:8",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProviderInfo_$1184_storage_ptr",
                        "typeString": "struct DeprecatedApp.ProviderInfo"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1202,
                        "name": "ProviderInfo",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1184,
                        "src": "1659:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProviderInfo_$1184_storage_ptr",
                          "typeString": "struct DeprecatedApp.ProviderInfo"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1207,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1204,
                      "name": "providers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1189,
                      "src": "1687:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_ProviderInfo_$1184_storage_$",
                        "typeString": "mapping(string memory => struct DeprecatedApp.ProviderInfo storage ref)"
                      }
                    },
                    "id": 1206,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1205,
                      "name": "packageName",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1197,
                      "src": "1697:11:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1687:22:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ProviderInfo_$1184_storage",
                      "typeString": "struct DeprecatedApp.ProviderInfo storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1659:50:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1210,
                            "name": "info",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1203,
                            "src": "1727:4:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ProviderInfo_$1184_storage_ptr",
                              "typeString": "struct DeprecatedApp.ProviderInfo storage pointer"
                            }
                          },
                          "id": 1211,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "package",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1179,
                          "src": "1727:12:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Package_$849",
                            "typeString": "contract Package"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Package_$849",
                            "typeString": "contract Package"
                          }
                        ],
                        "id": 1209,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1719:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1208,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1719:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 1212,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1719:21:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1752:1:8",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1214,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1744:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1213,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1744:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 1216,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1744:10:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1719:35:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1222,
                  "nodeType": "IfStatement",
                  "src": "1715:73:8",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1219,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1786:1:8",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1218,
                        "name": "ImplementationProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 496,
                        "src": "1763:22:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ImplementationProvider_$496_$",
                          "typeString": "type(contract ImplementationProvider)"
                        }
                      },
                      "id": 1220,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1763:25:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ImplementationProvider_$496",
                        "typeString": "contract ImplementationProvider"
                      }
                    },
                    "functionReturnParameters": 1201,
                    "id": 1221,
                    "nodeType": "Return",
                    "src": "1756:32:8"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1227,
                              "name": "info",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1203,
                              "src": "1849:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ProviderInfo_$1184_storage_ptr",
                                "typeString": "struct DeprecatedApp.ProviderInfo storage pointer"
                              }
                            },
                            "id": 1228,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "version",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1183,
                            "src": "1849:12:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint64_$3_storage",
                              "typeString": "uint64[3] storage ref"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_uint64_$3_storage",
                              "typeString": "uint64[3] storage ref"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1224,
                              "name": "info",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1203,
                              "src": "1824:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ProviderInfo_$1184_storage_ptr",
                                "typeString": "struct DeprecatedApp.ProviderInfo storage pointer"
                              }
                            },
                            "id": 1225,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "package",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1179,
                            "src": "1824:12:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Package_$849",
                              "typeString": "contract Package"
                            }
                          },
                          "id": 1226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 581,
                          "src": "1824:24:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_address_$",
                            "typeString": "function (uint64[3] memory) view external returns (address)"
                          }
                        },
                        "id": 1229,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1824:38:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1223,
                      "name": "ImplementationProvider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 496,
                      "src": "1801:22:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ImplementationProvider_$496_$",
                        "typeString": "type(contract ImplementationProvider)"
                      }
                    },
                    "id": 1230,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1801:62:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ImplementationProvider_$496",
                      "typeString": "contract ImplementationProvider"
                    }
                  },
                  "functionReturnParameters": 1201,
                  "id": 1231,
                  "nodeType": "Return",
                  "src": "1794:69:8"
                }
              ]
            },
            "documentation": {
              "id": 1195,
              "nodeType": "StructuredDocumentation",
              "src": "1365:183:8",
              "text": " @dev Returns the provider for a given package name, or zero if not set.\n @param packageName Name of the package to be retrieved.\n @return provider The provider."
            },
            "functionSelector": "50cadc85",
            "id": 1233,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getProvider",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1198,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1197,
                  "mutability": "mutable",
                  "name": "packageName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1233,
                  "src": "1572:25:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1196,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1572:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1571:27:8"
            },
            "returnParameters": {
              "id": 1201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1200,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1233,
                  "src": "1620:31:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ImplementationProvider_$496",
                    "typeString": "contract ImplementationProvider"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1199,
                    "name": "ImplementationProvider",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 496,
                    "src": "1620:22:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ImplementationProvider_$496",
                      "typeString": "contract ImplementationProvider"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1619:33:8"
            },
            "scope": 1530,
            "src": "1551:317:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1257,
              "nodeType": "Block",
              "src": "2203:102:8",
              "statements": [
                {
                  "assignments": [
                    1246
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1246,
                      "mutability": "mutable",
                      "name": "info",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1257,
                      "src": "2209:25:8",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProviderInfo_$1184_storage_ptr",
                        "typeString": "struct DeprecatedApp.ProviderInfo"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1245,
                        "name": "ProviderInfo",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1184,
                        "src": "2209:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProviderInfo_$1184_storage_ptr",
                          "typeString": "struct DeprecatedApp.ProviderInfo"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1250,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1247,
                      "name": "providers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1189,
                      "src": "2237:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_ProviderInfo_$1184_storage_$",
                        "typeString": "mapping(string memory => struct DeprecatedApp.ProviderInfo storage ref)"
                      }
                    },
                    "id": 1249,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1248,
                      "name": "packageName",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1236,
                      "src": "2247:11:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2237:22:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ProviderInfo_$1184_storage",
                      "typeString": "struct DeprecatedApp.ProviderInfo storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2209:50:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1251,
                          "name": "info",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1246,
                          "src": "2273:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ProviderInfo_$1184_storage_ptr",
                            "typeString": "struct DeprecatedApp.ProviderInfo storage pointer"
                          }
                        },
                        "id": 1252,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "package",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1179,
                        "src": "2273:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Package_$849",
                          "typeString": "contract Package"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1253,
                          "name": "info",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1246,
                          "src": "2287:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ProviderInfo_$1184_storage_ptr",
                            "typeString": "struct DeprecatedApp.ProviderInfo storage pointer"
                          }
                        },
                        "id": 1254,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "version",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1183,
                        "src": "2287:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_storage",
                          "typeString": "uint64[3] storage ref"
                        }
                      }
                    ],
                    "id": 1255,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "2272:28:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_contract$_Package_$849_$_t_array$_t_uint64_$3_storage_$",
                      "typeString": "tuple(contract Package,uint64[3] storage ref)"
                    }
                  },
                  "functionReturnParameters": 1244,
                  "id": 1256,
                  "nodeType": "Return",
                  "src": "2265:35:8"
                }
              ]
            },
            "documentation": {
              "id": 1234,
              "nodeType": "StructuredDocumentation",
              "src": "1872:233:8",
              "text": " @dev Returns information on a package given its name.\n @param packageName Name of the package to be queried.\n @return A tuple with the package address and pinned version given a package name, or zero if not set"
            },
            "functionSelector": "87c60483",
            "id": 1258,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPackage",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1237,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1236,
                  "mutability": "mutable",
                  "name": "packageName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1258,
                  "src": "2128:25:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1235,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2128:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2127:27:8"
            },
            "returnParameters": {
              "id": 1244,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1239,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1258,
                  "src": "2176:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Package_$849",
                    "typeString": "contract Package"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1238,
                    "name": "Package",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 849,
                    "src": "2176:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Package_$849",
                      "typeString": "contract Package"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1243,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1258,
                  "src": "2185:16:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1240,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "2185:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 1242,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 1241,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2192:1:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2185:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2175:27:8"
            },
            "scope": 1530,
            "src": "2108:197:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1298,
              "nodeType": "Block",
              "src": "2761:238:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1275,
                            "name": "version",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1267,
                            "src": "2794:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                              "typeString": "uint64[3] memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                              "typeString": "uint64[3] memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1273,
                            "name": "package",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1263,
                            "src": "2775:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Package_$849",
                              "typeString": "contract Package"
                            }
                          },
                          "id": 1274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "hasVersion",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 747,
                          "src": "2775:18:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (uint64[3] memory) view external returns (bool)"
                          }
                        },
                        "id": 1276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2775:27:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "546865207265717565737465642076657273696f6e206d757374206265207265676973746572656420696e2074686520676976656e207061636b616765",
                        "id": 1277,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2804:63:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6e9b26c5b88c1d0d268a79a49255a96dbe9152f3c69df83cee9951ea1c032fdb",
                          "typeString": "literal_string \"The requested version must be registered in the given package\""
                        },
                        "value": "The requested version must be registered in the given package"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6e9b26c5b88c1d0d268a79a49255a96dbe9152f3c69df83cee9951ea1c032fdb",
                          "typeString": "literal_string \"The requested version must be registered in the given package\""
                        }
                      ],
                      "id": 1272,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2767:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2767:101:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1279,
                  "nodeType": "ExpressionStatement",
                  "src": "2767:101:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1287,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1280,
                        "name": "providers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1189,
                        "src": "2874:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_ProviderInfo_$1184_storage_$",
                          "typeString": "mapping(string memory => struct DeprecatedApp.ProviderInfo storage ref)"
                        }
                      },
                      "id": 1282,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1281,
                        "name": "packageName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1261,
                        "src": "2884:11:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2874:22:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProviderInfo_$1184_storage",
                        "typeString": "struct DeprecatedApp.ProviderInfo storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1284,
                          "name": "package",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1263,
                          "src": "2912:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Package_$849",
                            "typeString": "contract Package"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1285,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1267,
                          "src": "2921:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Package_$849",
                            "typeString": "contract Package"
                          },
                          {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        ],
                        "id": 1283,
                        "name": "ProviderInfo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1184,
                        "src": "2899:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_ProviderInfo_$1184_storage_ptr_$",
                          "typeString": "type(struct DeprecatedApp.ProviderInfo storage pointer)"
                        }
                      },
                      "id": 1286,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2899:30:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProviderInfo_$1184_memory_ptr",
                        "typeString": "struct DeprecatedApp.ProviderInfo memory"
                      }
                    },
                    "src": "2874:55:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ProviderInfo_$1184_storage",
                      "typeString": "struct DeprecatedApp.ProviderInfo storage ref"
                    }
                  },
                  "id": 1288,
                  "nodeType": "ExpressionStatement",
                  "src": "2874:55:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1290,
                        "name": "packageName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1261,
                        "src": "2955:11:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1293,
                            "name": "package",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1263,
                            "src": "2976:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Package_$849",
                              "typeString": "contract Package"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Package_$849",
                              "typeString": "contract Package"
                            }
                          ],
                          "id": 1292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2968:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1291,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2968:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 1294,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2968:16:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1295,
                        "name": "version",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1267,
                        "src": "2986:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      ],
                      "id": 1289,
                      "name": "PackageChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1177,
                      "src": "2940:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_address_$_t_array$_t_uint64_$3_memory_ptr_$returns$__$",
                        "typeString": "function (string memory,address,uint64[3] memory)"
                      }
                    },
                    "id": 1296,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2940:54:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1297,
                  "nodeType": "EmitStatement",
                  "src": "2935:59:8"
                }
              ]
            },
            "documentation": {
              "id": 1259,
              "nodeType": "StructuredDocumentation",
              "src": "2309:342:8",
              "text": " @dev Sets a package in a specific version as a dependency for this application.\n Requires the version to be present in the package.\n @param packageName Name of the package to set or overwrite.\n @param package Address of the package to register.\n @param version Version of the package to use in this application."
            },
            "functionSelector": "71eb64cc",
            "id": 1299,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1270,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1269,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5711,
                  "src": "2751:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2751:9:8"
              }
            ],
            "name": "setPackage",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1268,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1261,
                  "mutability": "mutable",
                  "name": "packageName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1299,
                  "src": "2674:25:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1260,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2674:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1263,
                  "mutability": "mutable",
                  "name": "package",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1299,
                  "src": "2701:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Package_$849",
                    "typeString": "contract Package"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1262,
                    "name": "Package",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 849,
                    "src": "2701:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Package_$849",
                      "typeString": "contract Package"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1267,
                  "mutability": "mutable",
                  "name": "version",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1299,
                  "src": "2718:24:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1264,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "2718:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 1266,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 1265,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2725:1:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2718:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2673:70:8"
            },
            "returnParameters": {
              "id": 1271,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2761:0:8"
            },
            "scope": 1530,
            "src": "2654:345:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1349,
              "nodeType": "Block",
              "src": "3238:223:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1319,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1310,
                                  "name": "providers",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1189,
                                  "src": "3260:9:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_ProviderInfo_$1184_storage_$",
                                    "typeString": "mapping(string memory => struct DeprecatedApp.ProviderInfo storage ref)"
                                  }
                                },
                                "id": 1312,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1311,
                                  "name": "packageName",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1302,
                                  "src": "3270:11:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3260:22:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ProviderInfo_$1184_storage",
                                  "typeString": "struct DeprecatedApp.ProviderInfo storage ref"
                                }
                              },
                              "id": 1313,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "package",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1179,
                              "src": "3260:30:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Package_$849",
                                "typeString": "contract Package"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Package_$849",
                                "typeString": "contract Package"
                              }
                            ],
                            "id": 1309,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3252:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 1308,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3252:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 1314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3252:39:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1317,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3303:1:8",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 1316,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3295:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 1315,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3295:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 1318,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3295:10:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3252:53:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5061636b61676520746f20756e736574206e6f7420666f756e64",
                        "id": 1320,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3307:28:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3ae493df729b5cccebf4261a82c4432beb82c364d1afb7d58bdfea7fd27d9332",
                          "typeString": "literal_string \"Package to unset not found\""
                        },
                        "value": "Package to unset not found"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3ae493df729b5cccebf4261a82c4432beb82c364d1afb7d58bdfea7fd27d9332",
                          "typeString": "literal_string \"Package to unset not found\""
                        }
                      ],
                      "id": 1307,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3244:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3244:92:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1322,
                  "nodeType": "ExpressionStatement",
                  "src": "3244:92:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1326,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "3342:29:8",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1323,
                        "name": "providers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1189,
                        "src": "3349:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_struct$_ProviderInfo_$1184_storage_$",
                          "typeString": "mapping(string memory => struct DeprecatedApp.ProviderInfo storage ref)"
                        }
                      },
                      "id": 1325,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1324,
                        "name": "packageName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1302,
                        "src": "3359:11:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3349:22:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProviderInfo_$1184_storage",
                        "typeString": "struct DeprecatedApp.ProviderInfo storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1327,
                  "nodeType": "ExpressionStatement",
                  "src": "3342:29:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1329,
                        "name": "packageName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1302,
                        "src": "3397:11:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1332,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3418:1:8",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 1331,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3410:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1330,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3410:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 1333,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3410:10:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1336,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3430:1:8",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1335,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3423:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint64_$",
                                "typeString": "type(uint64)"
                              },
                              "typeName": {
                                "id": 1334,
                                "name": "uint64",
                                "nodeType": "ElementaryTypeName",
                                "src": "3423:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 1337,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3423:9:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1340,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3441:1:8",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1339,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3434:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint64_$",
                                "typeString": "type(uint64)"
                              },
                              "typeName": {
                                "id": 1338,
                                "name": "uint64",
                                "nodeType": "ElementaryTypeName",
                                "src": "3434:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 1341,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3434:9:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1344,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3452:1:8",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1343,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3445:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint64_$",
                                "typeString": "type(uint64)"
                              },
                              "typeName": {
                                "id": 1342,
                                "name": "uint64",
                                "nodeType": "ElementaryTypeName",
                                "src": "3445:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 1345,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3445:9:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "id": 1346,
                        "isConstant": false,
                        "isInlineArray": true,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "3422:33:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      ],
                      "id": 1328,
                      "name": "PackageChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1177,
                      "src": "3382:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_address_$_t_array$_t_uint64_$3_memory_ptr_$returns$__$",
                        "typeString": "function (string memory,address,uint64[3] memory)"
                      }
                    },
                    "id": 1347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3382:74:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1348,
                  "nodeType": "EmitStatement",
                  "src": "3377:79:8"
                }
              ]
            },
            "documentation": {
              "id": 1300,
              "nodeType": "StructuredDocumentation",
              "src": "3003:166:8",
              "text": " @dev Unsets a package given its name.\n Reverts if the package is not set in the application.\n @param packageName Name of the package to remove."
            },
            "functionSelector": "ad358d99",
            "id": 1350,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1305,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1304,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5711,
                  "src": "3228:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3228:9:8"
              }
            ],
            "name": "unsetPackage",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1303,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1302,
                  "mutability": "mutable",
                  "name": "packageName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1350,
                  "src": "3194:25:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1301,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3194:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3193:27:8"
            },
            "returnParameters": {
              "id": 1306,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3238:0:8"
            },
            "scope": 1530,
            "src": "3172:289:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1386,
              "nodeType": "Block",
              "src": "3883:182:8",
              "statements": [
                {
                  "assignments": [
                    1361
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1361,
                      "mutability": "mutable",
                      "name": "provider",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1386,
                      "src": "3889:31:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ImplementationProvider_$496",
                        "typeString": "contract ImplementationProvider"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1360,
                        "name": "ImplementationProvider",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 496,
                        "src": "3889:22:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ImplementationProvider_$496",
                          "typeString": "contract ImplementationProvider"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1365,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1363,
                        "name": "packageName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1353,
                        "src": "3935:11:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1362,
                      "name": "getProvider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1233,
                      "src": "3923:11:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_contract$_ImplementationProvider_$496_$",
                        "typeString": "function (string memory) view returns (contract ImplementationProvider)"
                      }
                    },
                    "id": 1364,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3923:24:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ImplementationProvider_$496",
                      "typeString": "contract ImplementationProvider"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3889:58:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1368,
                          "name": "provider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1361,
                          "src": "3965:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ImplementationProvider_$496",
                            "typeString": "contract ImplementationProvider"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ImplementationProvider_$496",
                            "typeString": "contract ImplementationProvider"
                          }
                        ],
                        "id": 1367,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3957:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1366,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3957:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 1369,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3957:17:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1372,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3986:1:8",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1371,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3978:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1370,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3978:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 1373,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3978:10:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "3957:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1380,
                  "nodeType": "IfStatement",
                  "src": "3953:54:8",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1377,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4005:1:8",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1376,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3997:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1375,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3997:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 1378,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3997:10:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "functionReturnParameters": 1359,
                    "id": 1379,
                    "nodeType": "Return",
                    "src": "3990:17:8"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1383,
                        "name": "contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1355,
                        "src": "4047:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1381,
                        "name": "provider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1361,
                        "src": "4020:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ImplementationProvider_$496",
                          "typeString": "contract ImplementationProvider"
                        }
                      },
                      "id": 1382,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getImplementation",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 495,
                      "src": "4020:26:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_string_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (string memory) view external returns (address)"
                      }
                    },
                    "id": 1384,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4020:40:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 1359,
                  "id": 1385,
                  "nodeType": "Return",
                  "src": "4013:47:8"
                }
              ]
            },
            "documentation": {
              "id": 1351,
              "nodeType": "StructuredDocumentation",
              "src": "3465:303:8",
              "text": " @dev Returns the implementation address for a given contract name, provided by the `ImplementationProvider`.\n @param packageName Name of the package where the contract is contained.\n @param contractName Name of the contract.\n @return Address where the contract is implemented."
            },
            "functionSelector": "27a0d669",
            "id": 1387,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getImplementation",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1356,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1353,
                  "mutability": "mutable",
                  "name": "packageName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1387,
                  "src": "3798:25:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1352,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3798:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1355,
                  "mutability": "mutable",
                  "name": "contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1387,
                  "src": "3825:26:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1354,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3825:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3797:55:8"
            },
            "returnParameters": {
              "id": 1359,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1358,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1387,
                  "src": "3874:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1357,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3874:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3873:9:8"
            },
            "scope": 1530,
            "src": "3771:294:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1399,
              "nodeType": "Block",
              "src": "4359:40:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1395,
                        "name": "proxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1390,
                        "src": "4372:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                          "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                        }
                      },
                      "id": 1396,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "implementation",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1038,
                      "src": "4372:20:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_address_$",
                        "typeString": "function () external returns (address)"
                      }
                    },
                    "id": 1397,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4372:22:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 1394,
                  "id": 1398,
                  "nodeType": "Return",
                  "src": "4365:29:8"
                }
              ]
            },
            "documentation": {
              "id": 1388,
              "nodeType": "StructuredDocumentation",
              "src": "4069:198:8",
              "text": " @dev Returns the current implementation of a proxy.\n This is needed because only the proxy admin can query it.\n @return The address of the current implementation of the proxy."
            },
            "functionSelector": "204e1c7a",
            "id": 1400,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getProxyImplementation",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1391,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1390,
                  "mutability": "mutable",
                  "name": "proxy",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1400,
                  "src": "4302:30:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                    "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1389,
                    "name": "AdminUpgradeabilityProxy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1151,
                    "src": "4302:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                      "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4301:32:8"
            },
            "returnParameters": {
              "id": 1394,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1393,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1400,
                  "src": "4350:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1392,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4350:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4349:9:8"
            },
            "scope": 1530,
            "src": "4270:129:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1412,
              "nodeType": "Block",
              "src": "4629:31:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1408,
                        "name": "proxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1403,
                        "src": "4642:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                          "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                        }
                      },
                      "id": 1409,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "admin",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1026,
                      "src": "4642:11:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                        "typeString": "function () view external returns (address)"
                      }
                    },
                    "id": 1410,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4642:13:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 1407,
                  "id": 1411,
                  "nodeType": "Return",
                  "src": "4635:20:8"
                }
              ]
            },
            "documentation": {
              "id": 1401,
              "nodeType": "StructuredDocumentation",
              "src": "4403:138:8",
              "text": " @dev Returns the admin of a proxy. Only the admin can query it.\n @return The address of the current admin of the proxy."
            },
            "functionSelector": "f3b7dead",
            "id": 1413,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getProxyAdmin",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1404,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1403,
                  "mutability": "mutable",
                  "name": "proxy",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1413,
                  "src": "4567:30:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                    "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1402,
                    "name": "AdminUpgradeabilityProxy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1151,
                    "src": "4567:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                      "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4566:32:8"
            },
            "returnParameters": {
              "id": 1407,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1406,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1413,
                  "src": "4620:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1405,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4620:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4619:9:8"
            },
            "scope": 1530,
            "src": "4544:116:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1429,
              "nodeType": "Block",
              "src": "4916:38:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1426,
                        "name": "newAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1418,
                        "src": "4940:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1423,
                        "name": "proxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1416,
                        "src": "4922:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                          "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                        }
                      },
                      "id": 1425,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "changeAdmin",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1067,
                      "src": "4922:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 1427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4922:27:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1428,
                  "nodeType": "ExpressionStatement",
                  "src": "4922:27:8"
                }
              ]
            },
            "documentation": {
              "id": 1414,
              "nodeType": "StructuredDocumentation",
              "src": "4664:156:8",
              "text": " @dev Changes the admin of a proxy.\n @param proxy Proxy to change admin.\n @param newAdmin Address to transfer proxy administration to."
            },
            "functionSelector": "7eff275e",
            "id": 1430,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1421,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1420,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5711,
                  "src": "4906:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4906:9:8"
              }
            ],
            "name": "changeProxyAdmin",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1419,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1416,
                  "mutability": "mutable",
                  "name": "proxy",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1430,
                  "src": "4849:30:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                    "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1415,
                    "name": "AdminUpgradeabilityProxy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1151,
                    "src": "4849:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                      "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1418,
                  "mutability": "mutable",
                  "name": "newAdmin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1430,
                  "src": "4881:16:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1417,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4881:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4848:50:8"
            },
            "returnParameters": {
              "id": 1422,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4916:0:8"
            },
            "scope": 1530,
            "src": "4823:131:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1470,
              "nodeType": "Block",
              "src": "5852:249:8",
              "statements": [
                {
                  "assignments": [
                    1443
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1443,
                      "mutability": "mutable",
                      "name": "implementation",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1470,
                      "src": "5858:22:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1442,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5858:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1448,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1445,
                        "name": "packageName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1433,
                        "src": "5901:11:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1446,
                        "name": "contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1435,
                        "src": "5914:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1444,
                      "name": "getImplementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1387,
                      "src": "5883:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (string memory,string memory) view returns (address)"
                      }
                    },
                    "id": 1447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5883:44:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5858:69:8"
                },
                {
                  "assignments": [
                    1450
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1450,
                      "mutability": "mutable",
                      "name": "proxy",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1470,
                      "src": "5934:30:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                        "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1449,
                        "name": "AdminUpgradeabilityProxy",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1151,
                        "src": "5934:24:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                          "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1460,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1457,
                        "name": "implementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1443,
                        "src": "6016:14:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1458,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1437,
                        "src": "6032:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "id": 1452,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "5968:28:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_creation_payable$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151_$",
                              "typeString": "function (address,bytes memory) payable returns (contract DeprecatedAdminUpgradeabilityProxy)"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 1451,
                              "name": "AdminUpgradeabilityProxy",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 1151,
                              "src": "5972:24:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                                "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                              }
                            }
                          }
                        ],
                        "id": 1453,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "5967:30:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_creation_payable$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151_$",
                          "typeString": "function (address,bytes memory) payable returns (contract DeprecatedAdminUpgradeabilityProxy)"
                        }
                      },
                      "id": 1456,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1454,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "6005:3:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1455,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6005:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "5967:48:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_creation_payable$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151_$value",
                        "typeString": "function (address,bytes memory) payable returns (contract DeprecatedAdminUpgradeabilityProxy)"
                      }
                    },
                    "id": 1459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5967:70:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                      "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5934:103:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1464,
                            "name": "proxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1450,
                            "src": "6070:5:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                              "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                              "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                            }
                          ],
                          "id": 1463,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6062:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1462,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6062:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 1465,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6062:14:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 1461,
                      "name": "ProxyCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1166,
                      "src": "6049:12:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 1466,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6049:28:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1467,
                  "nodeType": "EmitStatement",
                  "src": "6044:33:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1468,
                    "name": "proxy",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1450,
                    "src": "6091:5:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                      "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                    }
                  },
                  "functionReturnParameters": 1441,
                  "id": 1469,
                  "nodeType": "Return",
                  "src": "6084:12:8"
                }
              ]
            },
            "documentation": {
              "id": 1431,
              "nodeType": "StructuredDocumentation",
              "src": "4958:750:8",
              "text": " @dev Creates a new proxy for the given contract and forwards a function call to it.\n This is useful to initialize the proxied contract.\n @param packageName Name of the package where the contract is contained.\n @param contractName Name of the contract.\n @param data Data to send as msg.data to the corresponding implementation to initialize the proxied contract.\n It should include the signature and the parameters of the function to be called, as described in\n https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\n @return Address of the new proxy."
            },
            "functionSelector": "2f237e82",
            "id": 1471,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "create",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1438,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1433,
                  "mutability": "mutable",
                  "name": "packageName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1471,
                  "src": "5728:25:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1432,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5728:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1435,
                  "mutability": "mutable",
                  "name": "contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1471,
                  "src": "5755:26:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1434,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5755:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1437,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1471,
                  "src": "5783:17:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1436,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5783:5:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5727:74:8"
            },
            "returnParameters": {
              "id": 1441,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1440,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1471,
                  "src": "5826:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                    "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1439,
                    "name": "AdminUpgradeabilityProxy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1151,
                    "src": "5826:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                      "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5825:26:8"
            },
            "scope": 1530,
            "src": "5712:389:8",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1496,
              "nodeType": "Block",
              "src": "6473:117:8",
              "statements": [
                {
                  "assignments": [
                    1484
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1484,
                      "mutability": "mutable",
                      "name": "implementation",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1496,
                      "src": "6479:22:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1483,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6479:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1489,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1486,
                        "name": "packageName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1476,
                        "src": "6522:11:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1487,
                        "name": "contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1478,
                        "src": "6535:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1485,
                      "name": "getImplementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1387,
                      "src": "6504:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (string memory,string memory) view returns (address)"
                      }
                    },
                    "id": 1488,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6504:44:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6479:69:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1493,
                        "name": "implementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1484,
                        "src": "6570:14:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1490,
                        "name": "proxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1474,
                        "src": "6554:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                          "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                        }
                      },
                      "id": 1492,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "upgradeTo",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1080,
                      "src": "6554:15:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 1494,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6554:31:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1495,
                  "nodeType": "ExpressionStatement",
                  "src": "6554:31:8"
                }
              ]
            },
            "documentation": {
              "id": 1472,
              "nodeType": "StructuredDocumentation",
              "src": "6105:244:8",
              "text": " @dev Upgrades a proxy to the newest implementation of a contract.\n @param proxy Proxy to be upgraded.\n @param packageName Name of the package where the contract is contained.\n @param contractName Name of the contract."
            },
            "functionSelector": "82f75182",
            "id": 1497,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1481,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1480,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5711,
                  "src": "6463:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6463:9:8"
              }
            ],
            "name": "upgrade",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1479,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1474,
                  "mutability": "mutable",
                  "name": "proxy",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1497,
                  "src": "6369:30:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                    "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1473,
                    "name": "AdminUpgradeabilityProxy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1151,
                    "src": "6369:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                      "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1476,
                  "mutability": "mutable",
                  "name": "packageName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1497,
                  "src": "6401:25:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1475,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6401:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1478,
                  "mutability": "mutable",
                  "name": "contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1497,
                  "src": "6428:26:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1477,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6428:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6368:87:8"
            },
            "returnParameters": {
              "id": 1482,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6473:0:8"
            },
            "scope": 1530,
            "src": "6352:238:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1528,
              "nodeType": "Block",
              "src": "7357:148:8",
              "statements": [
                {
                  "assignments": [
                    1512
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1512,
                      "mutability": "mutable",
                      "name": "implementation",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1528,
                      "src": "7363:22:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1511,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7363:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1517,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1514,
                        "name": "packageName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1502,
                        "src": "7406:11:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1515,
                        "name": "contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1504,
                        "src": "7419:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1513,
                      "name": "getImplementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1387,
                      "src": "7388:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (string memory,string memory) view returns (address)"
                      }
                    },
                    "id": 1516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7388:44:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7363:69:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1524,
                        "name": "implementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1512,
                        "src": "7479:14:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1525,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1506,
                        "src": "7495:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1518,
                          "name": "proxy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1500,
                          "src": "7438:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                            "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                          }
                        },
                        "id": 1520,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "upgradeToAndCall",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1106,
                        "src": "7438:22:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                          "typeString": "function (address,bytes memory) payable external"
                        }
                      },
                      "id": 1523,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1521,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "7468:3:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1522,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7468:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "7438:40:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$value",
                        "typeString": "function (address,bytes memory) payable external"
                      }
                    },
                    "id": 1526,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7438:62:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1527,
                  "nodeType": "ExpressionStatement",
                  "src": "7438:62:8"
                }
              ]
            },
            "documentation": {
              "id": 1498,
              "nodeType": "StructuredDocumentation",
              "src": "6594:605:8",
              "text": " @dev Upgrades a proxy to the newest implementation of a contract and forwards a function call to it.\n This is useful to initialize the proxied contract.\n @param proxy Proxy to be upgraded.\n @param packageName Name of the package where the contract is contained.\n @param contractName Name of the contract.\n @param data Data to send as msg.data in the low level call.\n It should include the signature and the parameters of the function to be called, as described in\n https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding."
            },
            "functionSelector": "e7e4fc84",
            "id": 1529,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1509,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1508,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5711,
                  "src": "7347:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7347:9:8"
              }
            ],
            "name": "upgradeAndCall",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1507,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1500,
                  "mutability": "mutable",
                  "name": "proxy",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1529,
                  "src": "7226:30:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                    "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1499,
                    "name": "AdminUpgradeabilityProxy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1151,
                    "src": "7226:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DeprecatedAdminUpgradeabilityProxy_$1151",
                      "typeString": "contract DeprecatedAdminUpgradeabilityProxy"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1502,
                  "mutability": "mutable",
                  "name": "packageName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1529,
                  "src": "7258:25:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1501,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7258:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1504,
                  "mutability": "mutable",
                  "name": "contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1529,
                  "src": "7285:26:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1503,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7285:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1506,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1529,
                  "src": "7313:17:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1505,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7313:5:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7225:106:8"
            },
            "returnParameters": {
              "id": 1510,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7357:0:8"
            },
            "scope": 1530,
            "src": "7202:303:8",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 1531,
        "src": "434:7073:8"
      }
    ],
    "src": "0:7508:8"
  },
  "bytecode": "0x60806040523480156100115760006000fd5b505b5b33600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35b5b6100d9565b61325c806100e86000396000f3fe608060405260043610620001035760003560e01c806382f751821162000097578063ad358d991162000061578063ad358d991462000bfc578063e7e4fc841462000cd4578063f2fde38b1462000eff578063f3b7dead1462000f565762000103565b806382f75182146200088b57806387c604831462000a245780638da5cb5b1462000b6e5780638f32d59b1462000bc95762000103565b806350cadc8511620000d957806350cadc8514620005a4578063715018a614620006bc57806371eb64cc14620006d75780637eff275e14620008145762000103565b8063204e1c7a146200010957806327a0d66914620001a05780632f237e8214620003595762000103565b60006000fd5b348015620001175760006000fd5b506200015e60048036036020811015620001315760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000fed565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620001ae5760006000fd5b506200031760048036036040811015620001c85760006000fd5b8101908080359060200190640100000000811115620001e75760006000fd5b820183602082011115620001fb5760006000fd5b803590602001918460018302840111640100000000831117156200021f5760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929080359060200190640100000000811115620002885760006000fd5b8201836020820111156200029c5760006000fd5b80359060200191846001830284011164010000000083111715620002c05760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062001085565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6200056260048036036060811015620003725760006000fd5b8101908080359060200190640100000000811115620003915760006000fd5b820183602082011115620003a55760006000fd5b80359060200191846001830284011164010000000083111715620003c95760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929080359060200190640100000000811115620004325760006000fd5b820183602082011115620004465760006000fd5b803590602001918460018302840111640100000000831117156200046a5760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929080359060200190640100000000811115620004d35760006000fd5b820183602082011115620004e75760006000fd5b803590602001918460018302840111640100000000831117156200050b5760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290505050620011e8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620005b25760006000fd5b506200067a60048036036020811015620005cc5760006000fd5b8101908080359060200190640100000000811115620005eb5760006000fd5b820183602082011115620005ff5760006000fd5b80359060200191846001830284011164010000000083111715620006235760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062001351565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620006ca5760006000fd5b50620006d562001551565b005b348015620006e55760006000fd5b5062000812600480360360a0811015620006ff5760006000fd5b81019080803590602001906401000000008111156200071e5760006000fd5b820183602082011115620007325760006000fd5b80359060200191846001830284011164010000000083111715620007565760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f82011690508083019250505050505090909192909091929050505062001631565b005b348015620008225760006000fd5b5062000889600480360360408110156200083c5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200197b565b005b348015620008995760006000fd5b5062000a2260048036036060811015620008b35760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115620008f25760006000fd5b820183602082011115620009065760006000fd5b803590602001918460018302840111640100000000831117156200092a5760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929080359060200190640100000000811115620009935760006000fd5b820183602082011115620009a75760006000fd5b80359060200191846001830284011164010000000083111715620009cb5760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062001a39565b005b34801562000a325760006000fd5b5062000afa6004803603602081101562000a4c5760006000fd5b810190808035906020019064010000000081111562000a6b5760006000fd5b82018360208201111562000a7f5760006000fd5b8035906020019184600183028401116401000000008311171562000aa35760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062001b0f565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600360200280838360005b8381101562000b5a5780820151818401525b60208101905062000b3c565b505050509050019250505060405180910390f35b34801562000b7c5760006000fd5b5062000b8762001c45565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801562000bd75760006000fd5b5062000be262001c75565b604051808215151515815260200191505060405180910390f35b34801562000c0a5760006000fd5b5062000cd26004803603602081101562000c245760006000fd5b810190808035906020019064010000000081111562000c435760006000fd5b82018360208201111562000c575760006000fd5b8035906020019184600183028401116401000000008311171562000c7b5760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062001cd3565b005b62000efd6004803603608081101562000ced5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111562000d2c5760006000fd5b82018360208201111562000d405760006000fd5b8035906020019184600183028401116401000000008311171562000d645760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509090919290909192908035906020019064010000000081111562000dcd5760006000fd5b82018360208201111562000de15760006000fd5b8035906020019184600183028401116401000000008311171562000e055760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509090919290909192908035906020019064010000000081111562000e6e5760006000fd5b82018360208201111562000e825760006000fd5b8035906020019184600183028401116401000000008311171562000ea65760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062002047565b005b34801562000f0d5760006000fd5b5062000f546004803603602081101562000f275760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062002190565b005b34801562000f645760006000fd5b5062000fab6004803603602081101562000f7e5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050620021c3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008173ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015620010395760006000fd5b505af11580156200104f573d600060003e3d6000fd5b505050506040513d6020811015620010675760006000fd5b8101908080519060200190929190505050905062001080565b919050565b600060006200109a846200135163ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620010dd576000915050620011e2565b8073ffffffffffffffffffffffffffffffffffffffff16636b683896846040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200114c5780820151818401525b6020810190506200112e565b50505050905090810190601f1680156200117a5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015620011995760006000fd5b505afa158015620011af573d600060003e3d6000fd5b505050506040513d6020811015620011c75760006000fd5b8101908080519060200190929190505050915050620011e256505b92915050565b60006000620011fe85856200108563ffffffff16565b90506000348285604051620012139062002358565b808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015620012855780820151818401525b60208101905062001267565b50505050905090810190601f168015620012b35780820380516001836020036101000a031916815260200191505b5093505050506040518091039082f0905080158015620012d8573d600060003e3d6000fd5b5090507efffc2da0b561cae30d9826d37709e9421c4725faebc226cbbb7ef5fc5e734981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a180925050506200134a5650505b9392505050565b600060006001600050836040518082805190602001908083835b6020831015156200139357805182525b6020820191506020810190506020830392506200136b565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000509050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415620014305760009150506200154c565b8060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631df40eaa826001016000506040518263ffffffff1660e01b8152600401808260038015620014e4576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116200149e5790505b505091505060206040518083038186803b158015620015035760006000fd5b505afa15801562001519573d600060003e3d6000fd5b505050506040513d6020811015620015315760006000fd5b81019080805190602001909291905050509150506200154c56505b919050565b6200156162001c7563ffffffff16565b15156200156e5760006000fd5b600073ffffffffffffffffffffffffffffffffffffffff16600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b565b6200164162001c7563ffffffff16565b15156200164e5760006000fd5b8173ffffffffffffffffffffffffffffffffffffffff166335ce4016826040518263ffffffff1660e01b81526004018082600360200280838360005b83811015620016a85780820151818401525b6020810190506200168a565b5050505090500191505060206040518083038186803b158015620016cc5760006000fd5b505afa158015620016e2573d600060003e3d6000fd5b505050506040513d6020811015620016fa5760006000fd5b8101908080519060200190929190505050151562001764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180620031ea603d913960400191505060405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001506001600050846040518082805190602001908083835b602083101515620017d057805182525b602082019150602081019050602083039250620017a8565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060005060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001016000509060036200186992919062002366565b509050507f4ca1964bc3cd347906bc558f77fdd636486951cf12238150178be72a4fbb6fab83838360405180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600360200280838360005b83811015620018f55780820151818401525b602081019050620018d7565b50505050905001828103825285818151815260200191508051906020019080838360005b83811015620019375780820151818401525b60208101905062001919565b50505050905090810190601f168015620019655780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15b5b505050565b6200198b62001c7563ffffffff16565b1515620019985760006000fd5b8173ffffffffffffffffffffffffffffffffffffffff16638f283970826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801562001a195760006000fd5b505af115801562001a2f573d600060003e3d6000fd5b505050505b5b5050565b62001a4962001c7563ffffffff16565b151562001a565760006000fd5b600062001a6a83836200108563ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff16633659cfe6826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801562001aed5760006000fd5b505af115801562001b03573d600060003e3d6000fd5b50505050505b5b505050565b600062001b1b6200241e565b60006001600050846040518082805190602001908083835b60208310151562001b5b57805182525b60208201915060208101905060208303925062001b33565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060005090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001016000508060038060200260405190810160405280929190826003801562001c2d576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff168152602001906008019060208260070104928301926001038202915080841162001be75790505b50505050509050925092505062001c4056505b915091565b6000600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905062001c72565b90565b6000600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905062001cd0565b90565b62001ce362001c7563ffffffff16565b151562001cf05760006000fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600050826040518082805190602001908083835b60208310151562001d4657805182525b60208201915060208101905060208303925062001d1e565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151562001e30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5061636b61676520746f20756e736574206e6f7420666f756e6400000000000081526020015060200191505060405180910390fd5b6001600050816040518082805190602001908083835b60208310151562001e6e57805182525b60208201915060208101905060208303925062001e46565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600062001edc919062002440565b50507f4ca1964bc3cd347906bc558f77fdd636486951cf12238150178be72a4fbb6fab8160006040518060600160405280600067ffffffffffffffff1667ffffffffffffffff168152602001600067ffffffffffffffff1667ffffffffffffffff168152602001600067ffffffffffffffff1667ffffffffffffffff1681526020015060405180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600360200280838360005b8381101562001fc35780820151818401525b60208101905062001fa5565b50505050905001828103825285818151815260200191508051906020019080838360005b83811015620020055780820151818401525b60208101905062001fe7565b50505050905090810190601f168015620020335780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15b5b50565b6200205762001c7563ffffffff16565b1515620020645760006000fd5b60006200207884846200108563ffffffff16565b90508473ffffffffffffffffffffffffffffffffffffffff16634f1ef2863483856040518463ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156200211d5780820151818401525b602081019050620020ff565b50505050905090810190601f1680156200214b5780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156200216c5760006000fd5b505af115801562002182573d600060003e3d6000fd5b5050505050505b5b50505050565b620021a062001c7563ffffffff16565b1515620021ad5760006000fd5b620021be816200225963ffffffff16565b5b5b50565b60008173ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b1580156200220d5760006000fd5b505afa15801562002223573d600060003e3d6000fd5b505050506040513d60208110156200223b5760006000fd5b8101908080519060200190929190505050905062002254565b919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515620022975760006000fd5b8073ffffffffffffffffffffffffffffffffffffffff16600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b610d63806200248783390190565b82600390906003016004900481019282156200240b5791602002820160005b83821115620023d357835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550926020019260080160208160070104928301926001030262002385565b8015620024095782816101000a81549067ffffffffffffffff0219169055600801602081600701049283019260010302620023d3565b505b5090506200241a919062002447565b5090565b6040518060600160405280600390602082028036833780820191505090505090565b5060009055565b62002483919062002453565b808211156200247f57600081816101000a81549067ffffffffffffffff02191690555060010162002453565b5090565b9056fe6080604052604051610d63380380610d63833981810160405260408110156100275760006000fd5b8101908080519060200190929190805160405193929190846401000000008211156100525760006000fd5b838201915060208201858111156100695760006000fd5b82518660018202830111640100000000821117156100875760006000fd5b8083526020830192505050908051906020019080838360005b838110156100bc5780820151818401525b6020810190506100a0565b50505050905090810190601f1680156100e95780820380516001836020036101000a031916815260200191505b506040526020015050505b81815b600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815260200150601c019050604051809103902060001c0360001b600019167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6000191614151561016e57fe5b61017d826102d760201b60201c565b60008151111561024f5760008273ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b6020831015156101d757805182525b6020820191506020810190506020830392506101b1565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610237576040519150601f19603f3d011682016040523d82523d6000602084013e61023c565b606091505b5050905080151561024d5760006000fd5b505b5b505060405180807f6f72672e7a657070656c696e6f732e70726f78792e61646d696e000000000000815260200150601a0190506040518091039020600019167f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b600019161415156102c057fe5b6102cf3361037160201b60201c565b5b50506103bb565b6102ea816103a160201b61060e1760201c565b1515610341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180610d28603b913960400191505060405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b9050818155505b50565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b9050818155505b50565b60006000823b9050600081119150506103b656505b919050565b61095e806103ca6000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100775780634f1ef286146100ca5780635c60da1b146101695780638f283970146101c1578063f851a4401461021457610065565b36610065575b61006261026c63ffffffff16565b5b005b5b61007461026c63ffffffff16565b5b005b3480156100845760006000fd5b506100c86004803603602081101561009c5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610299565b005b610167600480360360408110156100e15760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561011f5760006000fd5b8201836020820111156101325760006000fd5b803590602001918460018302840111640100000000831117156101555760006000fd5b90919293909091929390505050610302565b005b3480156101765760006000fd5b5061017f6103ef565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101ce5760006000fd5b50610212600480360360208110156101e65760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061045f565b005b3480156102215760006000fd5b5061022a6105f4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61027a61062863ffffffff16565b61029661028b6106cd63ffffffff16565b61070063ffffffff16565b5b565b6102a761073363ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102ef576102e98161076663ffffffff16565b5b6102fe565b6102fd61026c63ffffffff16565b5b5b50565b61031061073363ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156103da576103528361076663ffffffff16565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051808383808284378083019250505092505050600060405180830381855af49150503d80600081146103bd576040519150601f19603f3d011682016040523d82523d6000602084013e6103c2565b606091505b505090508015156103d35760006000fd5b505b6103e9565b6103e861026c63ffffffff16565b5b5b505050565b60006103ff61073363ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561044c576104406106cd63ffffffff16565b9050610447565b61045b565b61045a61026c63ffffffff16565b5b5b90565b61046d61073363ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156105e157600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610528576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806108b86036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61055761073363ffffffff16565b82604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a16105db816107bc63ffffffff16565b5b6105f0565b6105ef61026c63ffffffff16565b5b5b50565b600061060461073363ffffffff16565b905061060b565b90565b60006000823b90506000811191505061062356505b919050565b61063661073363ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515156106bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806108866032913960400191505060405180910390fd5b6106ca6107ec63ffffffff16565b5b565b600060007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150505b90565b36600060003760006000366000845af43d600060003e8060008114610728573d6000f361072d565b3d6000fd5b50505b50565b600060007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b905080549150505b90565b610775816107ef63ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25b50565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b9050818155505b50565b5b565b6107fe8161060e63ffffffff16565b1515610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806108ee603b913960400191505060405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b9050818155505b5056fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a264697066735822122094e07e0fdc79dde9af00532db5c1949cb989999ab02613701056c99c62555e6664736f6c634300060a003343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373546865207265717565737465642076657273696f6e206d757374206265207265676973746572656420696e2074686520676976656e207061636b616765a264697066735822122084046e60e6a698d2d66fac860b32efc70a6537f1dc46f3cd21318ac499d3899264736f6c634300060a0033",
  "deployedBytecode": "0x608060405260043610620001035760003560e01c806382f751821162000097578063ad358d991162000061578063ad358d991462000bfc578063e7e4fc841462000cd4578063f2fde38b1462000eff578063f3b7dead1462000f565762000103565b806382f75182146200088b57806387c604831462000a245780638da5cb5b1462000b6e5780638f32d59b1462000bc95762000103565b806350cadc8511620000d957806350cadc8514620005a4578063715018a614620006bc57806371eb64cc14620006d75780637eff275e14620008145762000103565b8063204e1c7a146200010957806327a0d66914620001a05780632f237e8214620003595762000103565b60006000fd5b348015620001175760006000fd5b506200015e60048036036020811015620001315760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000fed565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620001ae5760006000fd5b506200031760048036036040811015620001c85760006000fd5b8101908080359060200190640100000000811115620001e75760006000fd5b820183602082011115620001fb5760006000fd5b803590602001918460018302840111640100000000831117156200021f5760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929080359060200190640100000000811115620002885760006000fd5b8201836020820111156200029c5760006000fd5b80359060200191846001830284011164010000000083111715620002c05760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062001085565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6200056260048036036060811015620003725760006000fd5b8101908080359060200190640100000000811115620003915760006000fd5b820183602082011115620003a55760006000fd5b80359060200191846001830284011164010000000083111715620003c95760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929080359060200190640100000000811115620004325760006000fd5b820183602082011115620004465760006000fd5b803590602001918460018302840111640100000000831117156200046a5760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929080359060200190640100000000811115620004d35760006000fd5b820183602082011115620004e75760006000fd5b803590602001918460018302840111640100000000831117156200050b5760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290505050620011e8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620005b25760006000fd5b506200067a60048036036020811015620005cc5760006000fd5b8101908080359060200190640100000000811115620005eb5760006000fd5b820183602082011115620005ff5760006000fd5b80359060200191846001830284011164010000000083111715620006235760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062001351565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620006ca5760006000fd5b50620006d562001551565b005b348015620006e55760006000fd5b5062000812600480360360a0811015620006ff5760006000fd5b81019080803590602001906401000000008111156200071e5760006000fd5b820183602082011115620007325760006000fd5b80359060200191846001830284011164010000000083111715620007565760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f82011690508083019250505050505090909192909091929050505062001631565b005b348015620008225760006000fd5b5062000889600480360360408110156200083c5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200197b565b005b348015620008995760006000fd5b5062000a2260048036036060811015620008b35760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115620008f25760006000fd5b820183602082011115620009065760006000fd5b803590602001918460018302840111640100000000831117156200092a5760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929080359060200190640100000000811115620009935760006000fd5b820183602082011115620009a75760006000fd5b80359060200191846001830284011164010000000083111715620009cb5760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062001a39565b005b34801562000a325760006000fd5b5062000afa6004803603602081101562000a4c5760006000fd5b810190808035906020019064010000000081111562000a6b5760006000fd5b82018360208201111562000a7f5760006000fd5b8035906020019184600183028401116401000000008311171562000aa35760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062001b0f565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600360200280838360005b8381101562000b5a5780820151818401525b60208101905062000b3c565b505050509050019250505060405180910390f35b34801562000b7c5760006000fd5b5062000b8762001c45565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801562000bd75760006000fd5b5062000be262001c75565b604051808215151515815260200191505060405180910390f35b34801562000c0a5760006000fd5b5062000cd26004803603602081101562000c245760006000fd5b810190808035906020019064010000000081111562000c435760006000fd5b82018360208201111562000c575760006000fd5b8035906020019184600183028401116401000000008311171562000c7b5760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062001cd3565b005b62000efd6004803603608081101562000ced5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111562000d2c5760006000fd5b82018360208201111562000d405760006000fd5b8035906020019184600183028401116401000000008311171562000d645760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509090919290909192908035906020019064010000000081111562000dcd5760006000fd5b82018360208201111562000de15760006000fd5b8035906020019184600183028401116401000000008311171562000e055760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509090919290909192908035906020019064010000000081111562000e6e5760006000fd5b82018360208201111562000e825760006000fd5b8035906020019184600183028401116401000000008311171562000ea65760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062002047565b005b34801562000f0d5760006000fd5b5062000f546004803603602081101562000f275760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062002190565b005b34801562000f645760006000fd5b5062000fab6004803603602081101562000f7e5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050620021c3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008173ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015620010395760006000fd5b505af11580156200104f573d600060003e3d6000fd5b505050506040513d6020811015620010675760006000fd5b8101908080519060200190929190505050905062001080565b919050565b600060006200109a846200135163ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620010dd576000915050620011e2565b8073ffffffffffffffffffffffffffffffffffffffff16636b683896846040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200114c5780820151818401525b6020810190506200112e565b50505050905090810190601f1680156200117a5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015620011995760006000fd5b505afa158015620011af573d600060003e3d6000fd5b505050506040513d6020811015620011c75760006000fd5b8101908080519060200190929190505050915050620011e256505b92915050565b60006000620011fe85856200108563ffffffff16565b90506000348285604051620012139062002358565b808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015620012855780820151818401525b60208101905062001267565b50505050905090810190601f168015620012b35780820380516001836020036101000a031916815260200191505b5093505050506040518091039082f0905080158015620012d8573d600060003e3d6000fd5b5090507efffc2da0b561cae30d9826d37709e9421c4725faebc226cbbb7ef5fc5e734981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a180925050506200134a5650505b9392505050565b600060006001600050836040518082805190602001908083835b6020831015156200139357805182525b6020820191506020810190506020830392506200136b565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000509050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415620014305760009150506200154c565b8060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631df40eaa826001016000506040518263ffffffff1660e01b8152600401808260038015620014e4576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116200149e5790505b505091505060206040518083038186803b158015620015035760006000fd5b505afa15801562001519573d600060003e3d6000fd5b505050506040513d6020811015620015315760006000fd5b81019080805190602001909291905050509150506200154c56505b919050565b6200156162001c7563ffffffff16565b15156200156e5760006000fd5b600073ffffffffffffffffffffffffffffffffffffffff16600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b565b6200164162001c7563ffffffff16565b15156200164e5760006000fd5b8173ffffffffffffffffffffffffffffffffffffffff166335ce4016826040518263ffffffff1660e01b81526004018082600360200280838360005b83811015620016a85780820151818401525b6020810190506200168a565b5050505090500191505060206040518083038186803b158015620016cc5760006000fd5b505afa158015620016e2573d600060003e3d6000fd5b505050506040513d6020811015620016fa5760006000fd5b8101908080519060200190929190505050151562001764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180620031ea603d913960400191505060405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001506001600050846040518082805190602001908083835b602083101515620017d057805182525b602082019150602081019050602083039250620017a8565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060005060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001016000509060036200186992919062002366565b509050507f4ca1964bc3cd347906bc558f77fdd636486951cf12238150178be72a4fbb6fab83838360405180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600360200280838360005b83811015620018f55780820151818401525b602081019050620018d7565b50505050905001828103825285818151815260200191508051906020019080838360005b83811015620019375780820151818401525b60208101905062001919565b50505050905090810190601f168015620019655780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15b5b505050565b6200198b62001c7563ffffffff16565b1515620019985760006000fd5b8173ffffffffffffffffffffffffffffffffffffffff16638f283970826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801562001a195760006000fd5b505af115801562001a2f573d600060003e3d6000fd5b505050505b5b5050565b62001a4962001c7563ffffffff16565b151562001a565760006000fd5b600062001a6a83836200108563ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff16633659cfe6826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801562001aed5760006000fd5b505af115801562001b03573d600060003e3d6000fd5b50505050505b5b505050565b600062001b1b6200241e565b60006001600050846040518082805190602001908083835b60208310151562001b5b57805182525b60208201915060208101905060208303925062001b33565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060005090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001016000508060038060200260405190810160405280929190826003801562001c2d576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff168152602001906008019060208260070104928301926001038202915080841162001be75790505b50505050509050925092505062001c4056505b915091565b6000600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905062001c72565b90565b6000600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905062001cd0565b90565b62001ce362001c7563ffffffff16565b151562001cf05760006000fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600050826040518082805190602001908083835b60208310151562001d4657805182525b60208201915060208101905060208303925062001d1e565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151562001e30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5061636b61676520746f20756e736574206e6f7420666f756e6400000000000081526020015060200191505060405180910390fd5b6001600050816040518082805190602001908083835b60208310151562001e6e57805182525b60208201915060208101905060208303925062001e46565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600062001edc919062002440565b50507f4ca1964bc3cd347906bc558f77fdd636486951cf12238150178be72a4fbb6fab8160006040518060600160405280600067ffffffffffffffff1667ffffffffffffffff168152602001600067ffffffffffffffff1667ffffffffffffffff168152602001600067ffffffffffffffff1667ffffffffffffffff1681526020015060405180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600360200280838360005b8381101562001fc35780820151818401525b60208101905062001fa5565b50505050905001828103825285818151815260200191508051906020019080838360005b83811015620020055780820151818401525b60208101905062001fe7565b50505050905090810190601f168015620020335780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15b5b50565b6200205762001c7563ffffffff16565b1515620020645760006000fd5b60006200207884846200108563ffffffff16565b90508473ffffffffffffffffffffffffffffffffffffffff16634f1ef2863483856040518463ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156200211d5780820151818401525b602081019050620020ff565b50505050905090810190601f1680156200214b5780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156200216c5760006000fd5b505af115801562002182573d600060003e3d6000fd5b5050505050505b5b50505050565b620021a062001c7563ffffffff16565b1515620021ad5760006000fd5b620021be816200225963ffffffff16565b5b5b50565b60008173ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b1580156200220d5760006000fd5b505afa15801562002223573d600060003e3d6000fd5b505050506040513d60208110156200223b5760006000fd5b8101908080519060200190929190505050905062002254565b919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515620022975760006000fd5b8073ffffffffffffffffffffffffffffffffffffffff16600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b610d63806200248783390190565b82600390906003016004900481019282156200240b5791602002820160005b83821115620023d357835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550926020019260080160208160070104928301926001030262002385565b8015620024095782816101000a81549067ffffffffffffffff0219169055600801602081600701049283019260010302620023d3565b505b5090506200241a919062002447565b5090565b6040518060600160405280600390602082028036833780820191505090505090565b5060009055565b62002483919062002453565b808211156200247f57600081816101000a81549067ffffffffffffffff02191690555060010162002453565b5090565b9056fe6080604052604051610d63380380610d63833981810160405260408110156100275760006000fd5b8101908080519060200190929190805160405193929190846401000000008211156100525760006000fd5b838201915060208201858111156100695760006000fd5b82518660018202830111640100000000821117156100875760006000fd5b8083526020830192505050908051906020019080838360005b838110156100bc5780820151818401525b6020810190506100a0565b50505050905090810190601f1680156100e95780820380516001836020036101000a031916815260200191505b506040526020015050505b81815b600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815260200150601c019050604051809103902060001c0360001b600019167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6000191614151561016e57fe5b61017d826102d760201b60201c565b60008151111561024f5760008273ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b6020831015156101d757805182525b6020820191506020810190506020830392506101b1565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610237576040519150601f19603f3d011682016040523d82523d6000602084013e61023c565b606091505b5050905080151561024d5760006000fd5b505b5b505060405180807f6f72672e7a657070656c696e6f732e70726f78792e61646d696e000000000000815260200150601a0190506040518091039020600019167f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b600019161415156102c057fe5b6102cf3361037160201b60201c565b5b50506103bb565b6102ea816103a160201b61060e1760201c565b1515610341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180610d28603b913960400191505060405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b9050818155505b50565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b9050818155505b50565b60006000823b9050600081119150506103b656505b919050565b61095e806103ca6000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100775780634f1ef286146100ca5780635c60da1b146101695780638f283970146101c1578063f851a4401461021457610065565b36610065575b61006261026c63ffffffff16565b5b005b5b61007461026c63ffffffff16565b5b005b3480156100845760006000fd5b506100c86004803603602081101561009c5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610299565b005b610167600480360360408110156100e15760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561011f5760006000fd5b8201836020820111156101325760006000fd5b803590602001918460018302840111640100000000831117156101555760006000fd5b90919293909091929390505050610302565b005b3480156101765760006000fd5b5061017f6103ef565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101ce5760006000fd5b50610212600480360360208110156101e65760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061045f565b005b3480156102215760006000fd5b5061022a6105f4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61027a61062863ffffffff16565b61029661028b6106cd63ffffffff16565b61070063ffffffff16565b5b565b6102a761073363ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102ef576102e98161076663ffffffff16565b5b6102fe565b6102fd61026c63ffffffff16565b5b5b50565b61031061073363ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156103da576103528361076663ffffffff16565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051808383808284378083019250505092505050600060405180830381855af49150503d80600081146103bd576040519150601f19603f3d011682016040523d82523d6000602084013e6103c2565b606091505b505090508015156103d35760006000fd5b505b6103e9565b6103e861026c63ffffffff16565b5b5b505050565b60006103ff61073363ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561044c576104406106cd63ffffffff16565b9050610447565b61045b565b61045a61026c63ffffffff16565b5b5b90565b61046d61073363ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156105e157600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610528576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806108b86036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61055761073363ffffffff16565b82604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a16105db816107bc63ffffffff16565b5b6105f0565b6105ef61026c63ffffffff16565b5b5b50565b600061060461073363ffffffff16565b905061060b565b90565b60006000823b90506000811191505061062356505b919050565b61063661073363ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515156106bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806108866032913960400191505060405180910390fd5b6106ca6107ec63ffffffff16565b5b565b600060007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905080549150505b90565b36600060003760006000366000845af43d600060003e8060008114610728573d6000f361072d565b3d6000fd5b50505b50565b600060007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b905080549150505b90565b610775816107ef63ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25b50565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b9050818155505b50565b5b565b6107fe8161060e63ffffffff16565b1515610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806108ee603b913960400191505060405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b9050818155505b5056fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a264697066735822122094e07e0fdc79dde9af00532db5c1949cb989999ab02613701056c99c62555e6664736f6c634300060a003343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373546865207265717565737465642076657273696f6e206d757374206265207265676973746572656420696e2074686520676976656e207061636b616765a264697066735822122084046e60e6a698d2d66fac860b32efc70a6537f1dc46f3cd21318ac499d3899264736f6c634300060a0033",
  "compiler": {
    "name": "solc",
    "version": "0.6.10+commit.00c0fcaf.Emscripten.clang",
    "optimizer": {},
    "evmVersion": "constantinople"
  }
}
