{
  "contractName": "AppRegistry",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "baseURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_previous",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_entry",
          "type": "address"
        }
      ],
      "name": "isRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "master",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "previous",
      "outputs": [
        {
          "internalType": "contract IRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "proxyCode",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "proxyCodeHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_baseURI",
          "type": "string"
        }
      ],
      "name": "setBaseURI",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_ens",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        }
      ],
      "name": "setName",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenOfOwnerByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_appOwner",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "_appName",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_appType",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "_appMultiaddr",
          "type": "bytes"
        },
        {
          "internalType": "bytes32",
          "name": "_appChecksum",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_appMREnclave",
          "type": "bytes"
        }
      ],
      "name": "createApp",
      "outputs": [
        {
          "internalType": "contract App",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_appOwner",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "_appName",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_appType",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "_appMultiaddr",
          "type": "bytes"
        },
        {
          "internalType": "bytes32",
          "name": "_appChecksum",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_appMREnclave",
          "type": "bytes"
        }
      ],
      "name": "predictApp",
      "outputs": [
        {
          "internalType": "contract App",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.6+commit.6c089d02\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_appOwner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_appName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_appType\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_appMultiaddr\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_appChecksum\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_appMREnclave\",\"type\":\"bytes\"}],\"name\":\"createApp\",\"outputs\":[{\"internalType\":\"contract App\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_previous\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_entry\",\"type\":\"address\"}],\"name\":\"isRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"master\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_appOwner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_appName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_appType\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_appMultiaddr\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_appChecksum\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_appMREnclave\",\"type\":\"bytes\"}],\"name\":\"predictApp\",\"outputs\":[{\"internalType\":\"contract App\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"previous\",\"outputs\":[{\"internalType\":\"contract IRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxyCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxyCodeHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_baseURI\",\"type\":\"string\"}],\"name\":\"setBaseURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ens\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"approve(address,uint256)\":{\"details\":\"Approves another address to transfer the given token ID The zero address indicates there is no approved address. There can only be one approved address per token at a given time. Can only be called by the token owner or an approved operator.\",\"params\":{\"to\":\"address to be approved for the given token ID\",\"tokenId\":\"uint256 ID of the token to be approved\"}},\"balanceOf(address)\":{\"details\":\"Gets the balance of the specified address.\",\"params\":{\"owner\":\"address to query the balance of\"},\"returns\":{\"_0\":\"uint256 representing the amount owned by the passed address\"}},\"baseURI()\":{\"details\":\"Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID.\"},\"getApproved(uint256)\":{\"details\":\"Gets the approved address for a token ID, or zero if no address set Reverts if the token ID does not exist.\",\"params\":{\"tokenId\":\"uint256 ID of the token to query the approval of\"},\"returns\":{\"_0\":\"address currently approved for the given token ID\"}},\"isApprovedForAll(address,address)\":{\"details\":\"Tells whether an operator is approved by a given owner.\",\"params\":{\"operator\":\"operator address which you want to query the approval of\",\"owner\":\"owner address which you want to query the approval of\"},\"returns\":{\"_0\":\"bool whether the given operator is approved by the given owner\"}},\"name()\":{\"details\":\"Gets the token name.\",\"returns\":{\"_0\":\"string representing the token name\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"Gets the owner of the specified token ID.\",\"params\":{\"tokenId\":\"uint256 ID of the token to query the owner of\"},\"returns\":{\"_0\":\"address currently marked as the owner of the given token ID\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers the ownership of a given token ID to another address If the target address is a contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer, and return the magic value `bytes4(keccak256(\\\"onERC721Received(address,address,uint256,bytes)\\\"))`; otherwise, the transfer is reverted. Requires the msg.sender to be the owner, approved, or operator\",\"params\":{\"from\":\"current owner of the token\",\"to\":\"address to receive the ownership of the given token ID\",\"tokenId\":\"uint256 ID of the token to be transferred\"}},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers the ownership of a given token ID to another address If the target address is a contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer, and return the magic value `bytes4(keccak256(\\\"onERC721Received(address,address,uint256,bytes)\\\"))`; otherwise, the transfer is reverted. Requires the _msgSender() to be the owner, approved, or operator\",\"params\":{\"_data\":\"bytes data to send along with a safe transfer check\",\"from\":\"current owner of the token\",\"to\":\"address to receive the ownership of the given token ID\",\"tokenId\":\"uint256 ID of the token to be transferred\"}},\"setApprovalForAll(address,bool)\":{\"details\":\"Sets or unsets the approval of a given operator An operator is allowed to transfer all tokens of the sender on their behalf.\",\"params\":{\"approved\":\"representing the status of the approval to be set\",\"operator\":\"operator address to set the approval\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.     * Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"symbol()\":{\"details\":\"Gets the token symbol.\",\"returns\":{\"_0\":\"string representing the token symbol\"}},\"tokenByIndex(uint256)\":{\"details\":\"Gets the token ID at a given index of all the tokens in this contract Reverts if the index is greater or equal to the total number of tokens.\",\"params\":{\"index\":\"uint256 representing the index to be accessed of the tokens list\"},\"returns\":{\"_0\":\"uint256 token ID at the given index of the tokens list\"}},\"tokenOfOwnerByIndex(address,uint256)\":{\"details\":\"Gets the token ID at a given index of the tokens list of the requested owner.\",\"params\":{\"index\":\"uint256 representing the index to be accessed of the requested tokens list\",\"owner\":\"address owning the tokens list to be accessed\"},\"returns\":{\"_0\":\"uint256 token ID at the given index of the tokens list owned by the requested address\"}},\"tokenURI(uint256)\":{\"details\":\"Returns the URI for a given token ID. May return an empty string.     * If a base URI is set (via {_setBaseURI}), it is added as a prefix to the token's own URI (via {_setTokenURI}).     * If there is a base URI but no token URI, the token's ID will be used as its URI when appending it to the base URI. This pattern for autogenerated token URIs can lead to large gas savings.     * .Examples |=== |`_setBaseURI()` |`_setTokenURI()` |`tokenURI()` | \\\"\\\" | \\\"\\\" | \\\"\\\" | \\\"\\\" | \\\"token.uri/123\\\" | \\\"token.uri/123\\\" | \\\"token.uri/\\\" | \\\"123\\\" | \\\"token.uri/123\\\" | \\\"token.uri/\\\" | \\\"\\\" | \\\"token.uri/<tokenId>\\\" |===     * Requirements:     * - `tokenId` must exist.\"},\"totalSupply()\":{\"details\":\"Gets the total amount of tokens stored by the contract.\",\"returns\":{\"_0\":\"uint256 representing the total amount of tokens\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers the ownership of a given token ID to another address. Usage of this method is discouraged, use {safeTransferFrom} whenever possible. Requires the msg.sender to be the owner, approved, or operator.\",\"params\":{\"from\":\"current owner of the token\",\"to\":\"address to receive the ownership of the given token ID\",\"tokenId\":\"uint256 ID of the token to be transferred\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}}},\"userdoc\":{\"methods\":{\"constructor\":\"Constructor\"}}},\"settings\":{\"compilationTarget\":{\"/home/amxx/Work/iExec/code/PoCo-dev/contracts/registries/apps/AppRegistry.sol\":\"AppRegistry\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/amxx/Work/iExec/code/PoCo-dev/contracts/registries/IRegistry.sol\":{\"keccak256\":\"0x22cd93dce3ec7f424ca689cdd4d5aa6a7d0d5ff81133c8530c5397f206100b84\",\"urls\":[\"bzz-raw://3a12bb04edc05201d7b0f00d7a401152daaa0ee2fd794a848fd760290edcfffa\",\"dweb:/ipfs/QmXYRdrHLLcutF1JLcKSKiCRMxo5X4713BfXFYM4gzrXWc\"]},\"/home/amxx/Work/iExec/code/PoCo-dev/contracts/registries/Registry.sol\":{\"keccak256\":\"0xdf594884fc674966628ebbb2b88bc470c89881fdad988812c815bf371ce8b387\",\"urls\":[\"bzz-raw://2386446324af596f08c0a09a2a9047a1d24187ae19c6d07ad727dfa72ff597c9\",\"dweb:/ipfs/QmYmN8jTjiLmcEKXxFPCouubca8AU92agFt4zMeNpkiLey\"]},\"/home/amxx/Work/iExec/code/PoCo-dev/contracts/registries/RegistryEntry.sol\":{\"keccak256\":\"0xc5b8b64b19a7f26bdeda8dce637b65c16388adfdc6a77e02455c74722908ed8b\",\"urls\":[\"bzz-raw://a25ccdaeff6f497a58b6b5fda0f82a53243e51be2f59a8ebd4f3f294a95c9f03\",\"dweb:/ipfs/QmWNqwVbTmdVjYYuEaG32HR8P2fDWbTD6YDGX2B623976a\"]},\"/home/amxx/Work/iExec/code/PoCo-dev/contracts/registries/apps/App.sol\":{\"keccak256\":\"0x2fda8eaa946a91bec7b6a6e8b6e39d59dfbf02da48a3390924ccddf6c878765e\",\"urls\":[\"bzz-raw://3f0be3037a792a5feaa5c82185e8c1098f3ceeca14c8f7c733b3a79262da9680\",\"dweb:/ipfs/QmdStYN91aJSXz52YeYRczjaxmEpYoFHZjRd2Rktzu1SEN\"]},\"/home/amxx/Work/iExec/code/PoCo-dev/contracts/registries/apps/AppRegistry.sol\":{\"keccak256\":\"0x4f5bdc3eaf0e3095066d5564b9b125c3b0c2b9404b985606e0ff3a86f232ee07\",\"urls\":[\"bzz-raw://714c43b3e4b5b398f2c8412a77b2d9db7597df714157ef569e46cffd64fb2569\",\"dweb:/ipfs/QmZkXA1QkhcbRG26rN2hoL6RUyZrBN1guZV7mieJTZ41Y7\"]},\"@ensdomains/ens/contracts/ENS.sol\":{\"keccak256\":\"0x10b88673d8c180cd62523be4fec7607c65594eb4f0c561fa0fbc0784422b4871\",\"urls\":[\"bzz-raw://b3de1882a4a1a1b13c27ee6dc04cc58c34ac392c80cad507de2cdfa8c02712fe\",\"dweb:/ipfs/QmeKcaBF8QdJjXiqFrPJkAtK3et5kUL8XJrnHjwhAThRMT\"]},\"@iexec/solidity/contracts/ENStools/ENSReverseRegistration.sol\":{\"keccak256\":\"0xf3f46b28b19d9132ae78c2a43263c06a73cb042ce25175b732e0c1a41c5bbe5a\",\"urls\":[\"bzz-raw://7ca85a78f3f3eafbef6d72c5cd0c35e5b827c797af786cd170659499a0a2c3be\",\"dweb:/ipfs/QmbHZ8zFsiE1PRh7FKt1pt5jR8F6B8HiZ32Mgc8Py3qCUu\"]},\"@iexec/solidity/contracts/Upgradeability/BaseUpgradeabilityProxy.sol\":{\"keccak256\":\"0x47ec56a1226ecf04d49aa82f768814923c1957b69f7fc9e7e470885c75b5a2c6\",\"urls\":[\"bzz-raw://4eae82be03a247a27a2948ed12d5a826dea977f4b5528830c19d9cf4c23dcd53\",\"dweb:/ipfs/Qmb9HtnohAMvjb7vYnXaT3AnQd9p9sLsThnyLnXVzz1umq\"]},\"@iexec/solidity/contracts/Upgradeability/InitializableUpgradeabilityProxy.sol\":{\"keccak256\":\"0xe1bf07e5d913bd04484305a3fb0cc576f6b5d8e4fc0406bf7c9a8b6b2ed766e5\",\"urls\":[\"bzz-raw://b42f6dff696ceadeb44a02aae3049e603984c18af8d94f33fb6544a8b279179c\",\"dweb:/ipfs/QmRWTaRHCGZhKZFKrVAJwXukXiCZcezrVhJJ28H2qBbai7\"]},\"@iexec/solidity/contracts/Upgradeability/Proxy.sol\":{\"keccak256\":\"0xd89f285d80cfeff0efc87f11dbc024a587da3bba142a06695cbac7e4050e9302\",\"urls\":[\"bzz-raw://9c8323ec7efc9fde6c1529f1070c3f3406adb5f8836b17221530d8f0110fe3f4\",\"dweb:/ipfs/QmURRsX9L2gZ83aMULtY1EuRMJExHhFYErCbkxE5CNkAzE\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x0de74dfa6b37943c1b834cbd8fb7a8d052e5ff80c7adb33692102dd6cd2985e9\",\"urls\":[\"bzz-raw://9d2d827fcf4a838f5821732c0acd6a40d21c2a5a2cfe2563feec91465f47bb60\",\"dweb:/ipfs/Qmex3wMKf5Sghbfvr288RUg1kP2uAyTMf11w83WbMbpQQc\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0x9a8c691b81a4a48adbbd5b010faa56a168c189e711495c16347d93b60b805f82\",\"urls\":[\"bzz-raw://d951d626ed7bfe1a2d7a6bd4af315ff8691929bd567594d6ab53599fe9e17e4e\",\"dweb:/ipfs/QmYkGeowpa6Bjr9aaDirWdDo7hSfShzzZhanKC4nTfRhLj\"]},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0x98aa1380fd49a255d6cbea58558ea76bff35c59b218671fde8842907b44e7390\",\"urls\":[\"bzz-raw://613eaff66d4c270ddd87448c06267b6e043ef8c8223cb39d8767bc9daa9cb1ec\",\"dweb:/ipfs/Qmcg56orudv25ghmnZCxN37HwNKCXmTTDxj5cyoYYnvHTg\"]},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0x9175561c374ec1fc33045e5dfdde2057e63e00debf432875f9e1e3395d99c149\",\"urls\":[\"bzz-raw://b0167043c1938b56904deaa481a73041aa4a9e054c60db0b0dfbebfe7869c06a\",\"dweb:/ipfs/QmUoYjhymBr6WUpExKgRvKxXD5fcdpQEe1o9ResKZu6CC5\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x04d34b3cd5677bea25f8dfceb6dec0eaa071d4d4b789a43f13fe0c415ba4c296\",\"urls\":[\"bzz-raw://e7e8b526a6839e5ba14f0d23a830387fec47f7043ce01d42c9f285b709a9d080\",\"dweb:/ipfs/QmXmhhFmX5gcAvVzNiDPAGA35iHMPNaYtQkACswRHBVTNw\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x67a43d3926e72576c96ebf0e6360c979a8cc04f25e4b0ca40c221547d8903ba4\",\"urls\":[\"bzz-raw://77c6f48115c491411f0e27f6b70e2e524b1b57c66e74bd7f1974a31a448e2540\",\"dweb:/ipfs/QmPZCizouS9PVJ1dVf8zqTjHyEo5cSa1ZmPCQpk52TgrmV\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x734b5bedb78074a59bca6aff9e5a1801c9c7e9c5314daf32e14857161fb36932\",\"urls\":[\"bzz-raw://4574e71185f6693eb5cdf7a5126fba97caf0ec0366b08290dd361af44b3414d3\",\"dweb:/ipfs/QmTPBh1R3EU973H7h6D1kQ1XBA1oX2QdSHZACyytWUYKsn\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol\":{\"keccak256\":\"0xf81dbd00ad4a1e4795df72759e33872c2599ea6c060be5898ed5d6fcd8ee9a11\",\"urls\":[\"bzz-raw://44dfcc25314c5ed29bc069c4746f87d98bb30a8dbc1a9bdeb797c2a530b9b9c5\",\"dweb:/ipfs/QmbRc5bKDobjE6zamLUy6Sh5HKd6XtNAsfBJzgZuQB3jpv\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol\":{\"keccak256\":\"0xa17f4147965ceccd9f2017b14fcf8ef142346ec69c7e0424fd5c99f5ffeed8fa\",\"urls\":[\"bzz-raw://25315aea456015e8a2bc2b5badde793d1ae16d67d09df50ecb90a2af13674b92\",\"dweb:/ipfs/QmTujwcp5f1LioDNdRMfsXs2MsCWu2UeijhEg4VnDbzZmk\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0x0c25ff00a747f1df6cb5e5c103adb98334df7e9561b0d46079454131c139bff9\",\"urls\":[\"bzz-raw://9417ce94829309329fa0f0dc50089696bc55f9f675c4b2ffcb31f960fe706250\",\"dweb:/ipfs/QmdckiAmnW2uhXK2V2enu7bEbqiMR6hzMD1ytGH43pKLhE\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x5f7da58ee3d9faa9b8999a93d49c8ff978f1afc88ae9bcfc6f9cbb44da011c2b\",\"urls\":[\"bzz-raw://4f089d954b3ecaa26949412fe63e9a184b056562c6c13dd4a0529a5d9a2e685a\",\"dweb:/ipfs/QmVK5iCNAMcEJQxT59bsC5E53JQASDQPU6khHox3d5ZXCn\"]},\"@openzeppelin/contracts/utils/Create2.sol\":{\"keccak256\":\"0x66d1ed2a353be8d2492833a185c53a8f1de8d8fa575a201e9825cf334d79659a\",\"urls\":[\"bzz-raw://a2e9b79e9cf5b398cd29b30df860a6521eefadd9882a346c423afbee5aee606e\",\"dweb:/ipfs/QmUq7gfqR5x1DaMpRKkWwmLMGLPzqUQhqhFEJ2vcgvFraH\"]},\"@openzeppelin/contracts/utils/EnumerableMap.sol\":{\"keccak256\":\"0xfd5cf8319cb84ca04ea407d6fba686d53ad7f5d2bf476f41678f5a751d12a7ea\",\"urls\":[\"bzz-raw://45b75b553c4a9053429609b1c3db481f1728ca00448f01acc4065249bbf87adc\",\"dweb:/ipfs/QmRZH6QM32mJn1GZCAPXUQtBz65H4kk6DsGQbGNo4ZNPy9\"]},\"@openzeppelin/contracts/utils/EnumerableSet.sol\":{\"keccak256\":\"0x7f6401708b61f575b497aa7c8118ca9d70348643c83c26e70d9b643edf1a95c1\",\"urls\":[\"bzz-raw://b020d65f592c1715bc3d5799ad835cd975ef7d314f340f27603fb99ad86a0427\",\"dweb:/ipfs/QmQoGZmzE5aDTMGJM4BW77eraerfTSV9Rs8wykpQ42i1in\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0xd1d78b1c8534fbcf8fdc8fbfec9133df142ef8cae9ae820929dfe6d80d2c790a\",\"urls\":[\"bzz-raw://193a827fbe83fa83c4cabb172dc438dd45c50253858a1f2bf56e8f9a2d548386\",\"dweb:/ipfs/QmbWBHwHv7CyHSZY6jxnaDiHWGEEyVb8LeGdRpWXUjaiBr\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b506040516200002090620002f1565b604051809103906000f0801580156200003d573d6000803e3d6000fd5b50604080518082018252601f81527f6945786563204170706c69636174696f6e2052656769737472792028563529006020808301919091528251808401909352600b83526a694578656341707073563560a81b90830152908181620000b26301ffc9a760e01b6001600160e01b036200026716565b8151620000c7906006906020850190620002ff565b508051620000dd906007906020840190620002ff565b50620000f96380ac58cd60e01b6001600160e01b036200026716565b62000114635b5e139f60e01b6001600160e01b036200026716565b6200012f63780e9d6360e01b6001600160e01b036200026716565b5060009050620001476001600160e01b03620002ec16565b600a80546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b80546001600160a01b0319166001600160a01b038516179055604051620001c16020820162000384565b601f1982820381018352601f909101166040528051620001eb91600c9160209190910190620002ff565b50600c60405180828054600181600116156101000203166002900480156200024d5780601f106200022a5761010080835404028352918201916200024d565b820191906000526020600020905b81548152906001019060200180831162000238575b5050604051908190039020600d5550620003af9350505050565b6001600160e01b03198082161415620002c7576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b335b90565b610a39806200332783390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200034257805160ff191683800117855562000372565b8280016001018555821562000372579182015b828111156200037257825182559160200191906001019062000355565b506200038092915062000392565b5090565b6103cd8062003d6083390190565b620002ee91905b8082111562000380576000815560010162000399565b612f6880620003bf6000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80636fa59bbc1161010f578063c3c5a547116100a2578063e985e9c511610071578063e985e9c51461097e578063ee97f7f3146109ac578063eee39111146109b4578063f2fde38b146109bc576101e5565b8063c3c5a547146107a3578063c4d66de8146107c9578063c87b56dd146107ef578063e92118ed1461080c576101e5565b80638da5cb5b116100de5780638da5cb5b146106a157806395d89b41146106a9578063a22cb465146106b1578063b88d4fde146106df576101e5565b80636fa59bbc1461066357806370a082311461066b578063715018a6146106915780637c2b2e7114610699576101e5565b80632f745c59116101875780634f6ccce7116101565780634f6ccce7146105b357806355f804b3146105d05780636352211e1461063e5780636c0360eb1461065b576101e5565b80632f745c59146103615780633121db1c1461038d5780633f7868ff1461040b57806342842e0e1461057d576101e5565b8063095ea7b3116101c3578063095ea7b3146102db578063158ef93e1461030957806318160ddd1461031157806323b872dd1461032b576101e5565b806301ffc9a7146101ea57806306fdde0314610225578063081812fc146102a2575b600080fd5b6102116004803603602081101561020057600080fd5b50356001600160e01b0319166109e2565b604080519115158252519081900360200190f35b61022d610a05565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026757818101518382015260200161024f565b50505050905090810190601f1680156102945780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102bf600480360360208110156102b857600080fd5b5035610a9c565b604080516001600160a01b039092168252519081900360200190f35b610307600480360360408110156102f157600080fd5b506001600160a01b038135169060200135610afe565b005b610211610bd9565b610319610be9565b60408051918252519081900360200190f35b6103076004803603606081101561034157600080fd5b506001600160a01b03813581169160208101359091169060400135610bfa565b6103196004803603604081101561037757600080fd5b506001600160a01b038135169060200135610c51565b610307600480360360408110156103a357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156103cd57600080fd5b8201836020820111156103df57600080fd5b803590602001918460018302840111600160201b8311171561040057600080fd5b509092509050610c82565b6102bf600480360360c081101561042157600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561044b57600080fd5b82018360208201111561045d57600080fd5b803590602001918460018302840111600160201b8311171561047e57600080fd5b919390929091602081019035600160201b81111561049b57600080fd5b8201836020820111156104ad57600080fd5b803590602001918460018302840111600160201b831117156104ce57600080fd5b919390929091602081019035600160201b8111156104eb57600080fd5b8201836020820111156104fd57600080fd5b803590602001918460018302840111600160201b8311171561051e57600080fd5b91939092823592604081019060200135600160201b81111561053f57600080fd5b82018360208201111561055157600080fd5b803590602001918460018302840111600160201b8311171561057257600080fd5b509092509050610d1a565b6103076004803603606081101561059357600080fd5b506001600160a01b03813581169160208101359091169060400135610e22565b610319600480360360208110156105c957600080fd5b5035610e3d565b610307600480360360208110156105e657600080fd5b810190602081018135600160201b81111561060057600080fd5b82018360208201111561061257600080fd5b803590602001918460018302840111600160201b8311171561063357600080fd5b509092509050610e59565b6102bf6004803603602081101561065457600080fd5b5035610ef4565b61022d610f22565b61022d610f83565b6103196004803603602081101561068157600080fd5b50356001600160a01b0316611011565b610307611079565b6102bf61111b565b6102bf61112a565b61022d611139565b610307600480360360408110156106c757600080fd5b506001600160a01b038135169060200135151561119a565b610307600480360360808110156106f557600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561072f57600080fd5b82018360208201111561074157600080fd5b803590602001918460018302840111600160201b8311171561076257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061129f945050505050565b610211600480360360208110156107b957600080fd5b50356001600160a01b03166112fd565b610307600480360360208110156107df57600080fd5b50356001600160a01b03166113ab565b61022d6004803603602081101561080557600080fd5b503561144b565b6102bf600480360360c081101561082257600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561084c57600080fd5b82018360208201111561085e57600080fd5b803590602001918460018302840111600160201b8311171561087f57600080fd5b919390929091602081019035600160201b81111561089c57600080fd5b8201836020820111156108ae57600080fd5b803590602001918460018302840111600160201b831117156108cf57600080fd5b919390929091602081019035600160201b8111156108ec57600080fd5b8201836020820111156108fe57600080fd5b803590602001918460018302840111600160201b8311171561091f57600080fd5b91939092823592604081019060200135600160201b81111561094057600080fd5b82018360208201111561095257600080fd5b803590602001918460018302840111600160201b8311171561097357600080fd5b5090925090506116f2565b6102116004803603604081101561099457600080fd5b506001600160a01b03813581169160200135166117eb565b6102bf611819565b610319611828565b610307600480360360208110156109d257600080fd5b50356001600160a01b031661182e565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b60068054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a915780601f10610a6657610100808354040283529160200191610a91565b820191906000526020600020905b815481529060010190602001808311610a7457829003601f168201915b505050505090505b90565b6000610aa782611927565b610ae25760405162461bcd60e51b815260040180806020018281038252602c815260200180612e3d602c913960400191505060405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610b0982610ef4565b9050806001600160a01b0316836001600160a01b03161415610b5c5760405162461bcd60e51b8152600401808060200182810382526021815260200180612ee16021913960400191505060405180910390fd5b806001600160a01b0316610b6e61193a565b6001600160a01b03161480610b8f5750610b8f81610b8a61193a565b6117eb565b610bca5760405162461bcd60e51b8152600401808060200182810382526038815260200180612d906038913960400191505060405180910390fd5b610bd4838361193e565b505050565b600e54600160a01b900460ff1681565b6000610bf560026119ac565b905090565b610c0b610c0561193a565b826119b7565b610c465760405162461bcd60e51b8152600401808060200182810382526031815260200180612f026031913960400191505060405180910390fd5b610bd4838383611a5b565b6001600160a01b0382166000908152600160205260408120610c79908363ffffffff611bb916565b90505b92915050565b610c8a61193a565b600a546001600160a01b03908116911614610cda576040805162461bcd60e51b81526020600482018190526024820152600080516020612e69833981519152604482015290519081900360640190fd5b610bd48383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bc592505050565b6000610e138b610e0e8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8f018190048102820181019092528d815292508d91508c908190840183828082843760009201919091525050604080516020601f8d018190048102820181019092528b81528d935091508b908b9081908401838280828437600092019190915250611d2a92505050565b611f10565b9b9a5050505050505050505050565b610bd48383836040518060200160405280600081525061129f565b600080610e5160028463ffffffff61213a16565b509392505050565b610e6161193a565b600a546001600160a01b03908116911614610eb1576040805162461bcd60e51b81526020600482018190526024820152600080516020612e69833981519152604482015290519081900360640190fd5b610ef082828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061215692505050565b5050565b6000610c7c82604051806060016040528060298152602001612df2602991396002919063ffffffff61216916565b60098054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a915780601f10610a6657610100808354040283529160200191610a91565b600c805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110095780601f10610fde57610100808354040283529160200191611009565b820191906000526020600020905b815481529060010190602001808311610fec57829003601f168201915b505050505081565b60006001600160a01b0382166110585760405162461bcd60e51b815260040180806020018281038252602a815260200180612dc8602a913960400191505060405180910390fd5b6001600160a01b0382166000908152600160205260409020610c7c906119ac565b61108161193a565b600a546001600160a01b039081169116146110d1576040805162461bcd60e51b81526020600482018190526024820152600080516020612e69833981519152604482015290519081900360640190fd5b600a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600a80546001600160a01b0319169055565b600e546001600160a01b031681565b600a546001600160a01b031690565b60078054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a915780601f10610a6657610100808354040283529160200191610a91565b6111a261193a565b6001600160a01b0316826001600160a01b03161415611208576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b806005600061121561193a565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561125961193a565b60408051841515815290516001600160a01b0392909216917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319181900360200190a35050565b6112b06112aa61193a565b836119b7565b6112eb5760405162461bcd60e51b8152600401808060200182810382526031815260200180612f026031913960400191505060405180910390fd5b6112f784848484612180565b50505050565b6000611311826001600160a01b0316611927565b80610c7c5750600e546001600160a01b031615801590610c7c5750600e546040805163c3c5a54760e01b81526001600160a01b0385811660048301529151919092169163c3c5a547916024808301926020929190829003018186803b15801561137957600080fd5b505afa15801561138d573d6000803e3d6000fd5b505050506040513d60208110156113a357600080fd5b505192915050565b6113b361193a565b600a546001600160a01b03908116911614611403576040805162461bcd60e51b81526020600482018190526024820152600080516020612e69833981519152604482015290519081900360640190fd5b600e54600160a01b900460ff161561141a57600080fd5b600e8054600160a01b60ff60a01b19909116176001600160a01b0319166001600160a01b0392909216919091179055565b606061145682611927565b6114915760405162461bcd60e51b815260040180806020018281038252602f815260200180612eb2602f913960400191505060405180910390fd5b60008281526008602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156115265780601f106114fb57610100808354040283529160200191611526565b820191906000526020600020905b81548152906001019060200180831161150957829003601f168201915b50506009549394505050506002600019610100600184161502019091160461154f579050610a00565b8051156116205760098160405160200180838054600181600116156101000203166002900480156115b75780601f106115955761010080835404028352918201916115b7565b820191906000526020600020905b8154815290600101906020018083116115a3575b5050825160208401908083835b602083106115e35780518252601f1990920191602091820191016115c4565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050610a00565b600961162b846121d2565b60405160200180838054600181600116156101000203166002900480156116895780601f10611667576101008083540402835291820191611689565b820191906000526020600020905b815481529060010190602001808311611675575b5050825160208401908083835b602083106116b55780518252601f199092019160209182019101611696565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050919050565b6000610e138b6117e68c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8f018190048102820181019092528d815292508d91508c908190840183828082843760009201919091525050604080516020601f8d018190048102820181019092528b81528d935091508b908b9081908401838280828437600092019190915250611d2a92505050565b6122ad565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600b546001600160a01b031681565b600d5481565b61183661193a565b600a546001600160a01b03908116911614611886576040805162461bcd60e51b81526020600482018190526024820152600080516020612e69833981519152604482015290519081900360640190fd5b6001600160a01b0381166118cb5760405162461bcd60e51b8152600401808060200182810382526026815260200180612d1a6026913960400191505060405180910390fd5b600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c7c60028363ffffffff61235716565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061197382610ef4565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610c7c82612363565b60006119c282611927565b6119fd5760405162461bcd60e51b815260040180806020018281038252602c815260200180612d64602c913960400191505060405180910390fd5b6000611a0883610ef4565b9050806001600160a01b0316846001600160a01b03161480611a435750836001600160a01b0316611a3884610a9c565b6001600160a01b0316145b80611a535750611a5381856117eb565b949350505050565b826001600160a01b0316611a6e82610ef4565b6001600160a01b031614611ab35760405162461bcd60e51b8152600401808060200182810382526029815260200180612e896029913960400191505060405180910390fd5b6001600160a01b038216611af85760405162461bcd60e51b8152600401808060200182810382526024815260200180612d406024913960400191505060405180910390fd5b611b03838383610bd4565b611b0e60008261193e565b6001600160a01b0383166000908152600160205260409020611b36908263ffffffff61236716565b506001600160a01b0382166000908152600160205260409020611b5f908263ffffffff61237316565b50611b726002828463ffffffff61237f16565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000610c798383612395565b604080516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2600482015290516001600160a01b038416916302571be3916024808301926020929190829003018186803b158015611c2b57600080fd5b505afa158015611c3f573d6000803e3d6000fd5b505050506040513d6020811015611c5557600080fd5b505160405163c47f002760e01b81526020600482018181528451602484015284516001600160a01b039094169363c47f002793869383926044909201919085019080838360005b83811015611cb4578181015183820152602001611c9c565b50505050905090810190601f168015611ce15780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015611d0057600080fd5b505af1158015611d14573d6000803e3d6000fd5b505050506040513d60208110156112f757600080fd5b60608585858585604051602401808060200180602001806020018681526020018060200185810385528a818151815260200191508051906020019080838360005b83811015611d83578181015183820152602001611d6b565b50505050905090810190601f168015611db05780820380516001836020036101000a031916815260200191505b5085810384528951815289516020918201918b019080838360005b83811015611de3578181015183820152602001611dcb565b50505050905090810190601f168015611e105780820380516001836020036101000a031916815260200191505b5085810383528851815288516020918201918a019080838360005b83811015611e43578181015183820152602001611e2b565b50505050905090810190601f168015611e705780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b83811015611ea3578181015183820152602001611e8b565b50505050905090810190601f168015611ed05780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03166386c02c8f60e01b1790529a505050505050505050505095945050505050565b600080612043600084866040516020018083805190602001908083835b60208310611f4c5780518252601f199092019160209182019101611f2d565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b03166001600160a01b031660601b81526014019250505060405160208183030381529060405280519060200120600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120395780601f1061200e57610100808354040283529160200191612039565b820191906000526020600020905b81548152906001019060200180831161201c57829003601f168201915b50505050506123f9565b600b546040805163347d5e2560e21b81526001600160a01b0392831660048201818152602483019384528851604484015288519596509386169463d1f5789494919389939091606490910190602085019080838360005b838110156120b257818101518382015260200161209a565b50505050905090810190601f1680156120df5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1580156120ff57600080fd5b505af1158015612113573d6000803e3d6000fd5b5050505061212a84826001600160a01b031661250a565b6001600160a01b03169392505050565b60008080806121498686612644565b9097909650945050505050565b8051610ef0906009906020840190612c2d565b60006121768484846126bf565b90505b9392505050565b61218b848484611a5b565b61219784848484612789565b6112f75760405162461bcd60e51b8152600401808060200182810382526032815260200180612ce86032913960400191505060405180910390fd5b6060816121f757506040805180820190915260018152600360fc1b6020820152610a00565b8160005b811561220f57600101600a820491506121fb565b60608167ffffffffffffffff8111801561222857600080fd5b506040519080825280601f01601f191660200182016040528015612253576020820181803683370190505b50859350905060001982015b83156122a457600a840660300160f81b8282806001900393508151811061228257fe5b60200101906001600160f81b031916908160001a905350600a8404935061225f565b50949350505050565b60008061234683856040516020018083805190602001908083835b602083106122e75780518252601f1990920191602091820191016122c8565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b03166001600160a01b031660601b81526014019250505060405160208183030381529060405280519060200120600d546129c4565b6001600160a01b0316949350505050565b6000610c7983836129d1565b5490565b6000610c7983836129e9565b6000610c798383612aaf565b600061217684846001600160a01b038516612af9565b815460009082106123d75760405162461bcd60e51b8152600401808060200182810382526022815260200180612cc66022913960400191505060405180910390fd5b8260000182815481106123e657fe5b9060005260206000200154905092915050565b60008084471015612451576040805162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b82516124a4576040805162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015290519081900360640190fd5b8383516020850187f590506001600160a01b038116612176576040805162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015290519081900360640190fd5b6001600160a01b038216612565576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b61256e81611927565b156125c0576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b6125cc60008383610bd4565b6001600160a01b03821660009081526001602052604090206125f4908263ffffffff61237316565b506126076002828463ffffffff61237f16565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8154600090819083106126885760405162461bcd60e51b8152600401808060200182810382526022815260200180612e1b6022913960400191505060405180910390fd5b600084600001848154811061269957fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b6000828152600184016020526040812054828161275a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561271f578181015183820152602001612707565b50505050905090810190601f16801561274c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061276d57fe5b9060005260206000209060020201600101549150509392505050565b600061279d846001600160a01b0316612b90565b6127a957506001611a53565b600060606001600160a01b038616630a85bd0160e11b6127c761193a565b89888860405160240180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612840578181015183820152602001612828565b50505050905090810190601f16801561286d5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909a16999099178952518151919890975087965094509250829150849050835b602083106128d55780518252601f1990920191602091820191016128b6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612937576040519150601f19603f3d011682016040523d82523d6000602084013e61293c565b606091505b50915091508161298d578051156129565780518082602001fd5b60405162461bcd60e51b8152600401808060200182810382526032815260200180612ce86032913960400191505060405180910390fd5b60008180602001905160208110156129a457600080fd5b50516001600160e01b031916630a85bd0160e11b149350611a5392505050565b6000610c79838330612bc9565b60009081526001919091016020526040902054151590565b60008181526001830160205260408120548015612aa55783546000198083019190810190600090879083908110612a1c57fe5b9060005260206000200154905080876000018481548110612a3957fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080612a6957fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610c7c565b6000915050610c7c565b6000612abb83836129d1565b612af157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610c7c565b506000610c7c565b600082815260018401602052604081205480612b5e575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055612179565b82856000016001830381548110612b7157fe5b9060005260206000209060020201600101819055506000915050612179565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611a53575050151592915050565b604080516001600160f81b031960208083019190915260609390931b6bffffffffffffffffffffffff19166021820152603581019490945260558085019390935280518085039093018352607590930190925280519101206001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612c6e57805160ff1916838001178555612c9b565b82800160010185558215612c9b579182015b82811115612c9b578251825591602001919060010190612c80565b50612ca7929150612cab565b5090565b610a9991905b80821115612ca75760008155600101612cb156fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a2646970667358221220c1653ab82e6cef6ae9d77bd7dfa83dccf4da05e62989863fcced7b8344f4783264736f6c63430006060033608060405234801561001057600080fd5b50610a19806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c806384aaf12e1161006657806384aaf12e146101c157806386c02c8f146101db5780638da5cb5b14610416578063e30d26a81461041e578063f8c2ceb31461042657610093565b80633121db1c14610098578063358982a31461011857806339e75d45146101955780637b1039991461019d575b600080fd5b610116600480360360408110156100ae57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156100d857600080fd5b8201836020820111156100ea57600080fd5b803590602001918460018302840111600160201b8311171561010b57600080fd5b50909250905061042e565b005b6101206104d7565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015a578181015183820152602001610142565b50505050905090810190601f1680156101875780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610120610564565b6101a56105bf565b604080516001600160a01b039092168252519081900360200190f35b6101c96105ce565b60408051918252519081900360200190f35b610116600480360360a08110156101f157600080fd5b810190602081018135600160201b81111561020b57600080fd5b82018360208201111561021d57600080fd5b803590602001918460018302840111600160201b8311171561023e57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561029057600080fd5b8201836020820111156102a257600080fd5b803590602001918460018302840111600160201b831117156102c357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561031557600080fd5b82018360208201111561032757600080fd5b803590602001918460018302840111600160201b8311171561034857600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b8111156103a257600080fd5b8201836020820111156103b457600080fd5b803590602001918460018302840111600160201b831117156103d557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506105d4945050505050565b6101a5610639565b6101206106b7565b610120610712565b33610437610639565b6001600160a01b031614610492576040805162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604482015290519081900360640190fd5b6104d28383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061076a92505050565b505050565b60018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561055c5780601f106105315761010080835404028352916020019161055c565b820191906000526020600020905b81548152906001019060200180831161053f57829003601f168201915b505050505081565b6003805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561055c5780601f106105315761010080835404028352916020019161055c565b6000546001600160a01b031681565b60045481565b6105dd336108d5565b84516105f090600190602088019061094b565b50835161060490600290602087019061094b565b50825161061890600390602086019061094b565b506004829055805161063190600590602084019061094b565b505050505050565b60008054604080516331a9108f60e11b815230600482015290516001600160a01b0390921691636352211e91602480820192602092909190829003018186803b15801561068557600080fd5b505afa158015610699573d6000803e3d6000fd5b505050506040513d60208110156106af57600080fd5b505190505b90565b6005805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561055c5780601f106105315761010080835404028352916020019161055c565b6002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152929183018282801561055c5780601f106105315761010080835404028352916020019161055c565b604080516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2600482015290516001600160a01b038416916302571be3916024808301926020929190829003018186803b1580156107d057600080fd5b505afa1580156107e4573d6000803e3d6000fd5b505050506040513d60208110156107fa57600080fd5b505160405163c47f002760e01b81526020600482018181528451602484015284516001600160a01b039094169363c47f002793869383926044909201919085019080838360005b83811015610859578181015183820152602001610841565b50505050905090810190601f1680156108865780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b1580156108a557600080fd5b505af11580156108b9573d6000803e3d6000fd5b505050506040513d60208110156108cf57600080fd5b50505050565b6000546001600160a01b031615610929576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061098c57805160ff19168380011785556109b9565b828001600101855582156109b9579182015b828111156109b957825182559160200191906001019061099e565b506109c59291506109c9565b5090565b6106b491905b808211156109c557600081556001016109cf56fea26469706673582212203d0203c56bb2a99cb7fe14c1429f24e4f40c5db8e4c1ba9b54b5669a7c12249264736f6c63430006060033608060405234801561001057600080fd5b506103ad806100206000396000f3fe6080604052600436106100225760003560e01c8063d1f578941461003957610031565b366100315761002f6100ef565b005b61002f6100ef565b61002f6004803603604081101561004f57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561007a57600080fd5b82018360208201111561008c57600080fd5b803590602001918460018302840111640100000000831117156100ae57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610109945050505050565b6100f7610107565b61010761010261022c565b610251565b565b600061011361022c565b6001600160a01b03161461012657600080fd5b60405180602361031a82396040519081900360230190207f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c314905061016757fe5b61017082610275565b805115610228576000826001600160a01b0316826040518082805190602001908083835b602083106101b35780518252601f199092019160209182019101610194565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610213576040519150601f19603f3d011682016040523d82523d6000602084013e610218565b606091505b505090508061022657600080fd5b505b5050565b7f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c35490565b3660008037600080366000845af43d6000803e808015610270573d6000f35b3d6000fd5b61027e816102dd565b6102b95760405162461bcd60e51b815260040180806020018281038252603b81526020018061033d603b913960400191505060405180910390fd5b7f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c355565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061031157508115155b94935050505056fe6f72672e7a657070656c696e6f732e70726f78792e696d706c656d656e746174696f6e43616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a2646970667358221220f4af5f38b16e1ce890fd14497bea12d47bed23b9e542d8461f60b0d5a7952a1e64736f6c63430006060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80636fa59bbc1161010f578063c3c5a547116100a2578063e985e9c511610071578063e985e9c51461097e578063ee97f7f3146109ac578063eee39111146109b4578063f2fde38b146109bc576101e5565b8063c3c5a547146107a3578063c4d66de8146107c9578063c87b56dd146107ef578063e92118ed1461080c576101e5565b80638da5cb5b116100de5780638da5cb5b146106a157806395d89b41146106a9578063a22cb465146106b1578063b88d4fde146106df576101e5565b80636fa59bbc1461066357806370a082311461066b578063715018a6146106915780637c2b2e7114610699576101e5565b80632f745c59116101875780634f6ccce7116101565780634f6ccce7146105b357806355f804b3146105d05780636352211e1461063e5780636c0360eb1461065b576101e5565b80632f745c59146103615780633121db1c1461038d5780633f7868ff1461040b57806342842e0e1461057d576101e5565b8063095ea7b3116101c3578063095ea7b3146102db578063158ef93e1461030957806318160ddd1461031157806323b872dd1461032b576101e5565b806301ffc9a7146101ea57806306fdde0314610225578063081812fc146102a2575b600080fd5b6102116004803603602081101561020057600080fd5b50356001600160e01b0319166109e2565b604080519115158252519081900360200190f35b61022d610a05565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026757818101518382015260200161024f565b50505050905090810190601f1680156102945780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102bf600480360360208110156102b857600080fd5b5035610a9c565b604080516001600160a01b039092168252519081900360200190f35b610307600480360360408110156102f157600080fd5b506001600160a01b038135169060200135610afe565b005b610211610bd9565b610319610be9565b60408051918252519081900360200190f35b6103076004803603606081101561034157600080fd5b506001600160a01b03813581169160208101359091169060400135610bfa565b6103196004803603604081101561037757600080fd5b506001600160a01b038135169060200135610c51565b610307600480360360408110156103a357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156103cd57600080fd5b8201836020820111156103df57600080fd5b803590602001918460018302840111600160201b8311171561040057600080fd5b509092509050610c82565b6102bf600480360360c081101561042157600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561044b57600080fd5b82018360208201111561045d57600080fd5b803590602001918460018302840111600160201b8311171561047e57600080fd5b919390929091602081019035600160201b81111561049b57600080fd5b8201836020820111156104ad57600080fd5b803590602001918460018302840111600160201b831117156104ce57600080fd5b919390929091602081019035600160201b8111156104eb57600080fd5b8201836020820111156104fd57600080fd5b803590602001918460018302840111600160201b8311171561051e57600080fd5b91939092823592604081019060200135600160201b81111561053f57600080fd5b82018360208201111561055157600080fd5b803590602001918460018302840111600160201b8311171561057257600080fd5b509092509050610d1a565b6103076004803603606081101561059357600080fd5b506001600160a01b03813581169160208101359091169060400135610e22565b610319600480360360208110156105c957600080fd5b5035610e3d565b610307600480360360208110156105e657600080fd5b810190602081018135600160201b81111561060057600080fd5b82018360208201111561061257600080fd5b803590602001918460018302840111600160201b8311171561063357600080fd5b509092509050610e59565b6102bf6004803603602081101561065457600080fd5b5035610ef4565b61022d610f22565b61022d610f83565b6103196004803603602081101561068157600080fd5b50356001600160a01b0316611011565b610307611079565b6102bf61111b565b6102bf61112a565b61022d611139565b610307600480360360408110156106c757600080fd5b506001600160a01b038135169060200135151561119a565b610307600480360360808110156106f557600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561072f57600080fd5b82018360208201111561074157600080fd5b803590602001918460018302840111600160201b8311171561076257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061129f945050505050565b610211600480360360208110156107b957600080fd5b50356001600160a01b03166112fd565b610307600480360360208110156107df57600080fd5b50356001600160a01b03166113ab565b61022d6004803603602081101561080557600080fd5b503561144b565b6102bf600480360360c081101561082257600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561084c57600080fd5b82018360208201111561085e57600080fd5b803590602001918460018302840111600160201b8311171561087f57600080fd5b919390929091602081019035600160201b81111561089c57600080fd5b8201836020820111156108ae57600080fd5b803590602001918460018302840111600160201b831117156108cf57600080fd5b919390929091602081019035600160201b8111156108ec57600080fd5b8201836020820111156108fe57600080fd5b803590602001918460018302840111600160201b8311171561091f57600080fd5b91939092823592604081019060200135600160201b81111561094057600080fd5b82018360208201111561095257600080fd5b803590602001918460018302840111600160201b8311171561097357600080fd5b5090925090506116f2565b6102116004803603604081101561099457600080fd5b506001600160a01b03813581169160200135166117eb565b6102bf611819565b610319611828565b610307600480360360208110156109d257600080fd5b50356001600160a01b031661182e565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b60068054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a915780601f10610a6657610100808354040283529160200191610a91565b820191906000526020600020905b815481529060010190602001808311610a7457829003601f168201915b505050505090505b90565b6000610aa782611927565b610ae25760405162461bcd60e51b815260040180806020018281038252602c815260200180612e3d602c913960400191505060405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610b0982610ef4565b9050806001600160a01b0316836001600160a01b03161415610b5c5760405162461bcd60e51b8152600401808060200182810382526021815260200180612ee16021913960400191505060405180910390fd5b806001600160a01b0316610b6e61193a565b6001600160a01b03161480610b8f5750610b8f81610b8a61193a565b6117eb565b610bca5760405162461bcd60e51b8152600401808060200182810382526038815260200180612d906038913960400191505060405180910390fd5b610bd4838361193e565b505050565b600e54600160a01b900460ff1681565b6000610bf560026119ac565b905090565b610c0b610c0561193a565b826119b7565b610c465760405162461bcd60e51b8152600401808060200182810382526031815260200180612f026031913960400191505060405180910390fd5b610bd4838383611a5b565b6001600160a01b0382166000908152600160205260408120610c79908363ffffffff611bb916565b90505b92915050565b610c8a61193a565b600a546001600160a01b03908116911614610cda576040805162461bcd60e51b81526020600482018190526024820152600080516020612e69833981519152604482015290519081900360640190fd5b610bd48383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bc592505050565b6000610e138b610e0e8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8f018190048102820181019092528d815292508d91508c908190840183828082843760009201919091525050604080516020601f8d018190048102820181019092528b81528d935091508b908b9081908401838280828437600092019190915250611d2a92505050565b611f10565b9b9a5050505050505050505050565b610bd48383836040518060200160405280600081525061129f565b600080610e5160028463ffffffff61213a16565b509392505050565b610e6161193a565b600a546001600160a01b03908116911614610eb1576040805162461bcd60e51b81526020600482018190526024820152600080516020612e69833981519152604482015290519081900360640190fd5b610ef082828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061215692505050565b5050565b6000610c7c82604051806060016040528060298152602001612df2602991396002919063ffffffff61216916565b60098054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a915780601f10610a6657610100808354040283529160200191610a91565b600c805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110095780601f10610fde57610100808354040283529160200191611009565b820191906000526020600020905b815481529060010190602001808311610fec57829003601f168201915b505050505081565b60006001600160a01b0382166110585760405162461bcd60e51b815260040180806020018281038252602a815260200180612dc8602a913960400191505060405180910390fd5b6001600160a01b0382166000908152600160205260409020610c7c906119ac565b61108161193a565b600a546001600160a01b039081169116146110d1576040805162461bcd60e51b81526020600482018190526024820152600080516020612e69833981519152604482015290519081900360640190fd5b600a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600a80546001600160a01b0319169055565b600e546001600160a01b031681565b600a546001600160a01b031690565b60078054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a915780601f10610a6657610100808354040283529160200191610a91565b6111a261193a565b6001600160a01b0316826001600160a01b03161415611208576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b806005600061121561193a565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561125961193a565b60408051841515815290516001600160a01b0392909216917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319181900360200190a35050565b6112b06112aa61193a565b836119b7565b6112eb5760405162461bcd60e51b8152600401808060200182810382526031815260200180612f026031913960400191505060405180910390fd5b6112f784848484612180565b50505050565b6000611311826001600160a01b0316611927565b80610c7c5750600e546001600160a01b031615801590610c7c5750600e546040805163c3c5a54760e01b81526001600160a01b0385811660048301529151919092169163c3c5a547916024808301926020929190829003018186803b15801561137957600080fd5b505afa15801561138d573d6000803e3d6000fd5b505050506040513d60208110156113a357600080fd5b505192915050565b6113b361193a565b600a546001600160a01b03908116911614611403576040805162461bcd60e51b81526020600482018190526024820152600080516020612e69833981519152604482015290519081900360640190fd5b600e54600160a01b900460ff161561141a57600080fd5b600e8054600160a01b60ff60a01b19909116176001600160a01b0319166001600160a01b0392909216919091179055565b606061145682611927565b6114915760405162461bcd60e51b815260040180806020018281038252602f815260200180612eb2602f913960400191505060405180910390fd5b60008281526008602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156115265780601f106114fb57610100808354040283529160200191611526565b820191906000526020600020905b81548152906001019060200180831161150957829003601f168201915b50506009549394505050506002600019610100600184161502019091160461154f579050610a00565b8051156116205760098160405160200180838054600181600116156101000203166002900480156115b75780601f106115955761010080835404028352918201916115b7565b820191906000526020600020905b8154815290600101906020018083116115a3575b5050825160208401908083835b602083106115e35780518252601f1990920191602091820191016115c4565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050610a00565b600961162b846121d2565b60405160200180838054600181600116156101000203166002900480156116895780601f10611667576101008083540402835291820191611689565b820191906000526020600020905b815481529060010190602001808311611675575b5050825160208401908083835b602083106116b55780518252601f199092019160209182019101611696565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050919050565b6000610e138b6117e68c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8f018190048102820181019092528d815292508d91508c908190840183828082843760009201919091525050604080516020601f8d018190048102820181019092528b81528d935091508b908b9081908401838280828437600092019190915250611d2a92505050565b6122ad565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600b546001600160a01b031681565b600d5481565b61183661193a565b600a546001600160a01b03908116911614611886576040805162461bcd60e51b81526020600482018190526024820152600080516020612e69833981519152604482015290519081900360640190fd5b6001600160a01b0381166118cb5760405162461bcd60e51b8152600401808060200182810382526026815260200180612d1a6026913960400191505060405180910390fd5b600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c7c60028363ffffffff61235716565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061197382610ef4565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610c7c82612363565b60006119c282611927565b6119fd5760405162461bcd60e51b815260040180806020018281038252602c815260200180612d64602c913960400191505060405180910390fd5b6000611a0883610ef4565b9050806001600160a01b0316846001600160a01b03161480611a435750836001600160a01b0316611a3884610a9c565b6001600160a01b0316145b80611a535750611a5381856117eb565b949350505050565b826001600160a01b0316611a6e82610ef4565b6001600160a01b031614611ab35760405162461bcd60e51b8152600401808060200182810382526029815260200180612e896029913960400191505060405180910390fd5b6001600160a01b038216611af85760405162461bcd60e51b8152600401808060200182810382526024815260200180612d406024913960400191505060405180910390fd5b611b03838383610bd4565b611b0e60008261193e565b6001600160a01b0383166000908152600160205260409020611b36908263ffffffff61236716565b506001600160a01b0382166000908152600160205260409020611b5f908263ffffffff61237316565b50611b726002828463ffffffff61237f16565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000610c798383612395565b604080516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2600482015290516001600160a01b038416916302571be3916024808301926020929190829003018186803b158015611c2b57600080fd5b505afa158015611c3f573d6000803e3d6000fd5b505050506040513d6020811015611c5557600080fd5b505160405163c47f002760e01b81526020600482018181528451602484015284516001600160a01b039094169363c47f002793869383926044909201919085019080838360005b83811015611cb4578181015183820152602001611c9c565b50505050905090810190601f168015611ce15780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015611d0057600080fd5b505af1158015611d14573d6000803e3d6000fd5b505050506040513d60208110156112f757600080fd5b60608585858585604051602401808060200180602001806020018681526020018060200185810385528a818151815260200191508051906020019080838360005b83811015611d83578181015183820152602001611d6b565b50505050905090810190601f168015611db05780820380516001836020036101000a031916815260200191505b5085810384528951815289516020918201918b019080838360005b83811015611de3578181015183820152602001611dcb565b50505050905090810190601f168015611e105780820380516001836020036101000a031916815260200191505b5085810383528851815288516020918201918a019080838360005b83811015611e43578181015183820152602001611e2b565b50505050905090810190601f168015611e705780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b83811015611ea3578181015183820152602001611e8b565b50505050905090810190601f168015611ed05780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03166386c02c8f60e01b1790529a505050505050505050505095945050505050565b600080612043600084866040516020018083805190602001908083835b60208310611f4c5780518252601f199092019160209182019101611f2d565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b03166001600160a01b031660601b81526014019250505060405160208183030381529060405280519060200120600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120395780601f1061200e57610100808354040283529160200191612039565b820191906000526020600020905b81548152906001019060200180831161201c57829003601f168201915b50505050506123f9565b600b546040805163347d5e2560e21b81526001600160a01b0392831660048201818152602483019384528851604484015288519596509386169463d1f5789494919389939091606490910190602085019080838360005b838110156120b257818101518382015260200161209a565b50505050905090810190601f1680156120df5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1580156120ff57600080fd5b505af1158015612113573d6000803e3d6000fd5b5050505061212a84826001600160a01b031661250a565b6001600160a01b03169392505050565b60008080806121498686612644565b9097909650945050505050565b8051610ef0906009906020840190612c2d565b60006121768484846126bf565b90505b9392505050565b61218b848484611a5b565b61219784848484612789565b6112f75760405162461bcd60e51b8152600401808060200182810382526032815260200180612ce86032913960400191505060405180910390fd5b6060816121f757506040805180820190915260018152600360fc1b6020820152610a00565b8160005b811561220f57600101600a820491506121fb565b60608167ffffffffffffffff8111801561222857600080fd5b506040519080825280601f01601f191660200182016040528015612253576020820181803683370190505b50859350905060001982015b83156122a457600a840660300160f81b8282806001900393508151811061228257fe5b60200101906001600160f81b031916908160001a905350600a8404935061225f565b50949350505050565b60008061234683856040516020018083805190602001908083835b602083106122e75780518252601f1990920191602091820191016122c8565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b03166001600160a01b031660601b81526014019250505060405160208183030381529060405280519060200120600d546129c4565b6001600160a01b0316949350505050565b6000610c7983836129d1565b5490565b6000610c7983836129e9565b6000610c798383612aaf565b600061217684846001600160a01b038516612af9565b815460009082106123d75760405162461bcd60e51b8152600401808060200182810382526022815260200180612cc66022913960400191505060405180910390fd5b8260000182815481106123e657fe5b9060005260206000200154905092915050565b60008084471015612451576040805162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b82516124a4576040805162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015290519081900360640190fd5b8383516020850187f590506001600160a01b038116612176576040805162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015290519081900360640190fd5b6001600160a01b038216612565576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b61256e81611927565b156125c0576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b6125cc60008383610bd4565b6001600160a01b03821660009081526001602052604090206125f4908263ffffffff61237316565b506126076002828463ffffffff61237f16565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8154600090819083106126885760405162461bcd60e51b8152600401808060200182810382526022815260200180612e1b6022913960400191505060405180910390fd5b600084600001848154811061269957fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b6000828152600184016020526040812054828161275a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561271f578181015183820152602001612707565b50505050905090810190601f16801561274c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061276d57fe5b9060005260206000209060020201600101549150509392505050565b600061279d846001600160a01b0316612b90565b6127a957506001611a53565b600060606001600160a01b038616630a85bd0160e11b6127c761193a565b89888860405160240180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612840578181015183820152602001612828565b50505050905090810190601f16801561286d5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909a16999099178952518151919890975087965094509250829150849050835b602083106128d55780518252601f1990920191602091820191016128b6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612937576040519150601f19603f3d011682016040523d82523d6000602084013e61293c565b606091505b50915091508161298d578051156129565780518082602001fd5b60405162461bcd60e51b8152600401808060200182810382526032815260200180612ce86032913960400191505060405180910390fd5b60008180602001905160208110156129a457600080fd5b50516001600160e01b031916630a85bd0160e11b149350611a5392505050565b6000610c79838330612bc9565b60009081526001919091016020526040902054151590565b60008181526001830160205260408120548015612aa55783546000198083019190810190600090879083908110612a1c57fe5b9060005260206000200154905080876000018481548110612a3957fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080612a6957fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610c7c565b6000915050610c7c565b6000612abb83836129d1565b612af157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610c7c565b506000610c7c565b600082815260018401602052604081205480612b5e575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055612179565b82856000016001830381548110612b7157fe5b9060005260206000209060020201600101819055506000915050612179565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611a53575050151592915050565b604080516001600160f81b031960208083019190915260609390931b6bffffffffffffffffffffffff19166021820152603581019490945260558085019390935280518085039093018352607590930190925280519101206001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612c6e57805160ff1916838001178555612c9b565b82800160010185558215612c9b579182015b82811115612c9b578251825591602001919060010190612c80565b50612ca7929150612cab565b5090565b610a9991905b80821115612ca75760008155600101612cb156fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a2646970667358221220c1653ab82e6cef6ae9d77bd7dfa83dccf4da05e62989863fcced7b8344f4783264736f6c63430006060033",
  "immutableReferences": {},
  "sourceMap": "73:1327:40:-:0;;;135:113;5:9:-1;2:2;;;27:1;24;17:12;2:2;135:113:40;177:9;;;;;:::i;:::-;;;;;;;;;;;8::-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;608:247:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;608:247:37;;;;;;;718:40:67;-1:-1:-1;;;;;;;;718:18:67;:40;:::i;:::-;3491:12:71;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;3513:16:71;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;3617:40:71;-1:-1:-1;;;;;;;;3617:18:71;:40;:::i;:::-;3667:49;-1:-1:-1;;;;;;;;3667:18:71;:49;:::i;:::-;3726:51;-1:-1:-1;;;;;;;;3726:18:71;:51;:::i;:::-;-1:-1:-1;832:17:66;;-1:-1:-1;852:12:66;-1:-1:-1;;;;;852:10:66;:12;:::i;:::-;874:6;:18;;-1:-1:-1;;;;;;874:18:66;-1:-1:-1;;;;;874:18:66;;;;;;;;907:43;;874:18;;-1:-1:-1;874:18:66;-1:-1:-1;;907:43:66;;-1:-1:-1;;907:43:66;-1:-1:-1;717:6:37::1;:23:::0;;-1:-1:-1;;;;;;717:23:37::1;-1:-1:-1::0;;;;;717:23:37;::::1;;::::0;;760:51:::1;::::0;::::1;;::::0;::::1;;:::i;:::-;-1:-1:-1::0;;21:26;;;;;7:41;;87:2:::1;69:12:::0;;::::1;65:26;61:2;54:38:::0;744:67:37;;::::1;::::0;:9:::1;::::0;41:4:-1::1;30:16:::0;;;::::1;::::0;744:67:37::1;:::i;:::-;;841:9;831:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;831:20:37::1;::::0;;;;::::1;::::0;;815:13:::1;:36:::0;-1:-1:-1;73:1327:40;;-1:-1:-1;;;;73:1327:40;1449:198:67;-1:-1:-1;;;;;;1532:25:67;;;;;1524:66;;;;;-1:-1:-1;;;1524:66:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1600:33:67;:20;:33;;;;;;;;;;:40;;-1:-1:-1;;1600:40:67;1636:4;1600:40;;;1449:198::o;735:104:65:-;822:10;735:104;;:::o;73:1327:40:-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;73:1327:40;;;-1:-1:-1;73:1327:40;:::i;:::-;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "73:1327:40:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;73:1327:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;915:140:67;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;915:140:67;-1:-1:-1;;;;;;915:140:67;;:::i;:::-;;;;;;;;;;;;;;;;;;4690:90:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4690:90:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9350:209;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9350:209:71;;:::i;:::-;;;;-1:-1:-1;;;;;9350:209:71;;;;;;;;;;;;;;8684:381;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;8684:381:71;;;;;;;;:::i;:::-;;576:28:37;;;:::i;7564:200:71:-;;;:::i;:::-;;;;;;;;;;;;;;;;11061:300;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;11061:300:71;;;;;;;;;;;;;;;;;:::i;7259:152::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;7259:152:71;;;;;;;;:::i;1722:111:37:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;1722:111:37;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;1722:111:37;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;1722:111:37;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;1722:111:37;;-1:-1:-1;1722:111:37;-1:-1:-1;1722:111:37;:::i;670:359:40:-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;670:359:40;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;670:359:40;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;670:359:40;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;670:359:40;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;670:359:40;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;670:359:40;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;670:359:40;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;670:359:40;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;670:359:40;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;670:359:40;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;670:359:40;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;670:359:40;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;670:359:40;;-1:-1:-1;670:359:40;-1:-1:-1;670:359:40;:::i;12010:149:71:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;12010:149:71;;;;;;;;;;;;;;;;;:::i;8102:161::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;8102:161:71;;:::i;1836:98:37:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;1836:98:37;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;1836:98:37;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;1836:98:37;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;1836:98:37;;-1:-1:-1;1836:98:37;-1:-1:-1;1836:98:37;:::i;4418:167:71:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;4418:167:71;;:::i;6798:87::-;;;:::i;486:26:37:-;;;:::i;3988:211:71:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3988:211:71;-1:-1:-1;;;;;3988:211:71;;:::i;1656:145:66:-;;;:::i;548:25:37:-;;;:::i;1033:77:66:-;;;:::i;4889:94:71:-;;;:::i;9858:290::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;9858:290:71;;;;;;;;;;:::i;12882:282::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;12882:282:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;12882:282:71;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;12882:282:71;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;12882:282:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;12882:282:71;;-1:-1:-1;12882:282:71;;-1:-1:-1;;;;;12882:282:71:i;1954:187:37:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1954:187:37;-1:-1:-1;;;;;1954:187:37;;:::i;858:151::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;858:151:37;-1:-1:-1;;;;;858:151:37;;:::i;5826:740:71:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;5826:740:71;;:::i;1032:366:40:-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;1032:366:40;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;1032:366:40;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;1032:366:40;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1032:366:40;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;1032:366:40;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;1032:366:40;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1032:366:40;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;1032:366:40;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;1032:366:40;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1032:366:40;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;1032:366:40;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;1032:366:40;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;1032:366:40;;-1:-1:-1;1032:366:40;-1:-1:-1;1032:366:40;:::i;10470:154:71:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;10470:154:71;;;;;;;;;;:::i;460:23:37:-;;;:::i;515:30::-;;;:::i;1950:240:66:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1950:240:66;-1:-1:-1;;;;;1950:240:66;;:::i;915:140:67:-;-1:-1:-1;;;;;;1015:33:67;;992:4;1015:33;;;;;;;;;;;;;915:140;;;;:::o;4690:90:71:-;4768:5;4761:12;;;;;;;;-1:-1:-1;;4761:12:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4736:13;;4761:12;;4768:5;;4761:12;;4768:5;4761:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4690:90;;:::o;9350:209::-;9418:7;9445:16;9453:7;9445;:16::i;:::-;9437:73;;;;-1:-1:-1;;;9437:73:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9528:24:71;;;;:15;:24;;;;;;-1:-1:-1;;;;;9528:24:71;;9350:209::o;8684:381::-;8764:13;8780:16;8788:7;8780;:16::i;:::-;8764:32;;8820:5;-1:-1:-1;;;;;8814:11:71;:2;-1:-1:-1;;;;;8814:11:71;;;8806:57;;;;-1:-1:-1;;;8806:57:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8898:5;-1:-1:-1;;;;;8882:21:71;:12;:10;:12::i;:::-;-1:-1:-1;;;;;8882:21:71;;:62;;;;8907:37;8924:5;8931:12;:10;:12::i;:::-;8907:16;:37::i;:::-;8874:152;;;;-1:-1:-1;;;8874:152:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9037:21;9046:2;9050:7;9037:8;:21::i;:::-;8684:381;;;:::o;576:28:37:-;;;-1:-1:-1;;;576:28:37;;;;;:::o;7564:200:71:-;7617:7;7736:21;:12;:19;:21::i;:::-;7729:28;;7564:200;:::o;11061:300::-;11220:41;11239:12;:10;:12::i;:::-;11253:7;11220:18;:41::i;:::-;11212:103;;;;-1:-1:-1;;;11212:103:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11326:28;11336:4;11342:2;11346:7;11326:9;:28::i;7259:152::-;-1:-1:-1;;;;;7374:20:71;;7348:7;7374:20;;;:13;:20;;;;;:30;;7398:5;7374:30;:23;:30;:::i;:::-;7367:37;;7259:152;;;;;:::o;1722:111:37:-;1247:12:66;:10;:12::i;:::-;1237:6;;-1:-1:-1;;;;;1237:6:66;;;:22;;;1229:67;;;;;-1:-1:-1;;;1229:67:66;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1229:67:66;;;;;;;;;;;;;;;1803:26:37::1;1816:4;1823:5;;1803:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;1803:8:37::1;::::0;-1:-1:-1;;;1803:26:37:i:1;670:359:40:-:0;898:3;919:105;931:9;942:81;960:8;;942:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;942:81:40;;;;;;970:8;;942:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;942:81:40;;;;137:4:-1;942:81:40;;;;;;;;;;;;;;;;;;-1:-1:-1;980:13:40;;-1:-1:-1;980:13:40;;;;942:81;;980:13;;;;942:81;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;;942:81:40;;;;137:4:-1;942:81:40;;;;;;;;;;;;;;;;;995:12;;-1:-1:-1;942:81:40;-1:-1:-1;1009:13:40;;;;;;942:81;;1009:13;;;;942:81;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;942:17:40;;-1:-1:-1;;;942:81:40:i;:::-;919:11;:105::i;:::-;908:117;670:359;-1:-1:-1;;;;;;;;;;;670:359:40:o;12010:149:71:-;12113:39;12130:4;12136:2;12140:7;12113:39;;;;;;;;;;;;:16;:39::i;8102:161::-;8169:7;;8210:22;:12;8226:5;8210:22;:15;:22;:::i;:::-;-1:-1:-1;8188:44:71;8102:161;-1:-1:-1;;;8102:161:71:o;1836:98:37:-;1247:12:66;:10;:12::i;:::-;1237:6;;-1:-1:-1;;;;;1237:6:66;;;:22;;;1229:67;;;;;-1:-1:-1;;;1229:67:66;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1229:67:66;;;;;;;;;;;;;;;1909:21:37::1;1921:8;;1909:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;1909:11:37::1;::::0;-1:-1:-1;;;1909:21:37:i:1;:::-;1836:98:::0;;:::o;4418:167:71:-;4482:7;4508:70;4525:7;4508:70;;;;;;;;;;;;;;;;;:12;;:70;;:16;:70;:::i;6798:87::-;6870:8;6863:15;;;;;;;;-1:-1:-1;;6863:15:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6838:13;;6863:15;;6870:8;;6863:15;;6870:8;6863:15;;;;;;;;;;;;;;;;;;;;;;;;486:26:37;;;;;;;;;;;;;;;-1:-1:-1;;486:26:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3988:211:71:-;4052:7;-1:-1:-1;;;;;4079:19:71;;4071:74;;;;-1:-1:-1;;;4071:74:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4163:20:71;;;;;;:13;:20;;;;;:29;;:27;:29::i;1656:145:66:-;1247:12;:10;:12::i;:::-;1237:6;;-1:-1:-1;;;;;1237:6:66;;;:22;;;1229:67;;;;;-1:-1:-1;;;1229:67:66;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1229:67:66;;;;;;;;;;;;;;;1746:6:::1;::::0;1725:40:::1;::::0;1762:1:::1;::::0;-1:-1:-1;;;;;1746:6:66::1;::::0;1725:40:::1;::::0;1762:1;;1725:40:::1;1775:6;:19:::0;;-1:-1:-1;;;;;;1775:19:66::1;::::0;;1656:145::o;548:25:37:-;;;-1:-1:-1;;;;;548:25:37;;:::o;1033:77:66:-;1097:6;;-1:-1:-1;;;;;1097:6:66;1033:77;:::o;4889:94:71:-;4969:7;4962:14;;;;;;;;-1:-1:-1;;4962:14:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4937:13;;4962:14;;4969:7;;4962:14;;4969:7;4962:14;;;;;;;;;;;;;;;;;;;;;;;;9858:290;9972:12;:10;:12::i;:::-;-1:-1:-1;;;;;9960:24:71;:8;-1:-1:-1;;;;;9960:24:71;;;9952:62;;;;;-1:-1:-1;;;9952:62:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;10070:8;10025:18;:32;10044:12;:10;:12::i;:::-;-1:-1:-1;;;;;10025:32:71;;;;;;;;;;;;;;;;;-1:-1:-1;10025:32:71;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;10025:53:71;;;;;;;;;;;10108:12;:10;:12::i;:::-;10093:48;;;;;;;;;;-1:-1:-1;;;;;10093:48:71;;;;;;;;;;;;;;9858:290;;:::o;12882:282::-;13013:41;13032:12;:10;:12::i;:::-;13046:7;13013:18;:41::i;:::-;13005:103;;;;-1:-1:-1;;;13005:103:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13118:39;13132:4;13138:2;13142:7;13151:5;13118:13;:39::i;:::-;12882:282;;;;:::o;1954:187:37:-;2025:4;2043:24;2059:6;-1:-1:-1;;;;;2051:15:37;2043:7;:24::i;:::-;:94;;;-1:-1:-1;2080:8:37;;-1:-1:-1;;;;;2080:8:37;2072:31;;;;:64;;-1:-1:-1;2107:8:37;;:29;;;-1:-1:-1;;;2107:29:37;;-1:-1:-1;;;;;2107:29:37;;;;;;;;;:8;;;;;:21;;:29;;;;;;;;;;;;;;:8;:29;;;2:2:-1;;;;27:1;24;17:12;2:2;2107:29:37;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2107:29:37;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2107:29:37;;1954:187;-1:-1:-1;;1954:187:37:o;858:151::-;1247:12:66;:10;:12::i;:::-;1237:6;;-1:-1:-1;;;;;1237:6:66;;;:22;;;1229:67;;;;;-1:-1:-1;;;1229:67:66;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1229:67:66;;;;;;;;;;;;;;;933:11:37::1;::::0;-1:-1:-1;;;933:11:37;::::1;;;932:12;924:21;;12:1:-1;9::::0;2:12:::1;924:21:37;949:11;:18:::0;;-1:-1:-1;;;;;;;949:18:37;;::::1;;-1:-1:-1::0;;;;;;971:34:37::1;-1:-1:-1::0;;;;;971:34:37;;;::::1;::::0;;;::::1;::::0;;858:151::o;5826:740:71:-;5891:13;5924:16;5932:7;5924;:16::i;:::-;5916:76;;;;-1:-1:-1;;;5916:76:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6029:19;;;;:10;:19;;;;;;;;;6003:45;;;;;;-1:-1:-1;;6003:45:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;:45;;;6029:19;6003:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6127:8:71;6121:22;6003:45;;-1:-1:-1;;;;6121:22:71;-1:-1:-1;;6121:22:71;;;;;;;;;;;6117:74;;6171:9;-1:-1:-1;6164:16:71;;6117:74;6293:23;;:27;6289:110;;6367:8;6377:9;6350:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6350:37:71;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;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;;;6350:37:71;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6350:37:71;;;6336:52;;;;;6289:110;6529:8;6539:18;:7;:16;:18::i;:::-;6512:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6512:46:71;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;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;;;6512:46:71;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6512:46:71;;;6498:61;;;5826:740;;;:::o;1032:366:40:-;1266:3;1287:106;1300:9;1311:81;1329:8;;1311:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1311:81:40;;;;;;1339:8;;1311:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;1311:81:40;;;;137:4:-1;1311:81:40;;;;;;;;;;;;;;;;;;-1:-1:-1;1349:13:40;;-1:-1:-1;1349:13:40;;;;1311:81;;1349:13;;;;1311:81;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;;1311:81:40;;;;137:4:-1;1311:81:40;;;;;;;;;;;;;;;;;1364:12;;-1:-1:-1;1311:81:40;-1:-1:-1;1378:13:40;;;;;;1311:81;;1378:13;;;;1311:81;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;1311:17:40;;-1:-1:-1;;;1311:81:40:i;:::-;1287:12;:106::i;10470:154:71:-;-1:-1:-1;;;;;10582:25:71;;;10559:4;10582:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;10470:154::o;460:23:37:-;;;-1:-1:-1;;;;;460:23:37;;:::o;515:30::-;;;;:::o;1950:240:66:-;1247:12;:10;:12::i;:::-;1237:6;;-1:-1:-1;;;;;1237:6:66;;;:22;;;1229:67;;;;;-1:-1:-1;;;1229:67:66;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1229:67:66;;;;;;;;;;;;;;;-1:-1:-1;;;;;2038:22:66;::::1;2030:73;;;;-1:-1:-1::0;;;2030:73:66::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2139:6;::::0;2118:38:::1;::::0;-1:-1:-1;;;;;2118:38:66;;::::1;::::0;2139:6:::1;::::0;2118:38:::1;::::0;2139:6:::1;::::0;2118:38:::1;2166:6;:17:::0;;-1:-1:-1;;;;;;2166:17:66::1;-1:-1:-1::0;;;;;2166:17:66;;;::::1;::::0;;;::::1;::::0;;1950:240::o;14333:117:71:-;14390:4;14413:30;:12;14435:7;14413:30;:21;:30;:::i;735:104:65:-;822:10;735:104;:::o;21357:155:71:-;21422:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;21422:29:71;-1:-1:-1;;;;;21422:29:71;;;;;;;;:24;;21475:16;21422:24;21475:7;:16::i;:::-;-1:-1:-1;;;;;21466:39:71;;;;;;;;;;;21357:155;;:::o;6990:121:78:-;7059:7;7085:19;7093:3;7085:7;:19::i;14811:329:71:-;14896:4;14920:16;14928:7;14920;:16::i;:::-;14912:73;;;;-1:-1:-1;;;14912:73:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14995:13;15011:16;15019:7;15011;:16::i;:::-;14995:32;;15056:5;-1:-1:-1;;;;;15045:16:71;:7;-1:-1:-1;;;;;15045:16:71;;:51;;;;15089:7;-1:-1:-1;;;;;15065:31:71;:20;15077:7;15065:11;:20::i;:::-;-1:-1:-1;;;;;15065:31:71;;15045:51;:87;;;;15100:32;15117:5;15124:7;15100:16;:32::i;:::-;15037:96;14811:329;-1:-1:-1;;;;14811:329:71:o;18323:559::-;18440:4;-1:-1:-1;;;;;18420:24:71;:16;18428:7;18420;:16::i;:::-;-1:-1:-1;;;;;18420:24:71;;18412:78;;;;-1:-1:-1;;;18412:78:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18508:16:71;;18500:65;;;;-1:-1:-1;;;18500:65:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18576:39;18597:4;18603:2;18607:7;18576:20;:39::i;:::-;18677:29;18694:1;18698:7;18677:8;:29::i;:::-;-1:-1:-1;;;;;18717:19:71;;;;;;:13;:19;;;;;:35;;18744:7;18717:35;:26;:35;:::i;:::-;-1:-1:-1;;;;;;18762:17:71;;;;;;:13;:17;;;;;:30;;18784:7;18762:30;:21;:30;:::i;:::-;-1:-1:-1;18803:29:71;:12;18820:7;18829:2;18803:29;:16;:29;:::i;:::-;;18867:7;18863:2;-1:-1:-1;;;;;18848:27:71;18857:4;-1:-1:-1;;;;;18848:27:71;;;;;;;;;;;18323:559;;;:::o;7616:135:79:-;7687:7;7721:22;7725:3;7737:5;7721:3;:22::i;533:127:54:-;613:28;;;-1:-1:-1;;;613:28:54;;463:66;613:28;;;;;;-1:-1:-1;;;;;613:9:54;;;;;:28;;;;;;;;;;;;;;:9;:28;;;2:2:-1;;;;27:1;24;17:12;2:2;613:28:54;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;613:28:54;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;613:28:54;595:61;;-1:-1:-1;;;595:61:54;;613:28;595:61;;;;;;;;;;;;;;-1:-1:-1;;;;;595:55:54;;;;;;651:4;;595:61;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;595:61:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;595:61:54;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;595:61:54;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;278:389:40;479:12;585:8;598;611:13;629:12;646:13;505:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;505:158:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;505:158:40;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;505:158:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;505:158:40;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;505:158:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;505:158:40;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;505:158:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;505:158:40;;;-1:-1:-1;;26:21;;;22:32;6:49;;505:158:40;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;505:158:40;-1:-1:-1;;;;;;;;;;;278:389:40;;;;;;;:::o;1027:445:37:-;1103:7;1143:13;1159:72;1174:1;1204:5;1211:6;1187:31;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;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;;;1187:31:37;;;;;;;-1:-1:-1;;;;;1187:31:37;-1:-1:-1;;;;;1187:31:37;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1187:31:37;;;1177:42;;;;;;1221:9;1159:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:14;:72::i;:::-;1366:6;;1306:74;;;-1:-1:-1;;;1306:74:37;;-1:-1:-1;;;;;1366:6:37;;;1306:74;;;;;;;;;;;;;;;;;;;;1143:88;;-1:-1:-1;1306:59:37;;;;;;1366:6;;1374:5;;1306:74;;;;;;;;;;;;;;1366:6;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1306:74:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1306:74:37;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1306:74:37;;;;1414:29;1420:6;1436:5;-1:-1:-1;;;;;1428:14:37;1414:5;:29::i;:::-;-1:-1:-1;;;;;1454:14:37;;1027:445;-1:-1:-1;;;1027:445:37:o;7439:224:78:-;7519:7;;;;7578:22;7582:3;7594:5;7578:3;:22::i;:::-;7547:53;;;;-1:-1:-1;7439:224:78;-1:-1:-1;;;;;7439:224:78:o;19650:98:71:-;19722:19;;;;:8;;:19;;;;;:::i;8082:202:78:-;8189:7;8231:44;8236:3;8256;8262:12;8231:4;:44::i;:::-;8223:53;-1:-1:-1;8082:202:78;;;;;;:::o;13869:269:71:-;13982:28;13992:4;13998:2;14002:7;13982:9;:28::i;:::-;14028:48;14051:4;14057:2;14061:7;14070:5;14028:22;:48::i;:::-;14020:111;;;;-1:-1:-1;;;14020:111:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;169:723:80;225:13;442:10;438:51;;-1:-1:-1;468:10:80;;;;;;;;;;;;-1:-1:-1;;;468:10:80;;;;;;438:51;513:5;498:12;552:75;559:9;;552:75;;584:8;;614:2;606:10;;;;552:75;;;636:19;668:6;658:17;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;658:17:80;;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;658:17:80;87:42:-1;143:17;;-1:-1;658:17:80;-1:-1:-1;728:5:80;;-1:-1:-1;636:39:80;-1:-1:-1;;;701:10:80;;743:112;750:9;;743:112;;816:2;809:4;:9;804:2;:14;793:27;;775:6;782:7;;;;;;;775:15;;;;;;;;;;;:45;-1:-1:-1;;;;;775:45:80;;;;;;;;-1:-1:-1;842:2:80;834:10;;;;743:112;;;-1:-1:-1;878:6:80;169:723;-1:-1:-1;;;;169:723:80:o;1475:222:37:-;1557:7;1571:13;1587:81;1637:5;1644:6;1620:31;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;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;;;1620:31:37;;;;;;;-1:-1:-1;;;;;1620:31:37;-1:-1:-1;;;;;1620:31:37;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1620:31:37;;;1610:42;;;;;;1654:13;;1587:22;:81::i;:::-;-1:-1:-1;;;;;1679:14:37;;1475:222;-1:-1:-1;;;;1475:222:37:o;6758:149:78:-;6842:4;6865:35;6875:3;6895;6865:9;:35::i;4450:108::-;4532:19;;4450:108::o;6731:135:79:-;6801:4;6824:35;6832:3;6852:5;6824:7;:35::i;6434:129::-;6501:4;6524:32;6529:3;6549:5;6524:4;:32::i;6206:174:78:-;6295:4;6318:55;6323:3;6343;-1:-1:-1;;;;;6357:14:78;;6318:4;:55::i;4390:201:79:-;4484:18;;4457:7;;4484:26;-1:-1:-1;4476:73:79;;;;-1:-1:-1;;;4476:73:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4566:3;:11;;4578:5;4566:18;;;;;;;;;;;;;;;;4559:25;;4390:201;;;;:::o;980:535:77:-;1067:7;1086:12;1141:6;1116:21;:31;;1108:73;;;;;-1:-1:-1;;;1108:73:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;1199:15;;1191:65;;;;;-1:-1:-1;;;1191:65:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1407:4;1396:8;1390:15;1383:4;1373:8;1369:19;1361:6;1353:59;1345:67;-1:-1:-1;;;;;;1439:18:77;;1431:56;;;;;-1:-1:-1;;;1431:56:77;;;;;;;;;;;;;;;;;;;;;;;;;;;16870:393:71;-1:-1:-1;;;;;16949:16:71;;16941:61;;;;;-1:-1:-1;;;16941:61:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17021:16;17029:7;17021;:16::i;:::-;17020:17;17012:58;;;;;-1:-1:-1;;;17012:58:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;17081:45;17110:1;17114:2;17118:7;17081:20;:45::i;:::-;-1:-1:-1;;;;;17137:17:71;;;;;;:13;:17;;;;;:30;;17159:7;17137:30;:21;:30;:::i;:::-;-1:-1:-1;17178:29:71;:12;17195:7;17204:2;17178:29;:16;:29;:::i;:::-;-1:-1:-1;17223:33:71;;17248:7;;-1:-1:-1;;;;;17223:33:71;;;17240:1;;17223:33;;17240:1;;17223:33;16870:393;;:::o;4901:274:78:-;5004:19;;4968:7;;;;5004:27;-1:-1:-1;4996:74:78;;;;-1:-1:-1;;;4996:74:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5081:22;5106:3;:12;;5119:5;5106:19;;;;;;;;;;;;;;;;;;5081:44;;5143:5;:10;;;5155:5;:12;;;5135:33;;;;;4901:274;;;;;:::o;5582:315::-;5676:7;5714:17;;;:12;;;:17;;;;;;5764:12;5749:13;5741:36;;;;-1:-1:-1;;;5741:36:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5741:36:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5830:3;:12;;5854:1;5843:8;:12;5830:26;;;;;;;;;;;;;;;;;;:33;;;5823:40;;;5582:315;;;;;:::o;20301:1050:71:-;20421:4;20446:15;:2;-1:-1:-1;;;;;20446:13:71;;:15::i;:::-;20441:58;;-1:-1:-1;20484:4:71;20477:11;;20441:58;20568:12;20582:23;-1:-1:-1;;;;;20609:7:71;;-1:-1:-1;;;20712:12:71;:10;:12::i;:::-;20738:4;20756:7;20777:5;20617:175;;;;;;-1:-1:-1;;;;;20617:175:71;-1:-1:-1;;;;;20617:175:71;;;;;;-1:-1:-1;;;;;20617:175:71;-1:-1:-1;;;;;20617:175:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;20617:175:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20617:175:71;;;-1:-1:-1;;26:21;;;22:32;6:49;;20617:175:71;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;;;;20617:175:71;;;179:29:-1;;;;160:49;;20609:184:71;;;20617:175;;20609:184;;-1:-1:-1;20609:184:71;;-1:-1:-1;25:18;-1:-1;20609:184:71;-1:-1:-1;20609:184:71;;-1:-1:-1;20609:184:71;;-1:-1:-1;25:18;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;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;;;20609:184:71;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;20567:226:71;;;;20808:7;20803:542;;20835:17;;:21;20831:376;;21000:10;20994:17;21060:15;21047:10;21043:2;21039:19;21032:44;20949:145;21132:60;;-1:-1:-1;;;21132:60:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20803:542;21237:13;21264:10;21253:32;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21253:32:71;-1:-1:-1;;;;;;21307:26:71;-1:-1:-1;;;21307:26:71;;-1:-1:-1;21299:35:71;;-1:-1:-1;;;21299:35:71;1719:165:77;1802:7;1828:49;1843:4;1849:12;1871:4;1828:14;:49::i;4237:123:78:-;4308:4;4331:17;;;:12;;;;;:17;;;;;;:22;;;4237:123::o;2150:1512:79:-;2216:4;2353:19;;;:12;;;:19;;;;;;2387:15;;2383:1273;;2816:18;;-1:-1:-1;;2768:14:79;;;;2816:22;;;;2744:21;;2816:3;;:22;;3098;;;;;;;;;;;;;;3078:42;;3241:9;3212:3;:11;;3224:13;3212:26;;;;;;;;;;;;;;;;;;;:38;;;;3316:23;;;3358:1;3316:12;;;:23;;;;;;3342:17;;;3316:43;;3465:17;;3316:3;;3465:17;;;;;;;;;;;;;;;;;;;;;;3557:3;:12;;:19;3570:5;3557:19;;;;;;;;;;;3550:26;;;3598:4;3591:11;;;;;;;;2383:1273;3640:5;3633:12;;;;;1578:404;1641:4;1662:21;1672:3;1677:5;1662:9;:21::i;:::-;1657:319;;-1:-1:-1;27:10;;39:1;23:18;;;45:23;;1699:11:79;:23;;;;;;;;;;;;;1879:18;;1857:19;;;:12;;;:19;;;;;;:40;;;;1911:11;;1657:319;-1:-1:-1;1960:5:79;1953:12;;1795:678:78;1871:4;2004:17;;;:12;;;:17;;;;;;2036:13;2032:435;;-1:-1:-1;;2120:38:78;;;;;;;;;;;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;2102:12:78;:57;;;;;;;;;;;;;;;;;;;;;;;;2314:19;;2294:17;;;:12;;;:17;;;;;;;:39;2347:11;;2032:435;2425:5;2389:3;:12;;2413:1;2402:8;:12;2389:26;;;;;;;;;;;;;;;;;;:33;;:41;;;;2451:5;2444:12;;;;;685:610:76;745:4;1206:20;;1051:66;1245:23;;;;;;:42;;-1:-1:-1;;1272:15:76;;;1237:51;-1:-1:-1;;685:610:76:o;2127:282:77:-;2286:60;;;-1:-1:-1;;;;;;2286:60:77;;;;;;;;;;;;;-1:-1:-1;;2286:60:77;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2286:60:77;;;;;;;2263:93;;;;;-1:-1:-1;;;;;2373:29:77;;2127:282::o;73:1327:40:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;73:1327:40;;;-1:-1:-1;73:1327:40;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;",
  "source": "pragma solidity ^0.6.0;\n\nimport '../Registry.sol';\nimport './App.sol';\n\n\ncontract AppRegistry is Registry\n{\n\t/**\n\t * Constructor\n\t */\n\tconstructor()\n\tpublic Registry(\n\t\taddress(new App()),\n\t\t'iExec Application Registry (V5)',\n\t\t'iExecAppsV5')\n\t{\n\t}\n\n\t/**\n\t * App creation\n\t */\n\tfunction encodeInitializer(\n\t\tstring  memory _appName,\n\t\tstring  memory _appType,\n\t\tbytes   memory _appMultiaddr,\n\t\tbytes32        _appChecksum,\n\t\tbytes   memory _appMREnclave)\n\tinternal pure returns (bytes memory)\n\t{\n\t\treturn abi.encodeWithSignature(\n\t\t\t'initialize(string,string,bytes,bytes32,bytes)'\n\t\t,\t_appName\n\t\t,\t_appType\n\t\t,\t_appMultiaddr\n\t\t,\t_appChecksum\n\t\t,\t_appMREnclave\n\t\t);\n\t}\n\n\tfunction createApp(\n\t\taddress          _appOwner,\n\t\tstring  calldata _appName,\n\t\tstring  calldata _appType,\n\t\tbytes   calldata _appMultiaddr,\n\t\tbytes32          _appChecksum,\n\t\tbytes   calldata _appMREnclave)\n\texternal returns (App)\n\t{\n\t\treturn App(_mintCreate(_appOwner, encodeInitializer(_appName, _appType, _appMultiaddr, _appChecksum, _appMREnclave)));\n\t}\n\n\tfunction predictApp(\n\t\taddress          _appOwner,\n\t\tstring  calldata _appName,\n\t\tstring  calldata _appType,\n\t\tbytes   calldata _appMultiaddr,\n\t\tbytes32          _appChecksum,\n\t\tbytes   calldata _appMREnclave)\n\texternal view returns (App)\n\t{\n\t\treturn App(_mintPredict(_appOwner, encodeInitializer(_appName, _appType, _appMultiaddr, _appChecksum, _appMREnclave)));\n\t}\n}\n",
  "sourcePath": "/home/amxx/Work/iExec/code/PoCo-dev/contracts/registries/apps/AppRegistry.sol",
  "ast": {
    "absolutePath": "/home/amxx/Work/iExec/code/PoCo-dev/contracts/registries/apps/AppRegistry.sol",
    "exportedSymbols": {
      "AppRegistry": [
        8248
      ]
    },
    "id": 8249,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8139,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:40"
      },
      {
        "absolutePath": "/home/amxx/Work/iExec/code/PoCo-dev/contracts/registries/Registry.sol",
        "file": "../Registry.sol",
        "id": 8140,
        "nodeType": "ImportDirective",
        "scope": 8249,
        "sourceUnit": 8001,
        "src": "25:25:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/amxx/Work/iExec/code/PoCo-dev/contracts/registries/apps/App.sol",
        "file": "./App.sol",
        "id": 8141,
        "nodeType": "ImportDirective",
        "scope": 8249,
        "sourceUnit": 8138,
        "src": "51:19:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8142,
              "name": "Registry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8000,
              "src": "97:8:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Registry_$8000",
                "typeString": "contract Registry"
              }
            },
            "id": 8143,
            "nodeType": "InheritanceSpecifier",
            "src": "97:8:40"
          }
        ],
        "contractDependencies": [
          7780,
          8000,
          8137,
          10126,
          10752,
          10861,
          10917,
          10929,
          12151,
          12259,
          12287,
          12311
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 8248,
        "linearizedBaseContracts": [
          8248,
          8000,
          10861,
          10126,
          12151,
          7780,
          12287,
          12311,
          12259,
          10917,
          10929,
          10752
        ],
        "name": "AppRegistry",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 8157,
              "nodeType": "Block",
              "src": "244:4:40",
              "statements": []
            },
            "documentation": {
              "id": 8144,
              "nodeType": "StructuredDocumentation",
              "src": "109:24:40",
              "text": "Constructor"
            },
            "id": 8158,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8150,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "177:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_App_$8137_$",
                            "typeString": "function () returns (contract App)"
                          },
                          "typeName": {
                            "contractScope": null,
                            "id": 8149,
                            "name": "App",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 8137,
                            "src": "181:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_App_$8137",
                              "typeString": "contract App"
                            }
                          }
                        },
                        "id": 8151,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "177:9:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_App_$8137",
                          "typeString": "contract App"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_App_$8137",
                          "typeString": "contract App"
                        }
                      ],
                      "id": 8148,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "169:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 8147,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "169:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 8152,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "169:18:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "hexValue": "6945786563204170706c69636174696f6e2052656769737472792028563529",
                    "id": 8153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "191:33:40",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_a08be85dd48f577aebf2b6927ce569be17ddba03f283376888c42f35aa6ac401",
                      "typeString": "literal_string \"iExec Application Registry (V5)\""
                    },
                    "value": "iExec Application Registry (V5)"
                  },
                  {
                    "argumentTypes": null,
                    "hexValue": "6945786563417070735635",
                    "id": 8154,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "228:13:40",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_1c797558bda43990d6740413550c98b950b467aff02179311982cdd477bf6335",
                      "typeString": "literal_string \"iExecAppsV5\""
                    },
                    "value": "iExecAppsV5"
                  }
                ],
                "id": 8155,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8146,
                  "name": "Registry",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8000,
                  "src": "157:8:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_Registry_$8000_$",
                    "typeString": "type(contract Registry)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "157:85:40"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 8145,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "146:2:40"
            },
            "returnParameters": {
              "id": 8156,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "244:0:40"
            },
            "scope": 8248,
            "src": "135:113:40",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8184,
              "nodeType": "Block",
              "src": "494:173:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "696e697469616c697a6528737472696e672c737472696e672c62797465732c627974657333322c627974657329",
                        "id": 8176,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "533:47:40",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_86c02c8f3bc0ec1cce7af1a43bb2bf3842fefc1277d314760bd53c0049085739",
                          "typeString": "literal_string \"initialize(string,string,bytes,bytes32,bytes)\""
                        },
                        "value": "initialize(string,string,bytes,bytes32,bytes)"
                      },
                      {
                        "argumentTypes": null,
                        "id": 8177,
                        "name": "_appName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8161,
                        "src": "585:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8178,
                        "name": "_appType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8163,
                        "src": "598:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8179,
                        "name": "_appMultiaddr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8165,
                        "src": "611:13:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8180,
                        "name": "_appChecksum",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8167,
                        "src": "629:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8181,
                        "name": "_appMREnclave",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8169,
                        "src": "646:13:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_86c02c8f3bc0ec1cce7af1a43bb2bf3842fefc1277d314760bd53c0049085739",
                          "typeString": "literal_string \"initialize(string,string,bytes,bytes32,bytes)\""
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8174,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "505:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 8175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodeWithSignature",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "505:23:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (string memory) pure returns (bytes memory)"
                      }
                    },
                    "id": 8182,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "505:158:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 8173,
                  "id": 8183,
                  "nodeType": "Return",
                  "src": "498:165:40"
                }
              ]
            },
            "documentation": {
              "id": 8159,
              "nodeType": "StructuredDocumentation",
              "src": "251:25:40",
              "text": "App creation"
            },
            "id": 8185,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "encodeInitializer",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 8170,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8161,
                  "mutability": "mutable",
                  "name": "_appName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8185,
                  "src": "308:23:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8160,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "308:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8163,
                  "mutability": "mutable",
                  "name": "_appType",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8185,
                  "src": "335:23:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8162,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "335:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8165,
                  "mutability": "mutable",
                  "name": "_appMultiaddr",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8185,
                  "src": "362:28:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8164,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "362:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8167,
                  "mutability": "mutable",
                  "name": "_appChecksum",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8185,
                  "src": "394:27:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8166,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "394:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8169,
                  "mutability": "mutable",
                  "name": "_appMREnclave",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8185,
                  "src": "425:28:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8168,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "425:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "304:150:40"
            },
            "returnParameters": {
              "id": 8173,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8172,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8185,
                  "src": "479:12:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8171,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "479:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "478:14:40"
            },
            "scope": 8248,
            "src": "278:389:40",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8215,
              "nodeType": "Block",
              "src": "904:125:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8204,
                            "name": "_appOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8187,
                            "src": "931:9:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8206,
                                "name": "_appName",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8189,
                                "src": "960:8:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8207,
                                "name": "_appType",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8191,
                                "src": "970:8:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8208,
                                "name": "_appMultiaddr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8193,
                                "src": "980:13:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8209,
                                "name": "_appChecksum",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8195,
                                "src": "995:12:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8210,
                                "name": "_appMREnclave",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8197,
                                "src": "1009:13:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                },
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                },
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              ],
                              "id": 8205,
                              "name": "encodeInitializer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8185,
                              "src": "942:17:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function (string memory,string memory,bytes memory,bytes32,bytes memory) pure returns (bytes memory)"
                              }
                            },
                            "id": 8211,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "942:81:40",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 8203,
                          "name": "_mintCreate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7909,
                          "src": "919:11:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$",
                            "typeString": "function (address,bytes memory) returns (uint256)"
                          }
                        },
                        "id": 8212,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "919:105:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8202,
                      "name": "App",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8137,
                      "src": "915:3:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_App_$8137_$",
                        "typeString": "type(contract App)"
                      }
                    },
                    "id": 8213,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "915:110:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_App_$8137",
                      "typeString": "contract App"
                    }
                  },
                  "functionReturnParameters": 8201,
                  "id": 8214,
                  "nodeType": "Return",
                  "src": "908:117:40"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "3f7868ff",
            "id": 8216,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createApp",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 8198,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8187,
                  "mutability": "mutable",
                  "name": "_appOwner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8216,
                  "src": "692:26:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8186,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "692:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8189,
                  "mutability": "mutable",
                  "name": "_appName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8216,
                  "src": "722:25:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8188,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "722:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8191,
                  "mutability": "mutable",
                  "name": "_appType",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8216,
                  "src": "751:25:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8190,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "751:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8193,
                  "mutability": "mutable",
                  "name": "_appMultiaddr",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8216,
                  "src": "780:30:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8192,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "780:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8195,
                  "mutability": "mutable",
                  "name": "_appChecksum",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8216,
                  "src": "814:29:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8194,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "814:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8197,
                  "mutability": "mutable",
                  "name": "_appMREnclave",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8216,
                  "src": "847:30:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8196,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "847:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "688:190:40"
            },
            "returnParameters": {
              "id": 8201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8200,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8216,
                  "src": "898:3:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_App_$8137",
                    "typeString": "contract App"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8199,
                    "name": "App",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8137,
                    "src": "898:3:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_App_$8137",
                      "typeString": "contract App"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "897:5:40"
            },
            "scope": 8248,
            "src": "670:359:40",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8246,
              "nodeType": "Block",
              "src": "1272:126:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8235,
                            "name": "_appOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8218,
                            "src": "1300:9:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8237,
                                "name": "_appName",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8220,
                                "src": "1329:8:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8238,
                                "name": "_appType",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8222,
                                "src": "1339:8:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8239,
                                "name": "_appMultiaddr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8224,
                                "src": "1349:13:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8240,
                                "name": "_appChecksum",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8226,
                                "src": "1364:12:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8241,
                                "name": "_appMREnclave",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8228,
                                "src": "1378:13:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                },
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                },
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              ],
                              "id": 8236,
                              "name": "encodeInitializer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8185,
                              "src": "1311:17:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function (string memory,string memory,bytes memory,bytes32,bytes memory) pure returns (bytes memory)"
                              }
                            },
                            "id": 8242,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1311:81:40",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 8234,
                          "name": "_mintPredict",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7938,
                          "src": "1287:12:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$",
                            "typeString": "function (address,bytes memory) view returns (uint256)"
                          }
                        },
                        "id": 8243,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1287:106:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8233,
                      "name": "App",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8137,
                      "src": "1283:3:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_App_$8137_$",
                        "typeString": "type(contract App)"
                      }
                    },
                    "id": 8244,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1283:111:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_App_$8137",
                      "typeString": "contract App"
                    }
                  },
                  "functionReturnParameters": 8232,
                  "id": 8245,
                  "nodeType": "Return",
                  "src": "1276:118:40"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "e92118ed",
            "id": 8247,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "predictApp",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 8229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8218,
                  "mutability": "mutable",
                  "name": "_appOwner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8247,
                  "src": "1055:26:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8217,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1055:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8220,
                  "mutability": "mutable",
                  "name": "_appName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8247,
                  "src": "1085:25:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8219,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1085:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8222,
                  "mutability": "mutable",
                  "name": "_appType",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8247,
                  "src": "1114:25:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8221,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1114:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8224,
                  "mutability": "mutable",
                  "name": "_appMultiaddr",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8247,
                  "src": "1143:30:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8223,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1143:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8226,
                  "mutability": "mutable",
                  "name": "_appChecksum",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8247,
                  "src": "1177:29:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8225,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1177:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8228,
                  "mutability": "mutable",
                  "name": "_appMREnclave",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8247,
                  "src": "1210:30:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8227,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1210:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1051:190:40"
            },
            "returnParameters": {
              "id": 8232,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8231,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8247,
                  "src": "1266:3:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_App_$8137",
                    "typeString": "contract App"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8230,
                    "name": "App",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8137,
                    "src": "1266:3:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_App_$8137",
                      "typeString": "contract App"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1265:5:40"
            },
            "scope": 8248,
            "src": "1032:366:40",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 8249,
        "src": "73:1327:40"
      }
    ],
    "src": "0:1401:40"
  },
  "legacyAST": {
    "absolutePath": "/home/amxx/Work/iExec/code/PoCo-dev/contracts/registries/apps/AppRegistry.sol",
    "exportedSymbols": {
      "AppRegistry": [
        8248
      ]
    },
    "id": 8249,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8139,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:40"
      },
      {
        "absolutePath": "/home/amxx/Work/iExec/code/PoCo-dev/contracts/registries/Registry.sol",
        "file": "../Registry.sol",
        "id": 8140,
        "nodeType": "ImportDirective",
        "scope": 8249,
        "sourceUnit": 8001,
        "src": "25:25:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/amxx/Work/iExec/code/PoCo-dev/contracts/registries/apps/App.sol",
        "file": "./App.sol",
        "id": 8141,
        "nodeType": "ImportDirective",
        "scope": 8249,
        "sourceUnit": 8138,
        "src": "51:19:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8142,
              "name": "Registry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8000,
              "src": "97:8:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Registry_$8000",
                "typeString": "contract Registry"
              }
            },
            "id": 8143,
            "nodeType": "InheritanceSpecifier",
            "src": "97:8:40"
          }
        ],
        "contractDependencies": [
          7780,
          8000,
          8137,
          10126,
          10752,
          10861,
          10917,
          10929,
          12151,
          12259,
          12287,
          12311
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 8248,
        "linearizedBaseContracts": [
          8248,
          8000,
          10861,
          10126,
          12151,
          7780,
          12287,
          12311,
          12259,
          10917,
          10929,
          10752
        ],
        "name": "AppRegistry",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 8157,
              "nodeType": "Block",
              "src": "244:4:40",
              "statements": []
            },
            "documentation": {
              "id": 8144,
              "nodeType": "StructuredDocumentation",
              "src": "109:24:40",
              "text": "Constructor"
            },
            "id": 8158,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8150,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "177:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_App_$8137_$",
                            "typeString": "function () returns (contract App)"
                          },
                          "typeName": {
                            "contractScope": null,
                            "id": 8149,
                            "name": "App",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 8137,
                            "src": "181:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_App_$8137",
                              "typeString": "contract App"
                            }
                          }
                        },
                        "id": 8151,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "177:9:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_App_$8137",
                          "typeString": "contract App"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_App_$8137",
                          "typeString": "contract App"
                        }
                      ],
                      "id": 8148,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "169:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 8147,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "169:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 8152,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "169:18:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "hexValue": "6945786563204170706c69636174696f6e2052656769737472792028563529",
                    "id": 8153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "191:33:40",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_a08be85dd48f577aebf2b6927ce569be17ddba03f283376888c42f35aa6ac401",
                      "typeString": "literal_string \"iExec Application Registry (V5)\""
                    },
                    "value": "iExec Application Registry (V5)"
                  },
                  {
                    "argumentTypes": null,
                    "hexValue": "6945786563417070735635",
                    "id": 8154,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "228:13:40",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_1c797558bda43990d6740413550c98b950b467aff02179311982cdd477bf6335",
                      "typeString": "literal_string \"iExecAppsV5\""
                    },
                    "value": "iExecAppsV5"
                  }
                ],
                "id": 8155,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8146,
                  "name": "Registry",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8000,
                  "src": "157:8:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_Registry_$8000_$",
                    "typeString": "type(contract Registry)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "157:85:40"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 8145,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "146:2:40"
            },
            "returnParameters": {
              "id": 8156,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "244:0:40"
            },
            "scope": 8248,
            "src": "135:113:40",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8184,
              "nodeType": "Block",
              "src": "494:173:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "696e697469616c697a6528737472696e672c737472696e672c62797465732c627974657333322c627974657329",
                        "id": 8176,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "533:47:40",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_86c02c8f3bc0ec1cce7af1a43bb2bf3842fefc1277d314760bd53c0049085739",
                          "typeString": "literal_string \"initialize(string,string,bytes,bytes32,bytes)\""
                        },
                        "value": "initialize(string,string,bytes,bytes32,bytes)"
                      },
                      {
                        "argumentTypes": null,
                        "id": 8177,
                        "name": "_appName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8161,
                        "src": "585:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8178,
                        "name": "_appType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8163,
                        "src": "598:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8179,
                        "name": "_appMultiaddr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8165,
                        "src": "611:13:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8180,
                        "name": "_appChecksum",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8167,
                        "src": "629:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8181,
                        "name": "_appMREnclave",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8169,
                        "src": "646:13:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_86c02c8f3bc0ec1cce7af1a43bb2bf3842fefc1277d314760bd53c0049085739",
                          "typeString": "literal_string \"initialize(string,string,bytes,bytes32,bytes)\""
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8174,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "505:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 8175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodeWithSignature",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "505:23:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (string memory) pure returns (bytes memory)"
                      }
                    },
                    "id": 8182,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "505:158:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 8173,
                  "id": 8183,
                  "nodeType": "Return",
                  "src": "498:165:40"
                }
              ]
            },
            "documentation": {
              "id": 8159,
              "nodeType": "StructuredDocumentation",
              "src": "251:25:40",
              "text": "App creation"
            },
            "id": 8185,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "encodeInitializer",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 8170,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8161,
                  "mutability": "mutable",
                  "name": "_appName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8185,
                  "src": "308:23:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8160,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "308:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8163,
                  "mutability": "mutable",
                  "name": "_appType",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8185,
                  "src": "335:23:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8162,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "335:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8165,
                  "mutability": "mutable",
                  "name": "_appMultiaddr",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8185,
                  "src": "362:28:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8164,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "362:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8167,
                  "mutability": "mutable",
                  "name": "_appChecksum",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8185,
                  "src": "394:27:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8166,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "394:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8169,
                  "mutability": "mutable",
                  "name": "_appMREnclave",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8185,
                  "src": "425:28:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8168,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "425:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "304:150:40"
            },
            "returnParameters": {
              "id": 8173,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8172,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8185,
                  "src": "479:12:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8171,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "479:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "478:14:40"
            },
            "scope": 8248,
            "src": "278:389:40",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8215,
              "nodeType": "Block",
              "src": "904:125:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8204,
                            "name": "_appOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8187,
                            "src": "931:9:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8206,
                                "name": "_appName",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8189,
                                "src": "960:8:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8207,
                                "name": "_appType",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8191,
                                "src": "970:8:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8208,
                                "name": "_appMultiaddr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8193,
                                "src": "980:13:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8209,
                                "name": "_appChecksum",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8195,
                                "src": "995:12:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8210,
                                "name": "_appMREnclave",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8197,
                                "src": "1009:13:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                },
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                },
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              ],
                              "id": 8205,
                              "name": "encodeInitializer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8185,
                              "src": "942:17:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function (string memory,string memory,bytes memory,bytes32,bytes memory) pure returns (bytes memory)"
                              }
                            },
                            "id": 8211,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "942:81:40",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 8203,
                          "name": "_mintCreate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7909,
                          "src": "919:11:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$",
                            "typeString": "function (address,bytes memory) returns (uint256)"
                          }
                        },
                        "id": 8212,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "919:105:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8202,
                      "name": "App",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8137,
                      "src": "915:3:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_App_$8137_$",
                        "typeString": "type(contract App)"
                      }
                    },
                    "id": 8213,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "915:110:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_App_$8137",
                      "typeString": "contract App"
                    }
                  },
                  "functionReturnParameters": 8201,
                  "id": 8214,
                  "nodeType": "Return",
                  "src": "908:117:40"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "3f7868ff",
            "id": 8216,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createApp",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 8198,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8187,
                  "mutability": "mutable",
                  "name": "_appOwner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8216,
                  "src": "692:26:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8186,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "692:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8189,
                  "mutability": "mutable",
                  "name": "_appName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8216,
                  "src": "722:25:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8188,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "722:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8191,
                  "mutability": "mutable",
                  "name": "_appType",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8216,
                  "src": "751:25:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8190,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "751:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8193,
                  "mutability": "mutable",
                  "name": "_appMultiaddr",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8216,
                  "src": "780:30:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8192,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "780:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8195,
                  "mutability": "mutable",
                  "name": "_appChecksum",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8216,
                  "src": "814:29:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8194,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "814:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8197,
                  "mutability": "mutable",
                  "name": "_appMREnclave",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8216,
                  "src": "847:30:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8196,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "847:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "688:190:40"
            },
            "returnParameters": {
              "id": 8201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8200,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8216,
                  "src": "898:3:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_App_$8137",
                    "typeString": "contract App"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8199,
                    "name": "App",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8137,
                    "src": "898:3:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_App_$8137",
                      "typeString": "contract App"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "897:5:40"
            },
            "scope": 8248,
            "src": "670:359:40",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8246,
              "nodeType": "Block",
              "src": "1272:126:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8235,
                            "name": "_appOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8218,
                            "src": "1300:9:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8237,
                                "name": "_appName",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8220,
                                "src": "1329:8:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8238,
                                "name": "_appType",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8222,
                                "src": "1339:8:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8239,
                                "name": "_appMultiaddr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8224,
                                "src": "1349:13:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8240,
                                "name": "_appChecksum",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8226,
                                "src": "1364:12:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8241,
                                "name": "_appMREnclave",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8228,
                                "src": "1378:13:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                },
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                },
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              ],
                              "id": 8236,
                              "name": "encodeInitializer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8185,
                              "src": "1311:17:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function (string memory,string memory,bytes memory,bytes32,bytes memory) pure returns (bytes memory)"
                              }
                            },
                            "id": 8242,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1311:81:40",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 8234,
                          "name": "_mintPredict",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7938,
                          "src": "1287:12:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$",
                            "typeString": "function (address,bytes memory) view returns (uint256)"
                          }
                        },
                        "id": 8243,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1287:106:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8233,
                      "name": "App",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8137,
                      "src": "1283:3:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_App_$8137_$",
                        "typeString": "type(contract App)"
                      }
                    },
                    "id": 8244,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1283:111:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_App_$8137",
                      "typeString": "contract App"
                    }
                  },
                  "functionReturnParameters": 8232,
                  "id": 8245,
                  "nodeType": "Return",
                  "src": "1276:118:40"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "e92118ed",
            "id": 8247,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "predictApp",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 8229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8218,
                  "mutability": "mutable",
                  "name": "_appOwner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8247,
                  "src": "1055:26:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8217,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1055:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8220,
                  "mutability": "mutable",
                  "name": "_appName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8247,
                  "src": "1085:25:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8219,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1085:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8222,
                  "mutability": "mutable",
                  "name": "_appType",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8247,
                  "src": "1114:25:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8221,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1114:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8224,
                  "mutability": "mutable",
                  "name": "_appMultiaddr",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8247,
                  "src": "1143:30:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8223,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1143:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8226,
                  "mutability": "mutable",
                  "name": "_appChecksum",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8247,
                  "src": "1177:29:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8225,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1177:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8228,
                  "mutability": "mutable",
                  "name": "_appMREnclave",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8247,
                  "src": "1210:30:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8227,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1210:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1051:190:40"
            },
            "returnParameters": {
              "id": 8232,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8231,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8247,
                  "src": "1266:3:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_App_$8137",
                    "typeString": "contract App"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8230,
                    "name": "App",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8137,
                    "src": "1266:3:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_App_$8137",
                      "typeString": "contract App"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1265:5:40"
            },
            "scope": 8248,
            "src": "1032:366:40",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 8249,
        "src": "73:1327:40"
      }
    ],
    "src": "0:1401:40"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.6+commit.6c089d02.Emscripten.clang"
  },
  "networks": {
    "1": {
      "events": {
        "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "approved",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "name": "Approval",
          "type": "event"
        },
        "0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "bool",
              "name": "approved",
              "type": "bool"
            }
          ],
          "name": "ApprovalForAll",
          "type": "event"
        },
        "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "previousOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "name": "OwnershipTransferred",
          "type": "event"
        },
        "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "name": "Transfer",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xB1C52075b276f87b1834919167312221d50c9D16"
    },
    "3": {
      "events": {
        "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "approved",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "name": "Approval",
          "type": "event"
        },
        "0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "bool",
              "name": "approved",
              "type": "bool"
            }
          ],
          "name": "ApprovalForAll",
          "type": "event"
        },
        "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "previousOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "name": "OwnershipTransferred",
          "type": "event"
        },
        "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "name": "Transfer",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xB1C52075b276f87b1834919167312221d50c9D16"
    },
    "4": {
      "events": {
        "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "approved",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "name": "Approval",
          "type": "event"
        },
        "0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "bool",
              "name": "approved",
              "type": "bool"
            }
          ],
          "name": "ApprovalForAll",
          "type": "event"
        },
        "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "previousOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "name": "OwnershipTransferred",
          "type": "event"
        },
        "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "name": "Transfer",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xB1C52075b276f87b1834919167312221d50c9D16"
    },
    "5": {
      "events": {
        "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "approved",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "name": "Approval",
          "type": "event"
        },
        "0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "bool",
              "name": "approved",
              "type": "bool"
            }
          ],
          "name": "ApprovalForAll",
          "type": "event"
        },
        "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "previousOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "name": "OwnershipTransferred",
          "type": "event"
        },
        "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "name": "Transfer",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xB1C52075b276f87b1834919167312221d50c9D16"
    },
    "42": {
      "events": {
        "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "approved",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "name": "Approval",
          "type": "event"
        },
        "0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "bool",
              "name": "approved",
              "type": "bool"
            }
          ],
          "name": "ApprovalForAll",
          "type": "event"
        },
        "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "previousOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "name": "OwnershipTransferred",
          "type": "event"
        },
        "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "name": "Transfer",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xB1C52075b276f87b1834919167312221d50c9D16"
    }
  },
  "schemaVersion": "3.1.0",
  "updatedAt": "2020-04-21T19:16:56.338Z",
  "networkType": "ethereum",
  "devdoc": {
    "methods": {
      "approve(address,uint256)": {
        "details": "Approves another address to transfer the given token ID The zero address indicates there is no approved address. There can only be one approved address per token at a given time. Can only be called by the token owner or an approved operator.",
        "params": {
          "to": "address to be approved for the given token ID",
          "tokenId": "uint256 ID of the token to be approved"
        }
      },
      "balanceOf(address)": {
        "details": "Gets the balance of the specified address.",
        "params": {
          "owner": "address to query the balance of"
        },
        "returns": {
          "_0": "uint256 representing the amount owned by the passed address"
        }
      },
      "baseURI()": {
        "details": "Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID."
      },
      "getApproved(uint256)": {
        "details": "Gets the approved address for a token ID, or zero if no address set Reverts if the token ID does not exist.",
        "params": {
          "tokenId": "uint256 ID of the token to query the approval of"
        },
        "returns": {
          "_0": "address currently approved for the given token ID"
        }
      },
      "isApprovedForAll(address,address)": {
        "details": "Tells whether an operator is approved by a given owner.",
        "params": {
          "operator": "operator address which you want to query the approval of",
          "owner": "owner address which you want to query the approval of"
        },
        "returns": {
          "_0": "bool whether the given operator is approved by the given owner"
        }
      },
      "name()": {
        "details": "Gets the token name.",
        "returns": {
          "_0": "string representing the token name"
        }
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "ownerOf(uint256)": {
        "details": "Gets the owner of the specified token ID.",
        "params": {
          "tokenId": "uint256 ID of the token to query the owner of"
        },
        "returns": {
          "_0": "address currently marked as the owner of the given token ID"
        }
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "safeTransferFrom(address,address,uint256)": {
        "details": "Safely transfers the ownership of a given token ID to another address If the target address is a contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer, and return the magic value `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`; otherwise, the transfer is reverted. Requires the msg.sender to be the owner, approved, or operator",
        "params": {
          "from": "current owner of the token",
          "to": "address to receive the ownership of the given token ID",
          "tokenId": "uint256 ID of the token to be transferred"
        }
      },
      "safeTransferFrom(address,address,uint256,bytes)": {
        "details": "Safely transfers the ownership of a given token ID to another address If the target address is a contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer, and return the magic value `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`; otherwise, the transfer is reverted. Requires the _msgSender() to be the owner, approved, or operator",
        "params": {
          "_data": "bytes data to send along with a safe transfer check",
          "from": "current owner of the token",
          "to": "address to receive the ownership of the given token ID",
          "tokenId": "uint256 ID of the token to be transferred"
        }
      },
      "setApprovalForAll(address,bool)": {
        "details": "Sets or unsets the approval of a given operator An operator is allowed to transfer all tokens of the sender on their behalf.",
        "params": {
          "approved": "representing the status of the approval to be set",
          "operator": "operator address to set the approval"
        }
      },
      "supportsInterface(bytes4)": {
        "details": "See {IERC165-supportsInterface}.     * Time complexity O(1), guaranteed to always use less than 30 000 gas."
      },
      "symbol()": {
        "details": "Gets the token symbol.",
        "returns": {
          "_0": "string representing the token symbol"
        }
      },
      "tokenByIndex(uint256)": {
        "details": "Gets the token ID at a given index of all the tokens in this contract Reverts if the index is greater or equal to the total number of tokens.",
        "params": {
          "index": "uint256 representing the index to be accessed of the tokens list"
        },
        "returns": {
          "_0": "uint256 token ID at the given index of the tokens list"
        }
      },
      "tokenOfOwnerByIndex(address,uint256)": {
        "details": "Gets the token ID at a given index of the tokens list of the requested owner.",
        "params": {
          "index": "uint256 representing the index to be accessed of the requested tokens list",
          "owner": "address owning the tokens list to be accessed"
        },
        "returns": {
          "_0": "uint256 token ID at the given index of the tokens list owned by the requested address"
        }
      },
      "tokenURI(uint256)": {
        "details": "Returns the URI for a given token ID. May return an empty string.     * If a base URI is set (via {_setBaseURI}), it is added as a prefix to the token's own URI (via {_setTokenURI}).     * If there is a base URI but no token URI, the token's ID will be used as its URI when appending it to the base URI. This pattern for autogenerated token URIs can lead to large gas savings.     * .Examples |=== |`_setBaseURI()` |`_setTokenURI()` |`tokenURI()` | \"\" | \"\" | \"\" | \"\" | \"token.uri/123\" | \"token.uri/123\" | \"token.uri/\" | \"123\" | \"token.uri/123\" | \"token.uri/\" | \"\" | \"token.uri/<tokenId>\" |===     * Requirements:     * - `tokenId` must exist."
      },
      "totalSupply()": {
        "details": "Gets the total amount of tokens stored by the contract.",
        "returns": {
          "_0": "uint256 representing the total amount of tokens"
        }
      },
      "transferFrom(address,address,uint256)": {
        "details": "Transfers the ownership of a given token ID to another address. Usage of this method is discouraged, use {safeTransferFrom} whenever possible. Requires the msg.sender to be the owner, approved, or operator.",
        "params": {
          "from": "current owner of the token",
          "to": "address to receive the ownership of the given token ID",
          "tokenId": "uint256 ID of the token to be transferred"
        }
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    }
  },
  "userdoc": {
    "methods": {
      "constructor": "Constructor"
    }
  }
}