{"fileName":"App.sol","contractName":"App","source":"pragma solidity ^0.5.0;\n\nimport \"./ImplementationProvider.sol\";\nimport \"./Package.sol\";\nimport \"../upgradeability/AdminUpgradeabilityProxy.sol\";\nimport \"../ownership/Ownable.sol\";\n\n/**\n * @title App\n * @dev Contract for upgradeable applications.\n * It handles the creation of proxies.\n */\ncontract App is ZOSLibOwnable {\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 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 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 admin Address of the proxy administrator.\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, address admin, bytes memory data) payable public returns (AdminUpgradeabilityProxy) {\n     address implementation = getImplementation(packageName, contractName);\n     AdminUpgradeabilityProxy proxy = (new AdminUpgradeabilityProxy).value(msg.value)(implementation, admin, data);\n     emit ProxyCreated(address(proxy));\n     return proxy;\n  }\n}\n","sourcePath":"zos-lib/contracts/application/App.sol","sourceMap":"289:4823:19:-;;;1168:24;8:9:-1;5:2;;;30:1;27;20:12;5:2;1168:24:19;;932:115:22;975:10;966:6;;:19;;;;;;;;;;;;;;;;;;1033:6;;;;;;;;;;;1000:40;;1029:1;1000:40;;;;;;;;;;;;932:115;1168:24:19;289:4823;;;;;;;;;","deployedSourceMap":"289:4823:19:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3593:294;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3593:294:19;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3593:294:19;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;3593:294:19;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3593:294:19;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3593:294:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;3593:294:19;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;3593:294:19;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3593:294:19;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3593:294:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;3593:294:19;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1373:317;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1373:317:19;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1373:317:19;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1373:317:19;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1373:317:19;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1373:317:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1373:317:19;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1798:137:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1798:137:22;;;:::i;:::-;;2476:345:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2476:345:19;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;2476:345:19;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2476:345:19;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2476:345:19;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2476:345:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2476:345:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2476:345:19;;;;;;;;;;;;;;;;;;:::i;:::-;;1930:197;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1930:197:19;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1930:197:19;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1930:197:19;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1930:197:19;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1930:197:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1930:197:19;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;8:100;52:2;49:1;45:10;40:15;;8:100;;;12:14;1930:197:19;;;;;;;;;;;;;;;;;1110:77:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1110:77:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1430:90;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1430:90:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2994:289:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2994:289:19;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2994:289:19;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2994:289:19;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2994:289:19;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2994:289:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2994:289:19;;;;;;;;;;;;;;;;;;;:::i;:::-;;4699:411;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;4699:411:19;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4699:411:19;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4699:411:19;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4699:411:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4699:411:19;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4699:411:19;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4699:411:19;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4699:411:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4699:411:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4699:411:19;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4699:411:19;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4699:411:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4699:411:19;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2106:107:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2106:107:22;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2106:107:22;;;;;;;;;;;;;;;;;;;:::i;:::-;;3593:294:19;3696:7;3711:31;3745:24;3757:11;3745;:24;;:::i;:::-;3711:58;;3808:1;3779:31;;3787:8;3779:31;;;3775:54;;;3827:1;3812:17;;;;;3775:54;3842:8;:26;;;3869:12;3842:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;8:100;52:2;49:1;45:10;40:15;;8:100;;;12:14;3842:40:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3842:40:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3842:40:19;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3842:40:19;;;;;;;;;;;;;;;;3835:47;;;;;3593:294;;;;;;:::o;1373:317::-;1442:31;1481:25;1509:9;;;1519:11;1509:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;36:153;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1509:22:19;;;;;;;;;;;;;;;;;;;;;;;1481:50;;1574:1;1541:35;;1549:4;:12;;;;;;;;;;;;1541:35;;;1537:73;;;1608:1;1578:32;;;;;1537:73;1646:4;:12;;;;;;;;;;;;:24;;;1671:4;:12;;;;1646:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1646:38:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1646:38:19;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1646:38:19;;;;;;;;;;;;;;;;1616:69;;;;;1373:317;;;;;:::o;1798:137:22:-;1314:9;:7;:9;;:::i;:::-;1306:18;;;;;;;;1896:1;1859:40;;1880:6;;;;;;;;;;;1859:40;;;;;;;;;;;;1926:1;1909:6;;:19;;;;;;;;;;;;;;;;;;1334:1;1798:137;:::o;2476:345:19:-;1314:9:22;:7;:9;;:::i;:::-;1306:18;;;;;;;;2597:7:19;:18;;;2616:7;2597:27;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;8:100;52:2;49:1;45:10;40:15;;8:100;;;12:14;2597:27:19;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2597:27:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2597:27:19;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2597:27:19;;;;;;;;;;;;;;;;2589:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2721:30;;;;;;;;2734:7;2721:30;;;;;;2743:7;2721:30;;;;;2696:9;;;2706:11;2696:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;36:153;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2696:22:19;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2762:54;2777:11;2798:7;2808;2762:54;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;8:100;52:2;49:1;45:10;40:15;;8:100;;;12:14;2762:54:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;8:100;52:2;49:1;45:10;40:15;;8:100;;;12:14;2762:54:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1334:1:22;2476:345:19;;;;:::o;1930:197::-;1998:7;2007:16;;:::i;:::-;2031:25;2059:9;;;2069:11;2059:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;36:153;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2059:22:19;;;;;;;;;;;;;;;;;;;;;;;2031:50;;2095:4;:12;;;;;;;;;;;;2109:4;:12;;;;2087:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1930:197;;;;;:::o;1110:77:22:-;1148:7;1174:6;;;;;;;;;;;1167:13;;;;1110:77;;:::o;1430:90::-;1470:4;1507:6;;;;;;;;;;;1493:20;;:10;:20;;;1486:27;;;;1430:90;;:::o;2994:289:19:-;1314:9:22;:7;:9;;:::i;:::-;1306:18;;;;;;;;3125:1:19;3074:53;;3082:9;;;3092:11;3082:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;36:153;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3082:22:19;;;;;;;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;3074:53;;;;3066:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3171:9;;;3181:11;3171:22;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;36:153;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3171:22:19;;;;;;;;;;;;;;;;;;;;;;3164:29;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;3204:74;3219:11;3240:1;3204:74;;;;;;;;3252:1;3204:74;;;;;;;;3263:1;3204:74;;;;;;;;3274:1;3204:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;8:100;52:2;49:1;45:10;40:15;;8:100;;;12:14;3204:74:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;8:100;52:2;49:1;45:10;40:15;;8:100;;;12:14;3204:74:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1334:1:22;2994:289:19;;:::o;4699:411::-;4828:24;4861:22;4886:44;4904:11;4917:12;4886:17;:44;;:::i;:::-;4861:69;;4937:30;5007:9;5018:14;5034:5;5041:4;4970:76;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;8:100;52:2;49:1;45:10;40:15;;8:100;;;12:14;4970:76:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4970:76:19;;;4937:109;;5058:28;5079:5;5058:28;;;;;;;;;;;;;;;;;;;;;;5100:5;5093:12;;;;;;4699:411;;;;;;;;;:::o;2106:107:22:-;1314:9;:7;:9;;:::i;:::-;1306:18;;;;;;;;2178:28;2197:8;2178:18;:28;;:::i;:::-;1334:1;2106:107;;:::o;2357:183::-;2450:1;2430:22;;:8;:22;;;;2422:31;;;;;;;;2497:8;2468:38;;2489:6;;;;;;;;;;;2468:38;;;;;;;;;;;;2525:8;2516:6;;:17;;;;;;;;;;;;;;;;;;2357:183;;:::o;289:4823:19:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;289:4823:19;;;;:::o;:::-;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o","abi":[{"constant":true,"inputs":[{"internalType":"string","name":"packageName","type":"string"},{"internalType":"string","name":"contractName","type":"string"}],"name":"getImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"string","name":"packageName","type":"string"}],"name":"getProvider","outputs":[{"internalType":"contract ImplementationProvider","name":"provider","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"string","name":"packageName","type":"string"}],"name":"getPackage","outputs":[{"internalType":"contract Package","name":"","type":"address"},{"internalType":"uint64[3]","name":"","type":"uint64[3]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"packageName","type":"string"}],"name":"unsetPackage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"packageName","type":"string"},{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"create","outputs":[{"internalType":"contract AdminUpgradeabilityProxy","name":"","type":"address"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"proxy","type":"address"}],"name":"ProxyCreated","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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}],"ast":{"absolutePath":"zos-lib/contracts/application/App.sol","exportedSymbols":{"App":[2885]},"id":2886,"nodeType":"SourceUnit","nodes":[{"id":2630,"literals":["solidity","^","0.5",".0"],"nodeType":"PragmaDirective","src":"0:23:19"},{"absolutePath":"zos-lib/contracts/application/ImplementationProvider.sol","file":"./ImplementationProvider.sol","id":2631,"nodeType":"ImportDirective","scope":2886,"sourceUnit":2896,"src":"25:38:19","symbolAliases":[],"unitAlias":""},{"absolutePath":"zos-lib/contracts/application/Package.sol","file":"./Package.sol","id":2632,"nodeType":"ImportDirective","scope":2886,"sourceUnit":3237,"src":"64:23:19","symbolAliases":[],"unitAlias":""},{"absolutePath":"zos-lib/contracts/upgradeability/AdminUpgradeabilityProxy.sol","file":"../upgradeability/AdminUpgradeabilityProxy.sol","id":2633,"nodeType":"ImportDirective","scope":2886,"sourceUnit":3380,"src":"88:56:19","symbolAliases":[],"unitAlias":""},{"absolutePath":"zos-lib/contracts/ownership/Ownable.sol","file":"../ownership/Ownable.sol","id":2634,"nodeType":"ImportDirective","scope":2886,"sourceUnit":3346,"src":"145:34:19","symbolAliases":[],"unitAlias":""},{"baseContracts":[{"arguments":null,"baseName":{"contractScope":null,"id":2635,"name":"ZOSLibOwnable","nodeType":"UserDefinedTypeName","referencedDeclaration":3345,"src":"305:13:19","typeDescriptions":{"typeIdentifier":"t_contract$_ZOSLibOwnable_$3345","typeString":"contract ZOSLibOwnable"}},"id":2636,"nodeType":"InheritanceSpecifier","src":"305:13:19"}],"contractDependencies":[3345,3379],"contractKind":"contract","documentation":"@title App\n@dev Contract for upgradeable applications.\nIt handles the creation of proxies.","fullyImplemented":true,"id":2885,"linearizedBaseContracts":[2885,3345],"name":"App","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":"@dev Emitted when a new proxy is created.\n@param proxy Address of the created proxy.","id":2640,"name":"ProxyCreated","nodeType":"EventDefinition","parameters":{"id":2639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2638,"indexed":false,"name":"proxy","nodeType":"VariableDeclaration","scope":2640,"src":"449:13:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2637,"name":"address","nodeType":"ElementaryTypeName","src":"449:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"448:15:19"},"src":"430:34:19"},{"anonymous":false,"documentation":"@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":2650,"name":"PackageChanged","nodeType":"EventDefinition","parameters":{"id":2649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2642,"indexed":false,"name":"providerName","nodeType":"VariableDeclaration","scope":2650,"src":"753:19:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2641,"name":"string","nodeType":"ElementaryTypeName","src":"753:6:19","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"},{"constant":false,"id":2644,"indexed":false,"name":"package","nodeType":"VariableDeclaration","scope":2650,"src":"774:15:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2643,"name":"address","nodeType":"ElementaryTypeName","src":"774:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2648,"indexed":false,"name":"version","nodeType":"VariableDeclaration","scope":2650,"src":"791:17:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint64_$3_memory_ptr","typeString":"uint64[3]"},"typeName":{"baseType":{"id":2645,"name":"uint64","nodeType":"ElementaryTypeName","src":"791:6:19","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":2647,"length":{"argumentTypes":null,"hexValue":"33","id":2646,"isConstant":false,"isLValue":false,"isPure":false,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"798:1:19","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"ArrayTypeName","src":"791:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint64_$3_storage_ptr","typeString":"uint64[3]"}},"value":null,"visibility":"internal"}],"src":"752:57:19"},"src":"732:78:19"},{"canonicalName":"App.ProviderInfo","id":2657,"members":[{"constant":false,"id":2652,"name":"package","nodeType":"VariableDeclaration","scope":2657,"src":"940:15:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_Package_$3236","typeString":"contract Package"},"typeName":{"contractScope":null,"id":2651,"name":"Package","nodeType":"UserDefinedTypeName","referencedDeclaration":3236,"src":"940:7:19","typeDescriptions":{"typeIdentifier":"t_contract$_Package_$3236","typeString":"contract Package"}},"value":null,"visibility":"internal"},{"constant":false,"id":2656,"name":"version","nodeType":"VariableDeclaration","scope":2657,"src":"961:17:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint64_$3_storage_ptr","typeString":"uint64[3]"},"typeName":{"baseType":{"id":2653,"name":"uint64","nodeType":"ElementaryTypeName","src":"961:6:19","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":2655,"length":{"argumentTypes":null,"hexValue":"33","id":2654,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"968:1:19","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"ArrayTypeName","src":"961:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint64_$3_storage_ptr","typeString":"uint64[3]"}},"value":null,"visibility":"internal"}],"name":"ProviderInfo","nodeType":"StructDefinition","scope":2885,"src":"914:69:19","visibility":"public"},{"constant":false,"id":2661,"name":"providers","nodeType":"VariableDeclaration","scope":2885,"src":"1069:50:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_$_t_struct$_ProviderInfo_$2657_storage_$","typeString":"mapping(string => struct App.ProviderInfo)"},"typeName":{"id":2660,"keyType":{"id":2658,"name":"string","nodeType":"ElementaryTypeName","src":"1077:6:19","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"nodeType":"Mapping","src":"1069:31:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_$_t_struct$_ProviderInfo_$2657_storage_$","typeString":"mapping(string => struct App.ProviderInfo)"},"valueType":{"contractScope":null,"id":2659,"name":"ProviderInfo","nodeType":"UserDefinedTypeName","referencedDeclaration":2657,"src":"1087:12:19","typeDescriptions":{"typeIdentifier":"t_struct$_ProviderInfo_$2657_storage_ptr","typeString":"struct App.ProviderInfo"}}},"value":null,"visibility":"internal"},{"body":{"id":2664,"nodeType":"Block","src":"1189:3:19","statements":[]},"documentation":"@dev Constructor function.","id":2665,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":2662,"nodeType":"ParameterList","parameters":[],"src":"1179:2:19"},"returnParameters":{"id":2663,"nodeType":"ParameterList","parameters":[],"src":"1189:0:19"},"scope":2885,"src":"1168:24:19","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":2700,"nodeType":"Block","src":"1475:215:19","statements":[{"assignments":[2673],"declarations":[{"constant":false,"id":2673,"name":"info","nodeType":"VariableDeclaration","scope":2700,"src":"1481:25:19","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ProviderInfo_$2657_storage_ptr","typeString":"struct App.ProviderInfo"},"typeName":{"contractScope":null,"id":2672,"name":"ProviderInfo","nodeType":"UserDefinedTypeName","referencedDeclaration":2657,"src":"1481:12:19","typeDescriptions":{"typeIdentifier":"t_struct$_ProviderInfo_$2657_storage_ptr","typeString":"struct App.ProviderInfo"}},"value":null,"visibility":"internal"}],"id":2677,"initialValue":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":2674,"name":"providers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2661,"src":"1509:9:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_$_t_struct$_ProviderInfo_$2657_storage_$","typeString":"mapping(string memory => struct App.ProviderInfo storage ref)"}},"id":2676,"indexExpression":{"argumentTypes":null,"id":2675,"name":"packageName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2667,"src":"1519:11:19","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1509:22:19","typeDescriptions":{"typeIdentifier":"t_struct$_ProviderInfo_$2657_storage","typeString":"struct App.ProviderInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"1481:50:19"},{"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2679,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2673,"src":"1549:4:19","typeDescriptions":{"typeIdentifier":"t_struct$_ProviderInfo_$2657_storage_ptr","typeString":"struct App.ProviderInfo storage pointer"}},"id":2680,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"package","nodeType":"MemberAccess","referencedDeclaration":2652,"src":"1549:12:19","typeDescriptions":{"typeIdentifier":"t_contract$_Package_$3236","typeString":"contract Package"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Package_$3236","typeString":"contract Package"}],"id":2678,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1541:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1541:21:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":2683,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1574:1:19","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":2682,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1566:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2684,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1566:10:19","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1541:35:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":null,"id":2690,"nodeType":"IfStatement","src":"1537:73:19","trueBody":{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":2687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1608:1:19","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":2686,"name":"ImplementationProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2895,"src":"1585:22:19","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ImplementationProvider_$2895_$","typeString":"type(contract ImplementationProvider)"}},"id":2688,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1585:25:19","typeDescriptions":{"typeIdentifier":"t_contract$_ImplementationProvider_$2895","typeString":"contract ImplementationProvider"}},"functionReturnParameters":2671,"id":2689,"nodeType":"Return","src":"1578:32:19"}},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2695,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2673,"src":"1671:4:19","typeDescriptions":{"typeIdentifier":"t_struct$_ProviderInfo_$2657_storage_ptr","typeString":"struct App.ProviderInfo storage pointer"}},"id":2696,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"version","nodeType":"MemberAccess","referencedDeclaration":2656,"src":"1671:12:19","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":2692,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2673,"src":"1646:4:19","typeDescriptions":{"typeIdentifier":"t_struct$_ProviderInfo_$2657_storage_ptr","typeString":"struct App.ProviderInfo storage pointer"}},"id":2693,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"package","nodeType":"MemberAccess","referencedDeclaration":2652,"src":"1646:12:19","typeDescriptions":{"typeIdentifier":"t_contract$_Package_$3236","typeString":"contract Package"}},"id":2694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getContract","nodeType":"MemberAccess","referencedDeclaration":2976,"src":"1646:24:19","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":2697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1646:38:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2691,"name":"ImplementationProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2895,"src":"1623:22:19","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ImplementationProvider_$2895_$","typeString":"type(contract ImplementationProvider)"}},"id":2698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1623:62:19","typeDescriptions":{"typeIdentifier":"t_contract$_ImplementationProvider_$2895","typeString":"contract ImplementationProvider"}},"functionReturnParameters":2671,"id":2699,"nodeType":"Return","src":"1616:69:19"}]},"documentation":"@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 The provider.","id":2701,"implemented":true,"kind":"function","modifiers":[],"name":"getProvider","nodeType":"FunctionDefinition","parameters":{"id":2668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2667,"name":"packageName","nodeType":"VariableDeclaration","scope":2701,"src":"1394:25:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2666,"name":"string","nodeType":"ElementaryTypeName","src":"1394:6:19","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"1393:27:19"},"returnParameters":{"id":2671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2670,"name":"provider","nodeType":"VariableDeclaration","scope":2701,"src":"1442:31:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ImplementationProvider_$2895","typeString":"contract ImplementationProvider"},"typeName":{"contractScope":null,"id":2669,"name":"ImplementationProvider","nodeType":"UserDefinedTypeName","referencedDeclaration":2895,"src":"1442:22:19","typeDescriptions":{"typeIdentifier":"t_contract$_ImplementationProvider_$2895","typeString":"contract ImplementationProvider"}},"value":null,"visibility":"internal"}],"src":"1441:33:19"},"scope":2885,"src":"1373:317:19","stateMutability":"view","superFunction":null,"visibility":"public"},{"body":{"id":2724,"nodeType":"Block","src":"2025:102:19","statements":[{"assignments":[2713],"declarations":[{"constant":false,"id":2713,"name":"info","nodeType":"VariableDeclaration","scope":2724,"src":"2031:25:19","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ProviderInfo_$2657_storage_ptr","typeString":"struct App.ProviderInfo"},"typeName":{"contractScope":null,"id":2712,"name":"ProviderInfo","nodeType":"UserDefinedTypeName","referencedDeclaration":2657,"src":"2031:12:19","typeDescriptions":{"typeIdentifier":"t_struct$_ProviderInfo_$2657_storage_ptr","typeString":"struct App.ProviderInfo"}},"value":null,"visibility":"internal"}],"id":2717,"initialValue":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":2714,"name":"providers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2661,"src":"2059:9:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_$_t_struct$_ProviderInfo_$2657_storage_$","typeString":"mapping(string memory => struct App.ProviderInfo storage ref)"}},"id":2716,"indexExpression":{"argumentTypes":null,"id":2715,"name":"packageName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2703,"src":"2069:11:19","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2059:22:19","typeDescriptions":{"typeIdentifier":"t_struct$_ProviderInfo_$2657_storage","typeString":"struct App.ProviderInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2031:50:19"},{"expression":{"argumentTypes":null,"components":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2718,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2713,"src":"2095:4:19","typeDescriptions":{"typeIdentifier":"t_struct$_ProviderInfo_$2657_storage_ptr","typeString":"struct App.ProviderInfo storage pointer"}},"id":2719,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"package","nodeType":"MemberAccess","referencedDeclaration":2652,"src":"2095:12:19","typeDescriptions":{"typeIdentifier":"t_contract$_Package_$3236","typeString":"contract Package"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2720,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2713,"src":"2109:4:19","typeDescriptions":{"typeIdentifier":"t_struct$_ProviderInfo_$2657_storage_ptr","typeString":"struct App.ProviderInfo storage pointer"}},"id":2721,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"version","nodeType":"MemberAccess","referencedDeclaration":2656,"src":"2109:12:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint64_$3_storage","typeString":"uint64[3] storage ref"}}],"id":2722,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2094:28:19","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_Package_$3236_$_t_array$_t_uint64_$3_storage_$","typeString":"tuple(contract Package,uint64[3] storage ref)"}},"functionReturnParameters":2711,"id":2723,"nodeType":"Return","src":"2087:35:19"}]},"documentation":"@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","id":2725,"implemented":true,"kind":"function","modifiers":[],"name":"getPackage","nodeType":"FunctionDefinition","parameters":{"id":2704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2703,"name":"packageName","nodeType":"VariableDeclaration","scope":2725,"src":"1950:25:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2702,"name":"string","nodeType":"ElementaryTypeName","src":"1950:6:19","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"1949:27:19"},"returnParameters":{"id":2711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2706,"name":"","nodeType":"VariableDeclaration","scope":2725,"src":"1998:7:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_Package_$3236","typeString":"contract Package"},"typeName":{"contractScope":null,"id":2705,"name":"Package","nodeType":"UserDefinedTypeName","referencedDeclaration":3236,"src":"1998:7:19","typeDescriptions":{"typeIdentifier":"t_contract$_Package_$3236","typeString":"contract Package"}},"value":null,"visibility":"internal"},{"constant":false,"id":2710,"name":"","nodeType":"VariableDeclaration","scope":2725,"src":"2007:16:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint64_$3_memory_ptr","typeString":"uint64[3]"},"typeName":{"baseType":{"id":2707,"name":"uint64","nodeType":"ElementaryTypeName","src":"2007:6:19","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":2709,"length":{"argumentTypes":null,"hexValue":"33","id":2708,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2014:1:19","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"ArrayTypeName","src":"2007:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint64_$3_storage_ptr","typeString":"uint64[3]"}},"value":null,"visibility":"internal"}],"src":"1997:27:19"},"scope":2885,"src":"1930:197:19","stateMutability":"view","superFunction":null,"visibility":"public"},{"body":{"id":2763,"nodeType":"Block","src":"2583:238:19","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2741,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2733,"src":"2616:7:19","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":2739,"name":"package","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2729,"src":"2597:7:19","typeDescriptions":{"typeIdentifier":"t_contract$_Package_$3236","typeString":"contract Package"}},"id":2740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"hasVersion","nodeType":"MemberAccess","referencedDeclaration":3136,"src":"2597:18:19","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":2742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2597:27:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"546865207265717565737465642076657273696f6e206d757374206265207265676973746572656420696e2074686520676976656e207061636b616765","id":2743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2626:63:19","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":2738,"name":"require","nodeType":"Identifier","overloadedDeclarations":[3711,3712],"referencedDeclaration":3712,"src":"2589:7:19","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2589:101:19","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2745,"nodeType":"ExpressionStatement","src":"2589:101:19"},{"expression":{"argumentTypes":null,"id":2753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":2746,"name":"providers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2661,"src":"2696:9:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_$_t_struct$_ProviderInfo_$2657_storage_$","typeString":"mapping(string memory => struct App.ProviderInfo storage ref)"}},"id":2748,"indexExpression":{"argumentTypes":null,"id":2747,"name":"packageName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2727,"src":"2706:11:19","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2696:22:19","typeDescriptions":{"typeIdentifier":"t_struct$_ProviderInfo_$2657_storage","typeString":"struct App.ProviderInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2750,"name":"package","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2729,"src":"2734:7:19","typeDescriptions":{"typeIdentifier":"t_contract$_Package_$3236","typeString":"contract Package"}},{"argumentTypes":null,"id":2751,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2733,"src":"2743:7:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint64_$3_memory_ptr","typeString":"uint64[3] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Package_$3236","typeString":"contract Package"},{"typeIdentifier":"t_array$_t_uint64_$3_memory_ptr","typeString":"uint64[3] memory"}],"id":2749,"name":"ProviderInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2657,"src":"2721:12:19","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ProviderInfo_$2657_storage_ptr_$","typeString":"type(struct App.ProviderInfo storage pointer)"}},"id":2752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2721:30:19","typeDescriptions":{"typeIdentifier":"t_struct$_ProviderInfo_$2657_memory","typeString":"struct App.ProviderInfo memory"}},"src":"2696:55:19","typeDescriptions":{"typeIdentifier":"t_struct$_ProviderInfo_$2657_storage","typeString":"struct App.ProviderInfo storage ref"}},"id":2754,"nodeType":"ExpressionStatement","src":"2696:55:19"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2756,"name":"packageName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2727,"src":"2777:11:19","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2758,"name":"package","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2729,"src":"2798:7:19","typeDescriptions":{"typeIdentifier":"t_contract$_Package_$3236","typeString":"contract Package"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Package_$3236","typeString":"contract Package"}],"id":2757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2790:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2790:16:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":2760,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2733,"src":"2808:7:19","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":2755,"name":"PackageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2650,"src":"2762:14:19","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":2761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2762:54:19","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2762,"nodeType":"EmitStatement","src":"2757:59:19"}]},"documentation":"@dev Sets a package in a specific version as a dependency for this application.\nRequires 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.","id":2764,"implemented":true,"kind":"function","modifiers":[{"arguments":null,"id":2736,"modifierName":{"argumentTypes":null,"id":2735,"name":"onlyOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"2573:9:19","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"2573:9:19"}],"name":"setPackage","nodeType":"FunctionDefinition","parameters":{"id":2734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2727,"name":"packageName","nodeType":"VariableDeclaration","scope":2764,"src":"2496:25:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2726,"name":"string","nodeType":"ElementaryTypeName","src":"2496:6:19","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"},{"constant":false,"id":2729,"name":"package","nodeType":"VariableDeclaration","scope":2764,"src":"2523:15:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_Package_$3236","typeString":"contract Package"},"typeName":{"contractScope":null,"id":2728,"name":"Package","nodeType":"UserDefinedTypeName","referencedDeclaration":3236,"src":"2523:7:19","typeDescriptions":{"typeIdentifier":"t_contract$_Package_$3236","typeString":"contract Package"}},"value":null,"visibility":"internal"},{"constant":false,"id":2733,"name":"version","nodeType":"VariableDeclaration","scope":2764,"src":"2540:24:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint64_$3_memory_ptr","typeString":"uint64[3]"},"typeName":{"baseType":{"id":2730,"name":"uint64","nodeType":"ElementaryTypeName","src":"2540:6:19","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":2732,"length":{"argumentTypes":null,"hexValue":"33","id":2731,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2547:1:19","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"ArrayTypeName","src":"2540:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint64_$3_storage_ptr","typeString":"uint64[3]"}},"value":null,"visibility":"internal"}],"src":"2495:70:19"},"returnParameters":{"id":2737,"nodeType":"ParameterList","parameters":[],"src":"2583:0:19"},"scope":2885,"src":"2476:345:19","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":2807,"nodeType":"Block","src":"3060:223:19","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":2773,"name":"providers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2661,"src":"3082:9:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_$_t_struct$_ProviderInfo_$2657_storage_$","typeString":"mapping(string memory => struct App.ProviderInfo storage ref)"}},"id":2775,"indexExpression":{"argumentTypes":null,"id":2774,"name":"packageName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2766,"src":"3092:11:19","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3082:22:19","typeDescriptions":{"typeIdentifier":"t_struct$_ProviderInfo_$2657_storage","typeString":"struct App.ProviderInfo storage ref"}},"id":2776,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"package","nodeType":"MemberAccess","referencedDeclaration":2652,"src":"3082:30:19","typeDescriptions":{"typeIdentifier":"t_contract$_Package_$3236","typeString":"contract Package"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Package_$3236","typeString":"contract Package"}],"id":2772,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3074:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3074:39:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":2779,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3125:1:19","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":2778,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3117:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3117:10:19","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"3074:53:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"5061636b61676520746f20756e736574206e6f7420666f756e64","id":2782,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3129:28:19","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":2771,"name":"require","nodeType":"Identifier","overloadedDeclarations":[3711,3712],"referencedDeclaration":3712,"src":"3066:7:19","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3066:92:19","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2784,"nodeType":"ExpressionStatement","src":"3066:92:19"},{"expression":{"argumentTypes":null,"id":2788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"3164:29:19","subExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":2785,"name":"providers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2661,"src":"3171:9:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_$_t_struct$_ProviderInfo_$2657_storage_$","typeString":"mapping(string memory => struct App.ProviderInfo storage ref)"}},"id":2787,"indexExpression":{"argumentTypes":null,"id":2786,"name":"packageName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2766,"src":"3181:11:19","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3171:22:19","typeDescriptions":{"typeIdentifier":"t_struct$_ProviderInfo_$2657_storage","typeString":"struct App.ProviderInfo storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2789,"nodeType":"ExpressionStatement","src":"3164:29:19"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2791,"name":"packageName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2766,"src":"3219:11:19","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":2793,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3240:1:19","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":2792,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3232:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2794,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3232:10:19","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"components":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":2796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3252:1:19","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":2795,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3245:6:19","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":"uint64"},"id":2797,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3245:9:19","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":2799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3263:1:19","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":2798,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3256:6:19","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":"uint64"},"id":2800,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3256:9:19","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":2802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3274:1:19","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":2801,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3267:6:19","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":"uint64"},"id":2803,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3267:9:19","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"id":2804,"isConstant":false,"isInlineArray":true,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3244:33:19","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":2790,"name":"PackageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2650,"src":"3204:14:19","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":2805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3204:74:19","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2806,"nodeType":"EmitStatement","src":"3199:79:19"}]},"documentation":"@dev Unsets a package given its name.\nReverts if the package is not set in the application.\n@param packageName Name of the package to remove.","id":2808,"implemented":true,"kind":"function","modifiers":[{"arguments":null,"id":2769,"modifierName":{"argumentTypes":null,"id":2768,"name":"onlyOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"3050:9:19","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"3050:9:19"}],"name":"unsetPackage","nodeType":"FunctionDefinition","parameters":{"id":2767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2766,"name":"packageName","nodeType":"VariableDeclaration","scope":2808,"src":"3016:25:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2765,"name":"string","nodeType":"ElementaryTypeName","src":"3016:6:19","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"3015:27:19"},"returnParameters":{"id":2770,"nodeType":"ParameterList","parameters":[],"src":"3060:0:19"},"scope":2885,"src":"2994:289:19","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":2840,"nodeType":"Block","src":"3705:182:19","statements":[{"assignments":[2818],"declarations":[{"constant":false,"id":2818,"name":"provider","nodeType":"VariableDeclaration","scope":2840,"src":"3711:31:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ImplementationProvider_$2895","typeString":"contract ImplementationProvider"},"typeName":{"contractScope":null,"id":2817,"name":"ImplementationProvider","nodeType":"UserDefinedTypeName","referencedDeclaration":2895,"src":"3711:22:19","typeDescriptions":{"typeIdentifier":"t_contract$_ImplementationProvider_$2895","typeString":"contract ImplementationProvider"}},"value":null,"visibility":"internal"}],"id":2822,"initialValue":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2820,"name":"packageName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2810,"src":"3757:11:19","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2819,"name":"getProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2701,"src":"3745:11:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$_t_contract$_ImplementationProvider_$2895_$","typeString":"function (string memory) view returns (contract ImplementationProvider)"}},"id":2821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3745:24:19","typeDescriptions":{"typeIdentifier":"t_contract$_ImplementationProvider_$2895","typeString":"contract ImplementationProvider"}},"nodeType":"VariableDeclarationStatement","src":"3711:58:19"},{"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2824,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2818,"src":"3787:8:19","typeDescriptions":{"typeIdentifier":"t_contract$_ImplementationProvider_$2895","typeString":"contract ImplementationProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ImplementationProvider_$2895","typeString":"contract ImplementationProvider"}],"id":2823,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3779:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3779:17:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":2827,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3808:1:19","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":2826,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3800:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2828,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3800:10:19","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"3779:31:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":null,"id":2834,"nodeType":"IfStatement","src":"3775:54:19","trueBody":{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":2831,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3827:1:19","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":2830,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3819:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3819:10:19","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":2816,"id":2833,"nodeType":"Return","src":"3812:17:19"}},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2837,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2812,"src":"3869:12:19","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"argumentTypes":null,"id":2835,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2818,"src":"3842:8:19","typeDescriptions":{"typeIdentifier":"t_contract$_ImplementationProvider_$2895","typeString":"contract ImplementationProvider"}},"id":2836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getImplementation","nodeType":"MemberAccess","referencedDeclaration":2894,"src":"3842:26:19","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_string_memory_ptr_$returns$_t_address_$","typeString":"function (string memory) view external returns (address)"}},"id":2838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3842:40:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":2816,"id":2839,"nodeType":"Return","src":"3835:47:19"}]},"documentation":"@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.","id":2841,"implemented":true,"kind":"function","modifiers":[],"name":"getImplementation","nodeType":"FunctionDefinition","parameters":{"id":2813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2810,"name":"packageName","nodeType":"VariableDeclaration","scope":2841,"src":"3620:25:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2809,"name":"string","nodeType":"ElementaryTypeName","src":"3620:6:19","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"},{"constant":false,"id":2812,"name":"contractName","nodeType":"VariableDeclaration","scope":2841,"src":"3647:26:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2811,"name":"string","nodeType":"ElementaryTypeName","src":"3647:6:19","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"3619:55:19"},"returnParameters":{"id":2816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2815,"name":"","nodeType":"VariableDeclaration","scope":2841,"src":"3696:7:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2814,"name":"address","nodeType":"ElementaryTypeName","src":"3696:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"3695:9:19"},"scope":2885,"src":"3593:294:19","stateMutability":"view","superFunction":null,"visibility":"public"},{"body":{"id":2883,"nodeType":"Block","src":"4854:256:19","statements":[{"assignments":[2855],"declarations":[{"constant":false,"id":2855,"name":"implementation","nodeType":"VariableDeclaration","scope":2883,"src":"4861:22:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2854,"name":"address","nodeType":"ElementaryTypeName","src":"4861:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"id":2860,"initialValue":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2857,"name":"packageName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2843,"src":"4904:11:19","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"argumentTypes":null,"id":2858,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2845,"src":"4917:12:19","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":2856,"name":"getImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2841,"src":"4886:17:19","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":2859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4886:44:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4861:69:19"},{"assignments":[2862],"declarations":[{"constant":false,"id":2862,"name":"proxy","nodeType":"VariableDeclaration","scope":2883,"src":"4937:30:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_AdminUpgradeabilityProxy_$3379","typeString":"contract AdminUpgradeabilityProxy"},"typeName":{"contractScope":null,"id":2861,"name":"AdminUpgradeabilityProxy","nodeType":"UserDefinedTypeName","referencedDeclaration":3379,"src":"4937:24:19","typeDescriptions":{"typeIdentifier":"t_contract$_AdminUpgradeabilityProxy_$3379","typeString":"contract AdminUpgradeabilityProxy"}},"value":null,"visibility":"internal"}],"id":2874,"initialValue":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2870,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2855,"src":"5018:14:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":2871,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2847,"src":"5034:5:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":2872,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2849,"src":"5041:4:19","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2867,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3708,"src":"5007:3:19","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","referencedDeclaration":null,"src":"5007:9:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"components":[{"argumentTypes":null,"id":2864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"4971:28:19","typeDescriptions":{"typeIdentifier":"t_function_creation_payable$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_AdminUpgradeabilityProxy_$3379_$","typeString":"function (address,address,bytes memory) payable returns (contract AdminUpgradeabilityProxy)"},"typeName":{"contractScope":null,"id":2863,"name":"AdminUpgradeabilityProxy","nodeType":"UserDefinedTypeName","referencedDeclaration":3379,"src":"4975:24:19","typeDescriptions":{"typeIdentifier":"t_contract$_AdminUpgradeabilityProxy_$3379","typeString":"contract AdminUpgradeabilityProxy"}}}],"id":2865,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4970:30:19","typeDescriptions":{"typeIdentifier":"t_function_creation_payable$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_AdminUpgradeabilityProxy_$3379_$","typeString":"function (address,address,bytes memory) payable returns (contract AdminUpgradeabilityProxy)"}},"id":2866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","referencedDeclaration":null,"src":"4970:36:19","typeDescriptions":{"typeIdentifier":"t_function_setvalue_pure$_t_uint256_$returns$_t_function_creation_payable$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_AdminUpgradeabilityProxy_$3379_$value_$","typeString":"function (uint256) pure returns (function (address,address,bytes memory) payable returns (contract AdminUpgradeabilityProxy))"}},"id":2869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4970:47:19","typeDescriptions":{"typeIdentifier":"t_function_creation_payable$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_AdminUpgradeabilityProxy_$3379_$value","typeString":"function (address,address,bytes memory) payable returns (contract AdminUpgradeabilityProxy)"}},"id":2873,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4970:76:19","typeDescriptions":{"typeIdentifier":"t_contract$_AdminUpgradeabilityProxy_$3379","typeString":"contract AdminUpgradeabilityProxy"}},"nodeType":"VariableDeclarationStatement","src":"4937:109:19"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2877,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2862,"src":"5079:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_AdminUpgradeabilityProxy_$3379","typeString":"contract AdminUpgradeabilityProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AdminUpgradeabilityProxy_$3379","typeString":"contract AdminUpgradeabilityProxy"}],"id":2876,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5071:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5071:14:19","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":2875,"name":"ProxyCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2640,"src":"5058:12:19","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5058:28:19","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2880,"nodeType":"EmitStatement","src":"5053:33:19"},{"expression":{"argumentTypes":null,"id":2881,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2862,"src":"5100:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_AdminUpgradeabilityProxy_$3379","typeString":"contract AdminUpgradeabilityProxy"}},"functionReturnParameters":2853,"id":2882,"nodeType":"Return","src":"5093:12:19"}]},"documentation":"@dev Creates a new proxy for the given contract and forwards a function call to it.\nThis 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 admin Address of the proxy administrator.\n@param data Data to send as msg.data to the corresponding implementation to initialize the proxied contract.\nIt should include the signature and the parameters of the function to be called, as described in\nhttps://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\nThis parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\n@return Address of the new proxy.","id":2884,"implemented":true,"kind":"function","modifiers":[],"name":"create","nodeType":"FunctionDefinition","parameters":{"id":2850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2843,"name":"packageName","nodeType":"VariableDeclaration","scope":2884,"src":"4715:25:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2842,"name":"string","nodeType":"ElementaryTypeName","src":"4715:6:19","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"},{"constant":false,"id":2845,"name":"contractName","nodeType":"VariableDeclaration","scope":2884,"src":"4742:26:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2844,"name":"string","nodeType":"ElementaryTypeName","src":"4742:6:19","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"},{"constant":false,"id":2847,"name":"admin","nodeType":"VariableDeclaration","scope":2884,"src":"4770:13:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2846,"name":"address","nodeType":"ElementaryTypeName","src":"4770:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2849,"name":"data","nodeType":"VariableDeclaration","scope":2884,"src":"4785:17:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2848,"name":"bytes","nodeType":"ElementaryTypeName","src":"4785:5:19","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"value":null,"visibility":"internal"}],"src":"4714:89:19"},"returnParameters":{"id":2853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2852,"name":"","nodeType":"VariableDeclaration","scope":2884,"src":"4828:24:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_AdminUpgradeabilityProxy_$3379","typeString":"contract AdminUpgradeabilityProxy"},"typeName":{"contractScope":null,"id":2851,"name":"AdminUpgradeabilityProxy","nodeType":"UserDefinedTypeName","referencedDeclaration":3379,"src":"4828:24:19","typeDescriptions":{"typeIdentifier":"t_contract$_AdminUpgradeabilityProxy_$3379","typeString":"contract AdminUpgradeabilityProxy"}},"value":null,"visibility":"internal"}],"src":"4827:26:19"},"scope":2885,"src":"4699:411:19","stateMutability":"payable","superFunction":null,"visibility":"public"}],"scope":2886,"src":"289:4823:19"}],"src":"0:5113:19"},"bytecode":"0x60806040523480156100115760006000fd5b505b5b33600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35b5b6100d9565b612924806100e86000396000f3fe608060405260043610620000a35760003560e01c80638da5cb5b11620000615780638da5cb5b146200061c5780638f32d59b1462000677578063ad358d9914620006aa578063cd3e318a1462000782578063f2fde38b14620009ed57620000a3565b806327a0d66914620000a957806350cadc851462000262578063715018a6146200037a57806371eb64cc146200039557806387c6048314620004d257620000a3565b60006000fd5b348015620000b75760006000fd5b506200022060048036036040811015620000d15760006000fd5b8101908080359060200190640100000000811115620000f05760006000fd5b820183602082011115620001045760006000fd5b80359060200191846001830284011164010000000083111715620001285760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929080359060200190640100000000811115620001915760006000fd5b820183602082011115620001a55760006000fd5b80359060200191846001830284011164010000000083111715620001c95760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062000a44565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620002705760006000fd5b5062000338600480360360208110156200028a5760006000fd5b8101908080359060200190640100000000811115620002a95760006000fd5b820183602082011115620002bd5760006000fd5b80359060200191846001830284011164010000000083111715620002e15760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062000ba7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620003885760006000fd5b506200039362000da7565b005b348015620003a35760006000fd5b50620004d0600480360360a0811015620003bd5760006000fd5b8101908080359060200190640100000000811115620003dc5760006000fd5b820183602082011115620003f05760006000fd5b80359060200191846001830284011164010000000083111715620004145760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f82011690508083019250505050505090909192909091929050505062000e87565b005b348015620004e05760006000fd5b50620005a860048036036020811015620004fa5760006000fd5b8101908080359060200190640100000000811115620005195760006000fd5b8201836020820111156200052d5760006000fd5b80359060200191846001830284011164010000000083111715620005515760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290505050620011d1565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600360200280838360005b83811015620006085780820151818401525b602081019050620005ea565b505050509050019250505060405180910390f35b3480156200062a5760006000fd5b506200063562001307565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620006855760006000fd5b506200069062001337565b604051808215151515815260200191505060405180910390f35b348015620006b85760006000fd5b506200078060048036036020811015620006d25760006000fd5b8101908080359060200190640100000000811115620006f15760006000fd5b820183602082011115620007055760006000fd5b80359060200191846001830284011164010000000083111715620007295760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062001395565b005b620009ab600480360360808110156200079b5760006000fd5b8101908080359060200190640100000000811115620007ba5760006000fd5b820183602082011115620007ce5760006000fd5b80359060200191846001830284011164010000000083111715620007f25760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290803590602001906401000000008111156200085b5760006000fd5b8201836020820111156200086f5760006000fd5b80359060200191846001830284011164010000000083111715620008935760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156200091c5760006000fd5b820183602082011115620009305760006000fd5b80359060200191846001830284011164010000000083111715620009545760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062001709565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620009fb5760006000fd5b5062000a426004803603602081101562000a155760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050620018a7565b005b6000600062000a598462000ba763ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000a9c57600091505062000ba1565b8073ffffffffffffffffffffffffffffffffffffffff16636b683896846040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000b0b5780820151818401525b60208101905062000aed565b50505050905090810190601f16801562000b395780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801562000b585760006000fd5b505afa15801562000b6e573d600060003e3d6000fd5b505050506040513d602081101562000b865760006000fd5b810190808051906020019092919050505091505062000ba156505b92915050565b600060006001600050836040518082805190602001908083835b60208310151562000be957805182525b60208201915060208101905060208303925062000bc1565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000509050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141562000c8657600091505062000da2565b8060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631df40eaa826001016000506040518263ffffffff1660e01b815260040180826003801562000d3a576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff168152602001906008019060208260070104928301926001038202915080841162000cf45790505b505091505060206040518083038186803b15801562000d595760006000fd5b505afa15801562000d6f573d600060003e3d6000fd5b505050506040513d602081101562000d875760006000fd5b810190808051906020019092919050505091505062000da256505b919050565b62000db76200133763ffffffff16565b151562000dc45760006000fd5b600073ffffffffffffffffffffffffffffffffffffffff16600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b565b62000e976200133763ffffffff16565b151562000ea45760006000fd5b8173ffffffffffffffffffffffffffffffffffffffff166335ce4016826040518263ffffffff1660e01b81526004018082600360200280838360005b8381101562000efe5780820151818401525b60208101905062000ee0565b5050505090500191505060206040518083038186803b15801562000f225760006000fd5b505afa15801562000f38573d600060003e3d6000fd5b505050506040513d602081101562000f505760006000fd5b8101908080519060200190929190505050151562000fba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180620028b3603d913960400191505060405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001506001600050846040518082805190602001908083835b6020831015156200102657805182525b60208201915060208101905060208303925062000ffe565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060005060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101600050906003620010bf929190620019d9565b509050507f4ca1964bc3cd347906bc558f77fdd636486951cf12238150178be72a4fbb6fab83838360405180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600360200280838360005b838110156200114b5780820151818401525b6020810190506200112d565b50505050905001828103825285818151815260200191508051906020019080838360005b838110156200118d5780820151818401525b6020810190506200116f565b50505050905090810190601f168015620011bb5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15b5b505050565b6000620011dd62001a91565b60006001600050846040518082805190602001908083835b6020831015156200121d57805182525b602082019150602081019050602083039250620011f5565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060005090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160005080600380602002604051908101604052809291908260038015620012ef576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff1681526020019060080190602082600701049283019260010382029150808411620012a95790505b5050505050905092509250506200130256505b915091565b6000600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905062001334565b90565b6000600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905062001392565b90565b620013a56200133763ffffffff16565b1515620013b25760006000fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600050826040518082805190602001908083835b6020831015156200140857805182525b602082019150602081019050602083039250620013e0565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515620014f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5061636b61676520746f20756e736574206e6f7420666f756e6400000000000081526020015060200191505060405180910390fd5b6001600050816040518082805190602001908083835b6020831015156200153057805182525b60208201915060208101905060208303925062001508565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006200159e919062001ab3565b50507f4ca1964bc3cd347906bc558f77fdd636486951cf12238150178be72a4fbb6fab8160006040518060600160405280600067ffffffffffffffff1667ffffffffffffffff168152602001600067ffffffffffffffff1667ffffffffffffffff168152602001600067ffffffffffffffff1667ffffffffffffffff1681526020015060405180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600360200280838360005b83811015620016855780820151818401525b60208101905062001667565b50505050905001828103825285818151815260200191508051906020019080838360005b83811015620016c75780820151818401525b602081019050620016a9565b50505050905090810190601f168015620016f55780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15b5b50565b600060006200171f868662000a4463ffffffff16565b9050600034828686604051620017359062001aba565b808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015620017d95780820151818401525b602081019050620017bb565b50505050905090810190601f168015620018075780820380516001836020036101000a031916815260200191505b509450505050506040518091039082f0801580156200182b573d600060003e3d6000fd5b50905090507efffc2da0b561cae30d9826d37709e9421c4725faebc226cbbb7ef5fc5e734981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a180925050506200189f5650505b949350505050565b620018b76200133763ffffffff16565b1515620018c45760006000fd5b620018d581620018da63ffffffff16565b5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515620019185760006000fd5b8073ffffffffffffffffffffffffffffffffffffffff16600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b826003909060030160049004810192821562001a7e5791602002820160005b8382111562001a4657835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509260200192600801602081600701049283019260010302620019f8565b801562001a7c5782816101000a81549067ffffffffffffffff021916905560080160208160070104928301926001030262001a46565b505b50905062001a8d919062001ac8565b5090565b6040518060600160405280600390602082028038833980820191505090505090565b5060009055565b610dab8062001b0883390190565b62001b04919062001ad4565b8082111562001b0057600081816101000a81549067ffffffffffffffff02191690555060010162001ad4565b5090565b9056fe608060405260405162000dab38038062000dab833981810160405260608110156100295760006000fd5b8101908080519060200190929190805190602001909291908051604051939291908464010000000082111561005e5760006000fd5b838201915060208201858111156100755760006000fd5b82518660018202830111640100000000821117156100935760006000fd5b8083526020830192505050908051906020019080838360005b838110156100c85780820151818401525b6020810190506100ac565b50505050905090810190601f1680156100f55780820380516001836020036101000a031916815260200191505b506040526020015050505b82815b604051808062000d4d6023913960230190506040518091039020600019167f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360001b6000191614151561015257fe5b610161826102bc60201b60201c565b6000815111156102335760008273ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b6020831015156101bb57805182525b602082019150602081019050602083039250610195565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461021b576040519150601f19603f3d011682016040523d82523d6000602084013e610220565b606091505b505090508015156102315760006000fd5b505b5b505060405180807f6f72672e7a657070656c696e6f732e70726f78792e61646d696e000000000000815260200150601a0190506040518091039020600019167f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b600019161415156102a457fe5b6102b38261035760201b60201c565b5b5050506103a1565b6102cf8161038760201b6108aa1760201c565b1515610327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b81526020018062000d70603b913960400191505060405180910390fd5b60007f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360001b9050818155505b50565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b9050818155505b50565b60006000823b90506000811191505061039c56505b919050565b61099c80620003b16000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100605780634f1ef286146100b35780635c60da1b146101525780638f283970146101aa578063f851a440146101fd5761004e565b5b61005d61025563ffffffff16565b5b005b34801561006d5760006000fd5b506100b1600480360360208110156100855760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610282565b005b610150600480360360408110156100ca5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156101085760006000fd5b82018360208201111561011b5760006000fd5b8035906020019184600183028401116401000000008311171561013e5760006000fd5b909192939090919293905050506102eb565b005b34801561015f5760006000fd5b506101686103d8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101b75760006000fd5b506101fb600480360360208110156101cf5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610448565b005b34801561020a5760006000fd5b506102136105dd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61026361064d63ffffffff16565b61027f6102746106f263ffffffff16565b61072563ffffffff16565b5b565b61029061075863ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102d8576102d28161078b63ffffffff16565b5b6102e7565b6102e661025563ffffffff16565b5b5b50565b6102f961075863ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156103c35761033b8361078b63ffffffff16565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051808383808284378083019250505092505050600060405180830381855af49150503d80600081146103a6576040519150601f19603f3d011682016040523d82523d6000602084013e6103ab565b606091505b505090508015156103bc5760006000fd5b505b6103d2565b6103d161025563ffffffff16565b5b5b505050565b60006103e861075863ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610435576104296106f263ffffffff16565b9050610430565b610444565b61044361025563ffffffff16565b5b5b90565b61045661075863ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156105ca57600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806108f76036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61054061075863ffffffff16565b82604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a16105c4816107e163ffffffff16565b5b6105d9565b6105d861025563ffffffff16565b5b5b50565b60006105ed61075863ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561063a5761062e61075863ffffffff16565b9050610635565b610649565b61064861025563ffffffff16565b5b5b90565b61065b61075863ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515156106e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806108c56032913960400191505060405180910390fd5b6106ef61081163ffffffff16565b5b565b600060007f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360001b905080549150505b90565b36600060003760006000366000845af43d600060003e806000811461074d573d6000f3610752565b3d6000fd5b50505b50565b600060007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b905080549150505b90565b61079a8161081463ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25b50565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b9050818155505b50565b5b565b610823816108aa63ffffffff16565b151561087a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b81526020018061092d603b913960400191505060405180910390fd5b60007f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360001b9050818155505b50565b60006000823b9050600081119150506108bf56505b91905056fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a265627a7a7231582063dff6c7117c1889bed5b7d0a6e4d2543d028f257671165037cd5be80dc72bf864736f6c634300050b00326f72672e7a657070656c696e6f732e70726f78792e696d706c656d656e746174696f6e43616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373546865207265717565737465642076657273696f6e206d757374206265207265676973746572656420696e2074686520676976656e207061636b616765a265627a7a72315820aa4956c4a1bd1de8482136397844eefb5391e2debb4df60135389a18272266d464736f6c634300050b0032","deployedBytecode":"0x608060405260043610620000a35760003560e01c80638da5cb5b11620000615780638da5cb5b146200061c5780638f32d59b1462000677578063ad358d9914620006aa578063cd3e318a1462000782578063f2fde38b14620009ed57620000a3565b806327a0d66914620000a957806350cadc851462000262578063715018a6146200037a57806371eb64cc146200039557806387c6048314620004d257620000a3565b60006000fd5b348015620000b75760006000fd5b506200022060048036036040811015620000d15760006000fd5b8101908080359060200190640100000000811115620000f05760006000fd5b820183602082011115620001045760006000fd5b80359060200191846001830284011164010000000083111715620001285760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929080359060200190640100000000811115620001915760006000fd5b820183602082011115620001a55760006000fd5b80359060200191846001830284011164010000000083111715620001c95760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062000a44565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620002705760006000fd5b5062000338600480360360208110156200028a5760006000fd5b8101908080359060200190640100000000811115620002a95760006000fd5b820183602082011115620002bd5760006000fd5b80359060200191846001830284011164010000000083111715620002e15760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062000ba7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620003885760006000fd5b506200039362000da7565b005b348015620003a35760006000fd5b50620004d0600480360360a0811015620003bd5760006000fd5b8101908080359060200190640100000000811115620003dc5760006000fd5b820183602082011115620003f05760006000fd5b80359060200191846001830284011164010000000083111715620004145760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f82011690508083019250505050505090909192909091929050505062000e87565b005b348015620004e05760006000fd5b50620005a860048036036020811015620004fa5760006000fd5b8101908080359060200190640100000000811115620005195760006000fd5b8201836020820111156200052d5760006000fd5b80359060200191846001830284011164010000000083111715620005515760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290505050620011d1565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600360200280838360005b83811015620006085780820151818401525b602081019050620005ea565b505050509050019250505060405180910390f35b3480156200062a5760006000fd5b506200063562001307565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620006855760006000fd5b506200069062001337565b604051808215151515815260200191505060405180910390f35b348015620006b85760006000fd5b506200078060048036036020811015620006d25760006000fd5b8101908080359060200190640100000000811115620006f15760006000fd5b820183602082011115620007055760006000fd5b80359060200191846001830284011164010000000083111715620007295760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062001395565b005b620009ab600480360360808110156200079b5760006000fd5b8101908080359060200190640100000000811115620007ba5760006000fd5b820183602082011115620007ce5760006000fd5b80359060200191846001830284011164010000000083111715620007f25760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290803590602001906401000000008111156200085b5760006000fd5b8201836020820111156200086f5760006000fd5b80359060200191846001830284011164010000000083111715620008935760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156200091c5760006000fd5b820183602082011115620009305760006000fd5b80359060200191846001830284011164010000000083111715620009545760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090909192909091929050505062001709565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620009fb5760006000fd5b5062000a426004803603602081101562000a155760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050620018a7565b005b6000600062000a598462000ba763ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000a9c57600091505062000ba1565b8073ffffffffffffffffffffffffffffffffffffffff16636b683896846040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000b0b5780820151818401525b60208101905062000aed565b50505050905090810190601f16801562000b395780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801562000b585760006000fd5b505afa15801562000b6e573d600060003e3d6000fd5b505050506040513d602081101562000b865760006000fd5b810190808051906020019092919050505091505062000ba156505b92915050565b600060006001600050836040518082805190602001908083835b60208310151562000be957805182525b60208201915060208101905060208303925062000bc1565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000509050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141562000c8657600091505062000da2565b8060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631df40eaa826001016000506040518263ffffffff1660e01b815260040180826003801562000d3a576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff168152602001906008019060208260070104928301926001038202915080841162000cf45790505b505091505060206040518083038186803b15801562000d595760006000fd5b505afa15801562000d6f573d600060003e3d6000fd5b505050506040513d602081101562000d875760006000fd5b810190808051906020019092919050505091505062000da256505b919050565b62000db76200133763ffffffff16565b151562000dc45760006000fd5b600073ffffffffffffffffffffffffffffffffffffffff16600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b565b62000e976200133763ffffffff16565b151562000ea45760006000fd5b8173ffffffffffffffffffffffffffffffffffffffff166335ce4016826040518263ffffffff1660e01b81526004018082600360200280838360005b8381101562000efe5780820151818401525b60208101905062000ee0565b5050505090500191505060206040518083038186803b15801562000f225760006000fd5b505afa15801562000f38573d600060003e3d6000fd5b505050506040513d602081101562000f505760006000fd5b8101908080519060200190929190505050151562000fba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180620028b3603d913960400191505060405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001506001600050846040518082805190602001908083835b6020831015156200102657805182525b60208201915060208101905060208303925062000ffe565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060005060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101600050906003620010bf929190620019d9565b509050507f4ca1964bc3cd347906bc558f77fdd636486951cf12238150178be72a4fbb6fab83838360405180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600360200280838360005b838110156200114b5780820151818401525b6020810190506200112d565b50505050905001828103825285818151815260200191508051906020019080838360005b838110156200118d5780820151818401525b6020810190506200116f565b50505050905090810190601f168015620011bb5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15b5b505050565b6000620011dd62001a91565b60006001600050846040518082805190602001908083835b6020831015156200121d57805182525b602082019150602081019050602083039250620011f5565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060005090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160005080600380602002604051908101604052809291908260038015620012ef576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff1681526020019060080190602082600701049283019260010382029150808411620012a95790505b5050505050905092509250506200130256505b915091565b6000600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905062001334565b90565b6000600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905062001392565b90565b620013a56200133763ffffffff16565b1515620013b25760006000fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600050826040518082805190602001908083835b6020831015156200140857805182525b602082019150602081019050602083039250620013e0565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515620014f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5061636b61676520746f20756e736574206e6f7420666f756e6400000000000081526020015060200191505060405180910390fd5b6001600050816040518082805190602001908083835b6020831015156200153057805182525b60208201915060208101905060208303925062001508565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006200159e919062001ab3565b50507f4ca1964bc3cd347906bc558f77fdd636486951cf12238150178be72a4fbb6fab8160006040518060600160405280600067ffffffffffffffff1667ffffffffffffffff168152602001600067ffffffffffffffff1667ffffffffffffffff168152602001600067ffffffffffffffff1667ffffffffffffffff1681526020015060405180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600360200280838360005b83811015620016855780820151818401525b60208101905062001667565b50505050905001828103825285818151815260200191508051906020019080838360005b83811015620016c75780820151818401525b602081019050620016a9565b50505050905090810190601f168015620016f55780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15b5b50565b600060006200171f868662000a4463ffffffff16565b9050600034828686604051620017359062001aba565b808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015620017d95780820151818401525b602081019050620017bb565b50505050905090810190601f168015620018075780820380516001836020036101000a031916815260200191505b509450505050506040518091039082f0801580156200182b573d600060003e3d6000fd5b50905090507efffc2da0b561cae30d9826d37709e9421c4725faebc226cbbb7ef5fc5e734981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a180925050506200189f5650505b949350505050565b620018b76200133763ffffffff16565b1515620018c45760006000fd5b620018d581620018da63ffffffff16565b5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515620019185760006000fd5b8073ffffffffffffffffffffffffffffffffffffffff16600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b826003909060030160049004810192821562001a7e5791602002820160005b8382111562001a4657835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509260200192600801602081600701049283019260010302620019f8565b801562001a7c5782816101000a81549067ffffffffffffffff021916905560080160208160070104928301926001030262001a46565b505b50905062001a8d919062001ac8565b5090565b6040518060600160405280600390602082028038833980820191505090505090565b5060009055565b610dab8062001b0883390190565b62001b04919062001ad4565b8082111562001b0057600081816101000a81549067ffffffffffffffff02191690555060010162001ad4565b5090565b9056fe608060405260405162000dab38038062000dab833981810160405260608110156100295760006000fd5b8101908080519060200190929190805190602001909291908051604051939291908464010000000082111561005e5760006000fd5b838201915060208201858111156100755760006000fd5b82518660018202830111640100000000821117156100935760006000fd5b8083526020830192505050908051906020019080838360005b838110156100c85780820151818401525b6020810190506100ac565b50505050905090810190601f1680156100f55780820380516001836020036101000a031916815260200191505b506040526020015050505b82815b604051808062000d4d6023913960230190506040518091039020600019167f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360001b6000191614151561015257fe5b610161826102bc60201b60201c565b6000815111156102335760008273ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b6020831015156101bb57805182525b602082019150602081019050602083039250610195565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461021b576040519150601f19603f3d011682016040523d82523d6000602084013e610220565b606091505b505090508015156102315760006000fd5b505b5b505060405180807f6f72672e7a657070656c696e6f732e70726f78792e61646d696e000000000000815260200150601a0190506040518091039020600019167f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b600019161415156102a457fe5b6102b38261035760201b60201c565b5b5050506103a1565b6102cf8161038760201b6108aa1760201c565b1515610327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b81526020018062000d70603b913960400191505060405180910390fd5b60007f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360001b9050818155505b50565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b9050818155505b50565b60006000823b90506000811191505061039c56505b919050565b61099c80620003b16000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100605780634f1ef286146100b35780635c60da1b146101525780638f283970146101aa578063f851a440146101fd5761004e565b5b61005d61025563ffffffff16565b5b005b34801561006d5760006000fd5b506100b1600480360360208110156100855760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610282565b005b610150600480360360408110156100ca5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156101085760006000fd5b82018360208201111561011b5760006000fd5b8035906020019184600183028401116401000000008311171561013e5760006000fd5b909192939090919293905050506102eb565b005b34801561015f5760006000fd5b506101686103d8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101b75760006000fd5b506101fb600480360360208110156101cf5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610448565b005b34801561020a5760006000fd5b506102136105dd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61026361064d63ffffffff16565b61027f6102746106f263ffffffff16565b61072563ffffffff16565b5b565b61029061075863ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102d8576102d28161078b63ffffffff16565b5b6102e7565b6102e661025563ffffffff16565b5b5b50565b6102f961075863ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156103c35761033b8361078b63ffffffff16565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051808383808284378083019250505092505050600060405180830381855af49150503d80600081146103a6576040519150601f19603f3d011682016040523d82523d6000602084013e6103ab565b606091505b505090508015156103bc5760006000fd5b505b6103d2565b6103d161025563ffffffff16565b5b5b505050565b60006103e861075863ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610435576104296106f263ffffffff16565b9050610430565b610444565b61044361025563ffffffff16565b5b5b90565b61045661075863ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156105ca57600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806108f76036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61054061075863ffffffff16565b82604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a16105c4816107e163ffffffff16565b5b6105d9565b6105d861025563ffffffff16565b5b5b50565b60006105ed61075863ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561063a5761062e61075863ffffffff16565b9050610635565b610649565b61064861025563ffffffff16565b5b5b90565b61065b61075863ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515156106e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806108c56032913960400191505060405180910390fd5b6106ef61081163ffffffff16565b5b565b600060007f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360001b905080549150505b90565b36600060003760006000366000845af43d600060003e806000811461074d573d6000f3610752565b3d6000fd5b50505b50565b600060007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b905080549150505b90565b61079a8161081463ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25b50565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60001b9050818155505b50565b5b565b610823816108aa63ffffffff16565b151561087a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b81526020018061092d603b913960400191505060405180910390fd5b60007f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360001b9050818155505b50565b60006000823b9050600081119150506108bf56505b91905056fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a265627a7a7231582063dff6c7117c1889bed5b7d0a6e4d2543d028f257671165037cd5be80dc72bf864736f6c634300050b00326f72672e7a657070656c696e6f732e70726f78792e696d706c656d656e746174696f6e43616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373546865207265717565737465642076657273696f6e206d757374206265207265676973746572656420696e2074686520676976656e207061636b616765a265627a7a72315820aa4956c4a1bd1de8482136397844eefb5391e2debb4df60135389a18272266d464736f6c634300050b0032","compiler":{"name":"solc","version":"0.5.11+commit.c082d0b4.Emscripten.clang","optimizer":{},"evmVersion":"constantinople"}}
